我创建了一个自定义模块来在 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 个选项卡并在产品页面上正常工作提出解决方案。
提前致谢。