0

我创建了一个自定义模块来在 magento2 的产品页面上显示自定义产品选项卡。这些选项卡由 magento2 后端中设置的属性管理。我希望在产品页面上显示 4 个选项卡,但存在一个问题,即 magento2 在前端或后端时仅显示产品页面上的第一个属性选项卡。我要他们所有。我已经为 XML 路由创建了参考块。这是catalog_product_view.xml文件 (\Product\Tabs\view\frontend\layout) 代码

<?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="new.tab" template="Product_Tabs::new_tab.phtml" group="detailed_info">
               <arguments>
                   <argument translate="true" name="title" xsi:type="string">Benefits</argument>
               </arguments>
           </block>
           <block class="Magento\Catalog\Block\Product\View" name="new1.tab" template="Product_Tabs::new_tab.phtml" group="detailed_info">
               <arguments>
                   <argument translate="true" name="title" xsi:type="string">How To Use</argument>
               </arguments>
           </block>
           <block class="Magento\Catalog\Block\Product\View" name="new2.tab" template="Product_Tabs::new_tab.phtml" group="detailed_info">
               <arguments>
                   <argument translate="true" name="title" xsi:type="string">How To Close</argument>
               </arguments>
           </block>
           <block class="Magento\Catalog\Block\Product\View" name="new3.tab" template="Product_Tabs::new_tab.phtml" group="detailed_info" after="news.tab">
               <arguments>
                   <argument translate="true" name="title" xsi:type="string">Options</argument>
               </arguments>
           </block>
       </referenceBlock>
   </body>
</page>

模板 (\Product\Tabs\view\frontend\templates) 中的这个new_tab.phtml文件,我在其中调用了属性代码,请参见此处的代码

<?php

/** @var \Magento\Catalog\Block\Product\View $block */

$product = $block->getProduct();

?>

<div class="value"><?php echo $product->getData('benefits'); ?></div>
<div class="value"><?php echo $product->getData('how_to_use'); ?></div>
<div class="value"><?php echo $product->getData('how_to_close'); ?></div>
<div class="value"><?php echo $product->getData('options'); ?></div>

这是数据库文件InstallData.php的安装数据

<?php

/* app/code/Product/Tabs/Setup/InstallData.php */

 

namespace Product\Tabs\Setup;

 

use Magento\Eav\Setup\EavSetup;

use Magento\Eav\Setup\EavSetupFactory;

use Magento\Framework\Setup\InstallDataInterface;

use Magento\Framework\Setup\ModuleContextInterface;

use Magento\Framework\Setup\ModuleDataSetupInterface;

 

/**

* @codeCoverageIgnore

*/

class InstallData implements InstallDataInterface

{

   /**

    * EAV setup factory

    *

    * @var EavSetupFactory

    */

   private $eavSetupFactory;

 

   /**

    * Init

    *

    * @param EavSetupFactory $eavSetupFactory

    */

   public function __construct(EavSetupFactory $eavSetupFactory)

   {

       $this->eavSetupFactory = $eavSetupFactory;

   }

 

   /**

    * {@inheritdoc}

    * @SuppressWarnings(PHPMD.ExcessiveMethodLength)

    */

   public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)

   {

       /** @var EavSetup $eavSetup */

       $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);

 

       /**

        * Add attributes to the eav/attribute

        */

 

       $eavSetup->addAttribute(

           \Magento\Catalog\Model\Product::ENTITY,

           'how_to_use',

           [

               'group' => 'Product Details',

               'type' => 'text',

               'input' => 'textarea',

               'backend' => '',

               'frontend' => '',

               'label' => 'How To Use',

               'class' => '',

               'source' => '',

               'global' =>  \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,

               'visible' => true,

               'required' => false,

               'user_defined' => false,

               'default' => 0,

               'searchable' => false,

               'filterable' => false,

               'comparable' => false,

               'visible_on_front' => false,

               'used_in_product_listing' => true,

               'unique' => false,

               'apply_to' => ''

           ]

       );

   }

}

一切正常,但问题是后端和前端只显示一个选项卡。请就如何在两端获取所有这 4 个选项卡并在产品页面上正常工作提出解决方案。

提前致谢。

4

0 回答 0