質問

製品リストには、メーカーを表示します。すべてが正常に機能します。しかし、検索を行うとき、メーカーの名前を表示する代わりに、次のコードを使用してブランドを表示します。

$_product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($_product)

Magento 1.7.0.2を使用しています。

役に立ちましたか?

解決

あなたの実際の問題の診断:

  • 検索に使用される製品コレクションには、メーカー属性が含まれていること、またはメーカー属性がバックエンドに設定されてフロントエンドに表示されることを確認してください(以下のスクリーンショットを参照)。
  • であることを確認してください manufacturer attrはのために設定されています 適切なストアビュー!カタログ製品の編集ビューの管理では、ストアビューの値に対してドロップダウンが設定されていることを確認してください。 ストア/ウェブサイト/デフォルトビューではありません.
  • あなたが再セックスされていることを確認してください。 CEにいる場合は、インデクサーを手動で実行します。 EE上で、インデックスがCronまたは経由から更新されていることを確認してください $ php shell/indexer.php reindexall.
  • すべてのキャッシュをクリアします。フラッシュキャッシュストレージ。 rm -rf var/cache そして、すべての破壊的なもの。 aの存在を確認します /tmp/magento フォルダ。
  • フラットカタログと再インデックスを無効/有効にします。

フロントエンド/製品ページ/コレクションの可視性の属性を有効にする:

enter image description here

なぜこれが起こるのか:

だから、 正当な理由 利用可能なデータがないときにMagentoが「いいえ」を返す理由。メソッド getFrontend のサブクラスであるオブジェクトを返します Mage_Eav_Model_Entity_Attribute_Frontend_Abstract.

メソッドで getValue, 、利用可能 /セットのオプションがない場合、デフォルトはブール値を出力します。したがって、「いいえ」の値 - これはフロントエンドブールと同等です false:

public function getValue(Varien_Object $object)
{
    $value = $object->getData($this->getAttribute()->getAttributeCode());
    if (in_array($this->getConfigField('input'), array('select','boolean'))) {
        $valueOption = $this->getOption($value);
        if (!$valueOption) {
            $opt     = Mage::getModel('eav/entity_attribute_source_boolean');
//....

上記のトラブルシューティングポイントが完了したら - まだ「いいえ」を受け取っていて、適切な応答(たとえば、製品に設定されているメーカーがいないため、意図的に)である場合は、エコー前に出力を条件付きでテストすることができます。

$value = $_product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($_product);
echo $value=="No" ? "" : $value;
ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top