質問

CMSページで、いくつかの新しいブロックを定義しているという興味深い状況があります。 update_layout_xml セクション - ショートコード構文を使用して、CMSコンテンツ自体から参照する必要があります {{block ...}}

CMS Textareaからインスタンス化される新しいブロックを定義することが可能であることは知っていますが、既存のブロックを参照して、挿入する必要がある正確な位置を定義することは可能です。

使用 update_layout_xml 使用を使用することのみを許可します before= また after= - 一方、内部の要素を配置するために、より詳細な制御が必要です content それ自体をブロックします。これを介して行われる場合 phtml ファイル - それはただ使用する場合になります getChildHtml - しかし、CMSに相当するものはないようです。

私は拡張できることを知っています Mage_Widget_Model_Template_Filter 新しい関数を追加しますが、これを行うためのコア方法はすでにありますか?

役に立ちましたか?

解決

私は拡張しました Mage_Widget_Model_Template_Filter この関数を追加するとトリックを行いますが、 ネイティブ それをする方法。

public function getchildDirective($construction)
{
    $layout = Mage::app()->getLayout();
    $blockParameters = $this->_getIncludeParameters($construction[2]);

    return $layout->getBlock('root')->getChildHtml($blockParameters['id']);

}

他のヒント

アクション方法に応じて、ブロックの_constructメソッドに機能を追加できるはずです(ブロックタイプで定義されています)

ただし、アクションメソッドが単に変数を設定している場合

<action method="setCategoryId"><category_id>17</category_id></action>

次に、このようなスマイリー構文にそれらのパラマを追加できます。

{{block type="cms/block" block_id="your_block_id" category_id="17"}}

このようなものを使用して、CMSコンテンツに静的ブロックを含めることができることは知っています。

{{block type="cms/block" block_id="your_block_id"}}

この方法がカスタムブロックで機能しない理由はわかりません。少なくとも試したことはありますか?

ショートコードがモジュールから変数にある場合、それを修正しません。

例:スライダーモジュールがあり、入力したとき {{store direct_url="customer-service"}} リンク属性として、交換されません。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top