2012-11-23 92 views
1

我试图更改目录页面中的AddtoCart按钮的行为,并仅在特定情况下显示它。我正在做的是添加一个自定义模块进行布局更新,并用我自己的文件替换Product/List.phtml。这种方法在发布自定义模块时并不十分灵活,因为几乎所有用户都将使用不同的模板文件,他们将不得不将它与他们合并。从块Magento操纵模板

所以我的问题是我可以从块中操作phtml,也许重写* Mage_Catalog_Block_Product_List *并更改* _BeforeToHtml *函数中的模板,这是更好的方法,它可行吗?

回答

2

让我先说Magento在这个领域缺乏一点灵活性(当渲染模板时)。如果我正确理解你的话,你正在确定产品是否可以销售:

  • 你可以添加一个事件来观察catalog_product_is_salable_after。通过这种方式,您正在系统内部设置产品是否可供出售。在事件中更改salableVarien_Object的值时,它会将其更改为缺货消息。也许这就是你想要的(但问题在于它在if/else声明中使用 - 它可以添加到购物车中,也可以缺货(见下面的代码)
  • 然后,您可以使用翻译文件更改缺货到您想要的字符串(类型的黑客)
  • 尝试覆盖Mage_Catalog_Block_Product_List的问题是,直到_toHtml方法才会包含模板文件。并且在代码块的开头调用parent::_toHtml()。但是,要删除添加到购物车按钮会涉及一些非常困难的正则表达式。

这是块代码。它确实有点粘。

<?php if($_product->isSaleable()): ?> 
    <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button> 
<?php else: ?> 
    <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p> 
<?php endif; ?>