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を希望する文字列に変更できます (一種のハック)。
  • オーバーライドしようとする際の問題は、メソッド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 に答える