Cómo reemplazar el atributo personalizado en el atributo de descripción en Magento 2
Cómo crear un custom attribute value
reemplazo en description attribute
.
Por ejemplo: - Mi atributo personalizado todos los valores reemplazan la pestaña de detalles del producto significa atributo de descripción.
Mi atributo personalizado es local_description
.
Aquí está mi código: -
<?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.
Respuestas
Puedes probar lo siguiente.
Crea catalog_product_view.xml
en tu módulo o tema.
Y agrega el siguiente código
<?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>
Este es solo el código de muestra, modifíquelo según sus necesidades.
Hola, sin el conocimiento suficiente, según tengo entendido, estoy publicando esto y que agregará el campo Nueva descripción de la prueba junto con su descripción, hágamelo saber si esto es lo que necesita o, de lo contrario, actualice su pregunta con más detalles.
Configuración / 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
]
);
}
}
Actualizar:-
coloque este código dentro de su dafault.xml en un módulo personalizado
para eliminar la pestaña "Más información":
<referenceBlock name="product.attributes" remove="true" />
Si desea eliminar la pestaña "Detalles":
<referenceBlock name="product.info.details" remove="true" />