0

現在、次のコードを使用して、Magento CMS で使用する変数タグを作成し、製品の動的データのさまざまな部分を出力しています。

<?php 

    $_product = Mage::getModel('catalog/product')->loadByAttribute('sku', $this->getData('sku'));

    $_categories = Mage::getModel('catalog/category')->loadByAtribute('id', $this->getData('id')); 

    switch($this->getData('valuetype')){       
        case "retail":
            echo number_format($_product->getPrice(), 2, '.', ',');
            break;
        default:
        case "final":
            echo number_format($_product->getFinalPrice(), 2, '.', ',');
            break;
        case "diffDollar":
            $difference = $_product->getPrice() - $_product->getFinalPrice();
            echo number_format($difference, 2, '.', ',');
            break;
        case "diffPercent":
            $difference = (1 - ($_product->getFinalPrice() / $_product->getPrice())) * 100;
            echo number_format($difference, 0, '.', ',');
            break;
        case "prodName":
            echo ($_product->getName());
            break;
        case "urlPath":
            $prodName = ($_product->getName());
            $prodName = strtolower($prodName);
            $path = explode(" ", $prodName);
            $path = implode("-", $path);
            echo $path;
            break;
        case "catName":
            $catName = ($_categories->getName());
            echo $catName;
            break;
    }
?>

CMS の内部では、次を使用して $_categories のデータを取り込みます。

{{block type="catalog/category" id="176" template="catalog/product/cmsprice.phtml" valuetype="catName"}}

$_product の場合、次を使用します。

{{block type="catalog/products" sku="1000145" template="catalog/product/cmsprice.phtml" valuetype="retail"}}

$_product の使用は完全に機能しますが、$_categories を使用してカテゴリ名を出力しようとすると、CMS のページがホームページにレンダリングされませんが、ページの残りの部分が表示され、エラーは表示されません。

これを手に入れようとしているような気がしますが、何が欠けているのかわかりません。どんな助けでも大歓迎です

4

1 に答える 1

1

最初のモデルのフェッチは少しずれているように見えます:

$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', $this->getData('sku'));

$_categories = Mage::getModel('catalog/category')->loadByAtribute('id', $this->getData('id'));

これは、製品の ID を使用してカテゴリ モデルを読み込もうとしているように見えますか? カテゴリ インスタンスをロードするには、カテゴリ ID が必要です。

また、気になるかどうかわかりませんが、複数のカテゴリーの商品にどのように対応していますか?

すべてのカテゴリ名を検索したい製品インスタンスを既に取得している場合、これは私が実行したものです。

$categories = $_product->getCategoryCollection()
                       ->addAttributeToSelect('name')
                       ->addAttributeToFilter('is_active', array('eq' => 1));
$value = array();
foreach($categories as $category) {
    $value[] = $category->getName();
}
于 2013-09-27T02:01:42.880 に答える