3

商品が特定の属性セットに属している場合、商品ページに静的ブロックを表示したい

たとえば、私がファッション店で「フットウェア」の属性セットを持っている場合、属性セットが「フットウェア」に一致する場合にのみ、静的ブロックを製品ページに表示したい

属性セットの ID を出力するコードを少し見つけましたが、それを else if ステートメントに変換したいと考えています。

<?php

$entityTypeId = Mage::getModel('eav/entity')
                ->setType('catalog_product')
                ->getTypeId();
$attributeSetName   = 'Footwear';
$attributeSetId     = Mage::getModel('eav/entity_attribute_set')
                    ->getCollection()
                    ->setEntityTypeFilter($entityTypeId)
                    ->addFieldToFilter('attribute_set_name', $attributeSetName)
                    ->getFirstItem()
                    ->getAttributeSetId();
echo $attributeSetId;

?>

誰にもアイデアはありますか?

G

4

2 に答える 2

2

このメソッドをに追加しますProduct View Block

(もちろんコアファイルapp/code/core/Mage/Catalog/Block/Product/View.phpではありません):

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

if($this->checkAttributeSet($_product, 'Monitors')):
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('monitor')->toHtml();
elseif($this->checkAttributeSet($_product, 'Footwear')):
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('footwear')->toHtml();
endif; 
于 2013-02-27T10:39:16.653 に答える
1

スタックオーバーフローのポイントに関する有用な情報を削除する管理者向け >>>> この投稿に更新された資料を返信するのは 3 回目です。

これは、このタスクを完了する更新された magento 2.3 の方法です。

コードを追加

モジュールカタログ/ビュー/フロントエンド/テンプレート/製品/ビュー

        <?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
于 2020-05-28T11:03:31.287 に答える