2012-11-23 59 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; ?>