Comment remplacer l'attribut personnalisé dans l'attribut de description dans Magento 2

Aug 18 2020

Comment créer custom attribute value remplacer dans description attribute .

Ex: - Mon attribut personnalisé toutes les valeurs remplacent l'onglet des détails du produit signifie l'attribut de description.

Mon attribut personnalisé est local_description.

Voici mon code: -

<?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.

Réponses

1 AnshuMishra Aug 18 2020 at 06:23

Vous pouvez essayer ce qui suit.

Créez catalog_product_view.xmldans votre module ou thème.

Et ajoutez le code suivant

<?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>

Ceci est juste l'exemple de code, modifiez selon vos besoins.

2 Pramod Aug 18 2020 at 05:29

Salut, sans suffisamment de connaissances, selon ce que je comprends, je poste ceci et qui ajoutera un nouveau champ de description de test avec votre description s'il vous plaît laissez-moi savoir si c'est ce dont vous avez besoin ou s'il vous plaît mettre à jour votre question avec plus de détails

Setup / 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
            ]
        );

        
    }
} 

Mettre à jour:-

placez ce code à l'intérieur de votre dafault.xml dans un module personnalisé

pour supprimer l'onglet "Plus d'informations":

<referenceBlock name="product.attributes" remove="true" />

Si vous souhaitez supprimer l'onglet "Détails":

<referenceBlock name="product.info.details" remove="true" />