Вкладка "Мой пользовательский продукт" не отображается в Magento 2


Я пытаюсь вставить свою вкладку "Пользовательский продукт" в витрину магазина на странице просмотра продукта, но она не отображается. Для этого я пишу ниже код.

Registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Test_ProductTabs',
    __DIR__
);

Test/ProductTabs/Block/CustomTab.php

<?php
namespace Test\ProductTabs\Block;

use Magento\Catalog\Model\Product;

class CustomTab extends \Magento\Framework\View\Element\Template{

    /**
     * @var Product
     */
    protected $_product = null;

    /**
     * Core registry
     *
     * @var \Magento\Framework\Registry
     */
    protected $_coreRegistry = null;

    /**
     * @param \Magento\Framework\View\Element\Template\Context $context
     * @param \Magento\Framework\Registry $registry
     * @param array $data
     */
    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Framework\Registry $registry,
        array $data = []
    ) {
        $this->_coreRegistry = $registry;
        parent::__construct($context, $data);
    }

    /**
     * @return Product
     */
    public function getProduct()
    {
        if (!$this->_product) {
            $this->_product = $this->_coreRegistry->registry('product');
        }
        return $this->_product;
    }

}

Test/ProductTabs/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Test_ProductTabs" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Catalog"/>
        </sequence>
    </module>
</config>

Test/ProductTabs/view/layout/catalog_product_view.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
   <body>
        <referenceBlock name="product.info.details">
           <block class="Test\ProductTabs\Block\CustomTab" name="mycustom.tab" as="mycustom" template="Test_ProductTabs::kit.phtml" group="detailed_info">
               <arguments>
                   <argument name="title" translate="true" xsi:type="string">Kit Components</argument>
               </arguments>
           </block>
       </referenceBlock>
   </body>
</page>

Тест/Вкладки продуктов/просмотр/шаблоны/kit.phtml

<h1>Kit Components</h1>

Приведенный выше код не работает для меня. Есть какая-нибудь помощь в этом?

Author: Bojjaiah, 2016-11-17

7 answers

Попробуйте сделать это в файле макета

<referenceBlock name="product.info.details">

    <block class="Magento\Catalog\Block\Product\View" name="mycustom.tab" as="mycustom" template="Test_ProductTabs::kit.phtml" group="detailed_info">
        <arguments>
            <argument translate="true" name="title" xsi:type="string">Kit Components</argument>
        </arguments>
    </block>

</referenceBlock>

Все сведения, связанные с продуктом, доступны в Magento\Catalog\Block\Product\View, поэтому нет необходимости создавать пользовательский блок для получения сведений о продукте.

Обновление

Неверное расположение файла макета! это должно быть

Test/ProductTabs/view/frontend/layout/catalog_product_view.xml

 7
Author: Bilal Usean, 2016-11-17 11:42:12

Ваш код в порядке, просто простая ошибка, вы сделали две ошибки

Пожалуйста, измените имя файла

catalog_product_view_.xml

До

catalog_product_view.xml

Измените макет интерфейса и расположение файла tempplate

Test/ProductTabs/view/layout/catalog_product_view_.xml

До

Test/ProductTabs/view/frontend/layout/catalog_product_view.xml

Изменить расположение файла шаблона

Test/ProductTabs/view/templates/kit.phtml

До

Test/ProductTabs/view/frontend/templates/kit.phtml
 3
Author: Prashant Valanda, 2016-11-17 11:32:46

Я думаю, что лучший способ сделать это - следовать тому же подходу, который Magento использует для добавления атрибута description в качестве одной из вкладок на странице сведений о продукте.

Сначала создайте свой атрибут, допустим, это tech_spec и добавьте его в любой набор атрибутов, который вы хотите, чтобы я мог обновляться со страницы "Управление продуктами".

Затем создайте/обновите свое приложение\код[Пространство имен][Имя модуля]\view\frontend\layout\catalog_product_view.xml файл с помощью:

<referenceBlock name="product.info.details">
    <block class="Magento\Catalog\Block\Product\View\Description" name="product.info.tech.spec" template="product/view/attribute.phtml" group="detailed_info">
        <arguments>
            <argument name="at_call" xsi:type="string">getTechSpec</argument>
            <argument name="at_code" xsi:type="string">tech_spec</argument>
            <argument name="css_class" xsi:type="string">tech-spec</argument>
            <argument name="at_label" xsi:type="string">none</argument>
            <argument name="title" translate="true" xsi:type="string">Technical Specification</argument>
        </arguments>
    </block>
</referenceBlock>

В качестве альтернативы, если вы не хотите добавлять атрибут, вы можете вместо этого добавить шаблон.

<referenceBlock name="product.info.details">
    <block class="Magento\Catalog\Block\Product\View" name="product.info.tech.spec" template="Magento_Catalog::product/view/tech-spec.phtml" group="detailed_info" >
        <arguments>
            <argument translate="true" name="title" xsi:type="string">Technical Specification</argument>
        </arguments>
    </block>
</referenceBlock>
 3
Author: Holly, 2019-02-28 04:57:26

Попробуйте этот код компоновки:

   <referenceContainer name="content">
        <referenceBlock name="product.info.details">
            <block class="Test\ProductTabs\Block\CustomTab" name="customtab_display" template="template="Test_ProductTabs::kit.phtml" group="detailed_info">
                <arguments>
                    <argument translate="true" name="title" xsi:type="string">Kit Components</argument>
                </arguments>
            </block>
        </referenceBlock>
   </referenceContainer>
 2
Author: Ronak Chauhan, 2017-11-13 09:01:31

Я добавляю свои открытия в качестве нового ответа, чтобы он был лучше виден и мог быть одобрен. Действительно, были некоторые ошибки в именовании файлов/структуре папок. Но этого недостаточно...

TL; ДР :

  • Добавьте значение sort_order в свой блок вкладок: <argument name="sort_order" xsi:type="string">99</argument>
  • Убедитесь, что это sort_order значение УНИКАЛЬНО среди других вкладок
  • Выполнить php bin/magento indexer:reindex и php bin/magento cache:clear

Причины, по которым :

Все происходит в \Magento\Catalog\Block\Product\View\Details::getGroupSortedChildNames()

  • Если вы хотите, чтобы ваша вкладка была вытянута getGroupChildNames(), вам необходимо переиндексировать , прежде чем (php bin/magento indexer:reindex)
  • getGroupSortedChildNames() метод выполняет сортировку по вкладкам с использованием значений блоков sort_order. Если sort_order не найдено, резервным вариантом будет 0. Если несколько блоков вкладок определены без sort_order, последний из них, который будет указан 0, заменит все предыдущие вкладки в конечном отсортированном массиве вкладок. В моем случае последней была вкладка из модуля Mageplaza_Faq...

Я надеюсь, что это помешает другим людям потянуть их за волосы на пару часов, как это сделал я.

 2
Author: LittleBigDev, 2019-07-17 14:05:19
  1. Сначала перейдите в панель администратора вашего магазина Magento, а затем перейдите к Магазины -> Товар. Нажмите "Добавить новый атрибут" и создайте новый атрибут. (Установите метку атрибута ДЕМО и код атрибута демо)

  2. Теперь перейдите в раздел Магазины ->Набор атрибутов и добавьте набор атрибутов.

  3. Теперь нажмите на свой набор атрибутов и перетащите неназначенный атрибут (который вы создали на первом шаге) в Сведения о продукте и нажмите Сохранить.

  4. Теперь перейдите на страницу редактирования вашего продукта в панели администратора и измените имя атрибута и имя шаблона, которые вы создали на первом и втором шаге.

  5. В app/code/Test/ProductTabs/etc/module.xml вставьте этот код.

<?xml version="1.0"?>
   <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
   <module name="Test_ProductTabs" setup_version="1.0.0"></module>
</config>
  1. В app/code/Test/ProductTabs/registration.php , вставьте этот код.
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Test_ProductTabs',
    __DIR__
);
  1. В app/code/Test/ProductTabs/view/frontend/layout/catalog_product_view.xml , вставьте этот код.
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="product.info.details">
            <block class="Magento\Catalog\Block\Product\View" name="demo.tab" template="Test_ProductTabs::custom_tab.phtml" group="detailed_info" >
                <arguments>
                    <argument translate="true" name="title" xsi:type="string">Custom Tab</argument>
                </arguments>
            </block>
        </referenceBlock>
    </body>
</page>
  1. Теперь в приложение/код/Тест/Вкладки продуктов/просмотр/интерфейс/шаблоны/custom_tab.phtml вставьте этот код.
<?php 
$product = $block->getProduct();
?>
 <h1 style="color: #00aeed"><?php echo $product->getData('demo'); ?></h1>  
  1. Теперь откройте страницу вашего продукта.
 2
Author: Syed Muneeb Ul Hasan, 2020-06-06 13:33:46

Я следую инструкциям по созданию пользовательской вкладки. И отображается вкладка. Теперь вкладка отображается на каждой странице продукта. Даже если атрибута нет в наборе атрибутов.

"пользовательская вкладка" включена "Неприсвоенные атрибуты"для " набор атрибутов по умолчанию".

"пользовательская вкладка" находится в разделе "Присвоенные атрибуты" для набора атрибутов "att_set1".

'пользовательская вкладка' включена 'Неприсвоенные атрибуты'для 'att_set2' набор атрибутов

Все еще " пользовательская вкладка " отображается на всех страницах продукта?

Нужно ли мне что-то еще менять?

 0
Author: goodlook, 2019-03-21 14:07:12