1

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

所以我的问题是我可以从块中操作 phtml,也许覆盖 *Mage_Catalog_Block_Product_List* 并更改 *_BeforeToHtml* 函数中的模板,这是一个更好的方法,是否可行?

4

1 回答 1

2

首先让我先说 Magento 在这方面缺乏一点灵活性(在渲染到模板时)。如果我对您的理解正确,则您正在确定产品是否可销售:

  • 您可以添加要关注的事件catalog_product_is_salable_after。通过这种方式,您可以在系统内设置产品是否可供销售。当您更改salable Varien_Object事件中的值时,它将更改为缺货消息。也许这就是您想要的(但问题是它在if/else语句中使用 - 它可以添加到购物车中,或者缺货(参见下面的代码)。
  • 然后,您可以使用翻译文件将Out of Stock更改为您想要的字符串(一种 hack)。
  • 尝试覆盖的问题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; ?>
于 2012-11-23T14:43:59.203 回答