web-dev-qa-db-ja.com

Magento-> getSku()またはgetData( ’sku’)が空の文字列を返す

Magento 1.3.2を使用していますが、奇妙な問題があります。

_list.phtml_にいるときに、getSku()またはgetData('sku')を使用してSKUをフェッチしようとすると、空の文字列が取得されます。 getName()は機能します。しかし、他のページからそれを行うと、うまく機能します。

私はそれを_var_dump_- edしましたが、SKUは表示されません。

何が原因ですか?

16
Himberjack

もう1つのオプションは、既存の製品のIDを使用して、list.phtmlに製品オブジェクトを再ロードすることです。コードは次のようなものを読み取ります。

$sku = Mage::getModel('catalog/product')->load($_product->getId())->getSku();

$ _productは既にコレクションで取得しているものであり、getSkuでは大文字と小文字が区別されることに注意してください(すべてのMagento属性のゲッター/セッターと同様)。

@Prattskiのソリューションは、オブジェクトのロード/操作をいじりたくないので望ましいですが、コレクションが少しめちゃくちゃになっているように聞こえます。 SKUは、ベースに存在するコアフィールドの1つですcatalog_product_entityテーブルなので、読み込まれないのは珍しいことです。

25
Jonathan Day

誰もあなたにまだ最も簡単で適切な答えを与えていないことに驚いています。

管理者に移動しますカタログ>>属性>>属性の管理。次に'sku'属性を編集します。 "Used in Product Listing"'No'から'Yes'に変更します。その後、->getSku()を使用してlist.phtmlの製品オブジェクトからアクセスできます。

47
Prattski

おそらく、コレクションが取得されるときに、skuが属性のリストに追加されません。ファイル/template/catalog/product/list.phtmlについて話していると思います。その場合、対応するコードファイル(/app/code/core/Mage/Catalog/Block/Product/List.php)を拡張する必要があります。

私はあなたの最善の策はgetLoadedProductCollection()メソッドをオーバーロードすることだと思います:

public function getLoadedProductCollection()
    {
        return $this->_getProductCollection()->addAttributeToSelect('sku');
    }

これは機能しない可能性があります。テストできませんでした。私のストアでは、skuと他のすべての属性にlist.phtmlテンプレートファイルでアクセスできます。

4
silvo

これを試して:

<?php 
    $current_product = Mage::registry('current_product');
    if($current_product) {
        $sku = $current_product->getSku();
        // output sku
        echo $sku;
    }
?>
0
user7752775