1

ライムや文字/数字などのランダムデータを表示するカスタムブロックを作成できました

ただし、これは Magento でブロックを作成する手順を理解するためのテストでした。

次に、そのブロックから切り替えようとし、別のブロックを作成しました。ここでは、関連製品を動的にすることが目的であるため、拡張する代わりMage_Core_Block_Templateに使用するように変更し、この新しいブロックを指定しました。Enterprise_TargetRule_Block_Catalog_Product_List_Relatedcache.xml

これがいつ呼び出されるかを知るために、関連リストブロッククラスに配置しMage::logました。一度呼び出されてからキャッシュされることがわかります。

私の人生では、それを機能させることはできません。これは私のコードです。アドバイスしてください。

注: 書き換えには別の目的があり、実際に私のログ コード行はメソッドの下のこの部分に設定されています。public function getProductIds($object)

Lg/Hole/etc/config.xml

<config>
    <modules>
        <Lg_Hole>
            <version>0.0.1</version>
        </Lg_Hole>
    </modules>

    <global>
        <blocks>
            <lg_hole>
                <class>Lg_Hole_Block</class>
            </lg_hole>
        </blocks>
        <models>
            <lg_hole>
                <class>Lg_Hole_Model</class>
            </lg_hole>
            <enterprise_targetrule_resource>
                <rewrite>
                    <index>Lg_Hole_Model_Mymodel</index>
                </rewrite>
            </enterprise_targetrule_resource>
        </models>
    </global>
</config>

Lg/Hole/etc/cache.xml

<config>
    <placeholders>
        <lg_hole>
            <block>lg_hole/related</block>
            <name>hole_view_example</name>
            <placeholder>CACHE_TEST</placeholder>
            <container>Lg_Hole_Model_Cachetest</container>
            <cache_lifetime>86400</cache_lifetime>
        </lg_hole>
    </placeholders>
</config>

Lg/Hole/Model/Cachetest.php

class Lg_Hole_Model_Cachetest extends
Enterprise_PageCache_Model_Container_Abstract {
protected function _getCacheId()
{
    return 'HOMEPAGE_PRODUCTS' . md5($this->_placeholder->getAttribute('cache_id'));
}
protected function _renderBlock()
{
    $blockClass = $this->_placeholder->getAttribute('block');
    $template = $this->_placeholder->getAttribute('template');

    $block = new $blockClass;
    $block->setTemplate($template);
    return $block->toHtml();
}

protected function _saveCache($data, $id, $tags = array(), $lifetime = null) { 
   return false; 
}

public function applyWithoutApp(&$content)
{
    return false;
}
}

Lg/Hole/Block/Related.php

class Lg_Hole_Block_Related extends Enterprise_TargetRule_Block_Catalog_Product_List_Related
{

}
4

1 に答える 1

0

から拡張する必要はありますEnterprise_TargetRule_Block_Catalog_Product_List_Relatedか?

はいの場合: このブロックには独自のロジックが含まれていることを理解していますか? @see Enterprise_TargetRule_Block_Catalog_Product_List_Abstract::getProduct()レジストリ (製品ページなど) に読み込まれた製品があり、この製品に製品リンク (タイプ関連) が必要です。

完全にスタンドアロンの製品リストを作成する場合: 製品リストMage_Catalog_BLock_Product_Listの最も生のブロックであるため (特定のロジックは追加されていない)、単純なクラスで十分です。

またはより良い..ユーザーウィジェット

于 2012-10-22T07:19:09.007 に答える