Отображать элемент html на основе набора атрибутов товара? - PullRequest
0 голосов
/ 27 мая 2020

I wi sh для отображения блока статистики c на странице продукта, если продукт принадлежит определенному набору атрибутов.

Идея состоит в том, чтобы отображать блок на страницах продукта, если страница имеет набор атрибутов «R c» иначе не показывать блок. У меня есть собственная тема, которую я создал, и у меня уже есть блок, который отображается на ВСЕХ страницах продукта. Мне нужен только блок, отображаемый на страницах товаров с набором атрибутов «R c». Мне неизвестна структура папок и / или применим ли следующий код к magento 2.3. Куда мне Скопировать файл шаблона в и из ... в основном все девять ярдов того, как реализовать настройку и код.

Код, который я нашел, выглядит следующим образом (с моими комментариями):

«Добавить этот метод в блок просмотра продукта» Из того, что я читаю, блок просмотра больше не называется catalog_product_view. xml из которых структура папок

app / design / frontend / Поставщик / тема / Magento_Catalog / layout / catalog_product_view. xml

public function checkAttributeSet($product = null, $attributeSetName = null)
{
    if(is_null($product) || is_null($attributeSetName)) 
        return false;

    $attributeSetModel = Mage::getModel("eav/entity_attribute_set");
    $attributeSetModel->load($product->getAttributeSetId());

    if($attributeSetModel->getAttributeSetName() == $attributeSetName) {
        return true;
    } else {
        return false;
    }
}

"Затем в app / design / frontend / package / theme / template / catalog / product / view.p html:" это представление / p html файл больше не используется и какова правильная структура папок.

if($this->checkAttributeSet($_product, 'Rc')):
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('Rc')->toHtml();
elseif($this->checkAttributeSet($_product, 'ORC')):
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('ORC')->toHtml();
endif; 

Я установил (по умолчанию. xml)

	
        <referenceBlock name="product.info.main">
            <block class="Magento\Catalog\Block\Product\View" name="product-rc" template="Magento_Theme::product-rc.phtml" after="product.info.price">
            </block>
        </referenceBlock> -->

product-r c .p html работает и отображается во всех продуктах.

(тестовый блок) текстовая строка находится в файле p html.

1 Ответ

0 голосов
/ 28 мая 2020

Я понял. Приведенный ниже код сработал для меня.

Добавьте код в

module-catalog / view / frontend / templates / product / view

        <?php    
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $attributeSet  = $objectManager->create('Magento\Eav\Api\AttributeSetRepositoryInterface');

        $product = $objectManager->create('Magento\Catalog\Model\Product')->load($_product->getId());        
        $attributeSetRepository   = $attributeSet->get($product->getAttributeSetId());
        $attribute_set_name       = $attributeSetRepository->getAttributeSetName();
        
        //$attribute_set_name_arr[] = $attribute_set_name; 
        //echo '<pre>'; print_r($attribute_set_name);

        if( !empty($attribute_set_name) && $attribute_set_name == 'Rc' ) {
      		// echo $this->getLayout()
    		->createBlock('Magento\Cms\Block\Block')
    		->setBlockId('rcitems')
    		->toHtml();
        }     
        ?>
 setBlockId = The Identifier of the block in admin.
 Rc = is the attribute set
 no need to add to default.xml
...