7

Magentoカテゴリのサムネイルを利用しようとしていますが、機能しません。私はオンラインで多くのチュートリアル(例: http: //www.douglasradburn.co.uk/getting-category-thumbnail-images-with-magento/)をフォローしましたが、それらすべてが関数について言及しています:

$_category->getThumbnail()

これはCategoryモデルにあるはずです。Magento 1.6を実行していますが、この関数がどこにも見つかりません。1.5と1.7もダウンロードして調べましたが、どこにも見つかりません。コードを実行してもエラーは発生しませんが、何も出力されません。

これが私の完全なコードです:

 <ul id="nav">
 <?php foreach ($this->getStoreCategories() as $_category): ?>
     <?php echo $_category->getThumbnail(); ?>  
     <?php echo $this->drawItem($_category) ?>
 <?php endforeach ?>
 </ul>

(サムネイルをメニュー項目として使用しようとしています)


動作しました。秘密は、次のコードを使用してFULLカテゴリデータを再クエリする必要があることです。

Mage::getModel('catalog/category')->load($_category->getId())->getThumbnail()

私はこのチュートリアルにいくらか従いました:

http://www.ho.nl/blog/using_category_images_in_your_magento_navigation/

メニューにカテゴリのサムネイルを表示するため。

ありがとうT

4

4 に答える 4

11

その価値については、ソリューションは機能しますが、非常に非効率的です。

使用:

Mage::getModel('catalog/category')->load($_category->getId())->getThumbnail()

ページの読み込み時間に、カテゴリごとに数百分の1秒、場合によっては10分の1秒が追加されます。

この理由は、モデルコレクションを取得してその中にアイテムを取得するという問題に直面し、各カテゴリの完全なデータをフェッチする新しいデータベース呼び出しを追加するためです。そもそも、カテゴリデータ全体を確実に収集する必要があります。

以前持っていたものが機能しなかった理由は、カテゴリコレクションに、選択する必要のある属性が通知されなかったためです。実際には、catalog_category_entityテーブルからフラットなデータを返すだけで、属性テーブルとは結合されていませんでした。

あなたがする必要があるのは、おそらくこれらの線に沿ったものです:

<ul id="nav">
<?php foreach ($this->getStoreCategories()->addAttributeToSelect("*") as $_category): ?>
    <?php echo $_category->getThumbnail(); ?>  
    <?php echo $this->drawItem($_category) ?>
<?php endforeach ?>
</ul>

実際、理想的には、関数をオーバーライドし->getStoreCategories()てワイルドカードフィルターを追加する必要があります。

app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.phpどのような非常にクールなコレクション関数が作成されているかを開いて学習することをお勧めします。EAVコレクションをマスターすることは、Magento開発者にとって通過儀礼のようなものです。これを行うと、止められなくなります!

お役に立てれば。

于 2012-05-21T00:29:05.250 に答える
4

app / code / local / Mage / Catalog / Model/Category.phpを変更する必要はありません

これらのコード行から簡単に実行できます...これを試してください...その動作

$child= Mage::getSingleton('catalog/layer')->getCurrentCategory()->getId();

$imageSrc = Mage::getModel('catalog/category')->load($child)->getThumbnail();

$ThumbnailUrl = Mage::getBaseUrl('media').'catalog/category/'.$imageSrc;

echo "<img src='{$ThumbnailUrl}' />";
于 2013-09-04T12:41:19.633 に答える
2

これは私のために働いた:

<img src="http://etienneaigner.com/shop/media/catalog/category/
     <?php echo Mage::getModel('catalog/category')->load($_category->getId())->getThumbnail(); ?>"

     height="338px" width="338px"
     alt="<?php echo $this->htmlEscape($_category->getName()) ?>" />
于 2012-10-17T15:15:11.217 に答える
1

ちょうどこの答えに出くわしました。ただし、以降のmagentoエディション1.7以降では、コードにオーバーヘッドを追加する必要はありません。config.xmlを使用して、Categoryコレクションに標準(およびカスタム)のeav属性を追加できます。Mage / Catalog / etc / config.xmlを確認すると、ノードの下にノードがあることがわかります。

   <category>
        <collection>
            <attributes>
                <name/>
                <url_key/>
                <is_active/>
            </attributes>
        </collection>
    </category>

したがって、独自のモジュールを作成して、eav属性をさらに追加できます。

    <category>
        <collection>
            <attributes>
                <thumbnail/>
                <image/>
            </attributes>
        </collection>
    </category>

そして、それらはあなたのカテゴリーコレクションに追加されます。

于 2014-09-08T23:49:14.227 に答える