我管理创建一个自定义块,显示随机数据,如霜和字母/数字
然而,这是了解在Magento中创建块的过程的测试。
然后我尝试从该块切换,创建了另一个块,而不是从Mage_Core_Block_Template
扩展到我改为使用Enterprise_TargetRule_Block_Catalog_Product_List_Related
,因为我的目标是让相关产品变得动态,我指出了{ {1}}到这个新区块。
我在相关列表块类中放置了cache.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
答案 0 :(得分:0)
您是否需要延长Enterprise_TargetRule_Block_Catalog_Product_List_Related
?
如果是:你明白这个块包含自己的逻辑吗?您必须在注册表中加载产品(@see Enterprise_TargetRule_Block_Catalog_Product_List_Abstract::getProduct()
,就像在产品页面上一样),并在此产品上提供产品链接(类型相关)。
如果你想创建一个完全独立的产品列表:像Mage_Catalog_BLock_Product_List
这样的简单类就足够了,因为它是产品列表中最新的块(没有添加特定的逻辑)
或更好..用户小部件