こんにちは、しばらくの間、magento テーマに取り組んでいます (...そして、システムに対する私の理解はゆっくりですが着実に成長しています)。すぐにいくつかのカスタム モジュールの作業を開始する必要があるため、この小さなプロジェクトから始めて、自分の方向性を把握します。
テンプレートファイルにコピーして貼り付けていた特定のタスクを管理するためのコードを少し見つけました。
<?php
$ids = $_product->getCategoryIds();
$cat = Mage::getModel('catalog/category')->load($ids[0]);
$isFF = false;
foreach ($ids as $key=>$val) {
$cat = Mage::getModel('catalog/category')->load($val);
$name = $cat->getName();
if ( $name === 'Fast Fulfillment' ) {
$isFF = true;
}
}
if ($isFF) { echo '<span class="ff-logo"></span>'; }
?>
とてもシンプルです。製品が特定のカテゴリに含まれているかどうかを確認し、含まれている場合は要素を作成しているだけです。(これを行うには約5つの確実な方法があることを知っています...これは私が行った方法です)。
製品ブロックが表示されるたびにこれをテストする必要があり、これまでこのコードを複製して機能させてきました。それは機能しますが、裏返しです(ビューレイヤーにロジックを入れるべきではありません)。
では、機能を共有するための簡単なモジュールを作成しましょう。
ローカル/WACI/製品フラグ/etc/config.xml
<config>
<modules>
<WACI_ProductFlag>
<version>0.1.0</version>
</WACI_ProductFlag>
</modules>
<global>
<blocks>
<WACI_ProductFlag>
<class>WACI_ProductFlag_Block_View</class>
</WACI_ProductFlag>
</blocks>
</global>
</config>
etc/modules/WACI_All.xml
<config>
<modules>
<WACI_CustomPageLayouts>
<codePool>local</codePool>
<active>true</active>
</WACI_CustomPageLayouts>
</modules>
<modules>
<WACI_ProductFlag>
<codePool>local</codePool>
<active>true</active>
</WACI_ProductFlag>
</modules>
</config>
Block
さて、クラスについては... aまたは aHelper
が適切かどうかはよくわかりません。私は行ったがBlock
、- idk... 私はおそらく間違っている (このようなもののチュートリアルは大きく異なります)。
ローカル/WACI/製品フラグ/ブロック/View.php
<?php
/**
* WACI
*
* @codepool Local
* @category View
* @package WACI
* @module ProductFlag
*/
class WACI_ProductFlag_Block_View extends Mage_Core_Block_Template
{
private $_focus;
private $_isFF = false;
public function getIsFF( $product ){
$this->_focus = "FF";
$isFF = false;
$ids = $product->getCategoryIds();
$cat = Mage::getModel('catalog/category')->load($ids[0]);
foreach ($ids as $key=>$val) {
$cat = Mage::getModel('catalog/category')->load($val);
$name = $cat->getName();
if ( $name === 'Fast Fulfillment' ) {
$isFF = true;
}
}
}
protected function _toHtml(){
$html = parent::_toHtml();
if ($this->_focus === "FF") {
if ($this->_isFF){
$html .= '<span class="ff-logo"></span>';
}
}
return $html;
}
}
?>
うまくいけば、特定の製品の入力に基づいて文字列を出力したいだけであることは明らかです。_toHtml()
文字列を配信するために をオーバーライドする必要がありますか? また。おそらくそうではありません...
私のlocal.xmlでは、ブロックを参照しています:
<catalog_product_view>
<reference name="content">
<reference name="product.info">
<block type="WACI/ProductFlag" name="product.flag" as="productFlag" output="toHtml" />...
...これがこのクラスをインスタンス化するかどうかはわかりませんか? 私はそうは思わない。とにかく、パラメーターを使用してメソッドを呼び出す必要があるため 、 product/view/media.phtmlでそれに対処する方法がよくわかりません。
文字列を出力しているだけなので、テンプレート ファイルは必要ないと思いますが、テンプレートが関連付けられていないブロック モジュールを見たことはないと思います。たぶん、ヘルパークラスが適切ですか?
いずれにせよ、それはうまくいきません。
メディア クラスにメソッドがないという致命的なエラーが発生getIsFF()
する (当然のことですが) か、何も表示されません。私の設定ファイルは正しいですが、それだけだと思います。
ジェブス。私はすべて振り返っています。
メイジのスキルを持つ誰かがこの単純な問題を明確にし、私を正しい方向に向けることができますか?
乾杯!