6

magento1.7.0.2で新しく作成された属性の既存の値をすべて一覧表示しようとしています。(クリック可能なリンクを作成して、クリックすると特定の属性値を持つすべてのアイテムが一覧表示されるようにしますが、現時点では優先順位ではありません)

属性コードは「アーティスト」です

これまでのところ、次のコードを使用して、app / code / core / Mage / Catalog /Block/にArtist.phpファイルを作成しました。

public function getAllArtists()
{
$product = Mage::getModel('catalog/product');
$attributes = Mage::getResourceModel('eav/entity_attribute_collection')
    ->setEntityTypeFilter($product->getResource()->getTypeId())
    ->addFieldToFilter('attribute_code', 'artist');
$attribute = $attributes->getFirstItem()->setEntity($product->getResource());
$artists = $attribute->getSource()->getAllOptions(false);
  return $artists;  
}

/ app / design / frontend / default / template-name / template / catalog / productにあるファイルartist.phtmlには、次のコードが含まれています。

 <ul id="artist_list">
  <?php foreach ($this->getAllArtists() as $artist): ?> 
  <li><a href="<?php Mage::getURL() ?>catalogsearch/advanced/result/?&artist;[]=<?php echo $artist['value'] ?>&search;="><?php echo $artist['label'] ?></a></li>
  <?php endforeach; ?>
 </ul>

次に、静的ブロックを呼び出します。

{{block type="core/template" template="catalog/product/artist.phtml"}}

しかし、何も表示されません...

私はこのスレッドのコードを使用しました:http://www.magentocommerce.com/boards/viewthread/19982/P0/

属性は「フロントエンドの製品ビューページに表示」に設定されており、.. / template / product/view.phtmlの各アイテムの属性値を次のように呼び出します。

<?php echo $_product->getData('artist') ?> 

値が正しく表示されます。

何か案は?

4

2 に答える 2

23
    $name='whatever_your_attribute_name';
    $attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')->setCodeFilter($name)->getFirstItem();
    $attributeId = $attributeInfo->getAttributeId();
    $attribute = Mage::getModel('catalog/resource_eav_attribute')->load($attributeId);
    $attributeOptions = $attribute ->getSource()->getAllOptions(false); 
    print_r($attributeOptions);

参照: Magento - すべての属性値を取得する

于 2013-10-24T11:37:21.630 に答える
1

それはただになるでしょう

$attribute = Mage::getModel('eav/config')->getAttribute(4,'artist');
if($attribute->usesSource()) {
    $options = $attribute->getSource()->getAllOptions(false);
    foreach($options as $key=>$value) {
        if(count($value)==2) {
            $artists[] = $value['label'];
        }
    }
}
于 2013-03-19T20:25:30.450 に答える