Как заменить настраиваемый атрибут на атрибут описания в Magento 2
Как создать custom attribute value
замену в description attribute
.
Пример: - Мой настраиваемый атрибут, все значения заменяют вкладку сведений о продукте, означает атрибут описания.
Мой настраиваемый атрибут local_description
.
Вот мой код: -
<?php
$_helper = $this->helper(Magento\Catalog\Helper\Output::class);
$_product = $block->getProduct();
if (!$_product instanceof \Magento\Catalog\Model\Product) { return; } $_call = $block->getAtCall(); $_code = $block->getAtCode(); $_className = $block->getCssClass(); $_attributeLabel = $block->getAtLabel(); $_attributeType = $block->getAtType(); $_attributeAddAttribute = $block->getAddAttribute(); $renderLabel = true;
// if defined as 'none' in layout, do not render
if ($_attributeLabel == 'none') { $renderLabel = false;
}
if ($_attributeLabel && $_attributeLabel == 'default') {
$_attributeLabel = $_product->getResource()->getAttribute($_code)->getStoreLabel(); } if ($_attributeType && $_attributeType == 'text') { $_attributeValue = ($_helper->productAttribute($_product, $_product->$_call(), $_code)) ? $_product->getAttributeText($_code) : ''; } else { if($_code == 'description')
{
$_code = 'local_description'; } $_attributeValue = $_helper->productAttribute($_product, $_product->$_call(), $_code); } ?> <?php if ($_attributeValue) :?>
<div class="product attribute <?= $block->escapeHtmlAttr($_className) ?>">
<?php if ($renderLabel) :?> <strong class="type"><?= $block->escapeHtml($_attributeLabel) ?></strong> <?php endif; ?> <div class="value" <?= /* @noEscape */ $_attributeAddAttribute ?>><?= /* @noEscape */ $_attributeValue ?></div>
</div>
<?php endif; ?>
THANKS.
Ответы
Вы можете попробовать следующее.
Создайте 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.description">
<arguments>
<argument name="at_call" xsi:type="string">getLocalDescription</argument>
<argument name="at_code" xsi:type="string">local_description</argument>
</arguments>
</referenceBlock>
</body>
</page>
Это всего лишь образец кода, который можно изменить в соответствии с вашими требованиями.
Привет, не имея достаточных знаний, насколько я понимаю, я публикую это, и в котором будет добавлено поле «Новое описание теста» вместе с вашим описанием, пожалуйста, дайте мне знать, если это то, что вам нужно, или, пожалуйста, обновите свой вопрос с более подробной информацией
Настройка / InstallData.php
<?php
namespace Vendor\Module\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;
use Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface;
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->removeAttribute(\Magento\Catalog\Model\Product::ENTITY, 'test_descp');
$eavSetup->removeAttribute(\Magento\Catalog\Model\Product::ENTITY, 'test_descp'); // $statusOptions = 'Rbj\ProductAttribute\Model\Config\Source\StatusOptions';
$eavSetup->addAttribute(
\Magento\Catalog\Model\Product::ENTITY,
'test_descp',
[
'group' => 'Content',
'type' => 'text',
'backend' => '',
'frontend' => '',
'label' => 'New Test Description',
'input' => 'text',
'class' => '',
'source' => '',
'global' => ScopedAttributeInterface::SCOPE_GLOBAL,
'visible' => true,
'required' => false,
'user_defined' => false,
'default' => '',
'searchable' => false,
'filterable' => false,
'comparable' => false,
'is_used_in_grid' => true,
'visible_on_front' => false,
'used_in_product_listing' => false,
'unique' => false
]
);
}
}
Обновить:-
поместите этот код внутри себя dafault.xml в настраиваемый модуль
чтобы удалить вкладку «Дополнительная информация»:
<referenceBlock name="product.attributes" remove="true" />
Если вы хотите удалить вкладку «Подробности»:
<referenceBlock name="product.info.details" remove="true" />