CMSページの静的ブロックのカスタムテンプレート?


8

私はウェブを検索しましたが、これを行う方法を見つけることができませんでした。

以前に管理者が作成した静的ブロックをcms-pageに追加したい。これは、次のいずれかの行を使用して機能します。

{{block type="cms/block" block_id="my_block_id"}}
{{block type="cms/block" block_id="my_block_id" template="cms/content.phtml"}}

次に、カスタムテンプレートを使用します。

{{block type="cms/block" block_id="my_block_id" template="modulename/custom-template.phtml"}}

このようにcms-pageに挿入すると、ブロックは表示されますが、「テンプレート」タグは完全に無視され、cms/content.phtml使用されます。

WHAT私が試した
私はクラスMage_Block_Cms_Blockを拡張して追加しようとしましたsetTemplate($this->getTemplate());_toHtml()-function。効果は上記と同じです- cms/content.phtml使用されます。

Mage_Core_Block_Templateクラスを拡張しようとしました。もちろん、ここでテンプレートを設定できますが、静的ブロックの取得に問題があります。block-idでブロックを取得する方法が見つかりません。

この質問が何である
/何についてではないかPHPでこれを行う方法を知っています。
XMLファイルでこれを行う方法を知っています。
この質問では、ブロックをバックエンドで管理できることが重要です。

Magento CE 1.7.0.0を実行しています。

お時間をいただきありがとうございます!

回答:


8

静的ブロックにはテンプレートがないため、静的ブロックのテンプレートを変更することはできません。メソッドを見てみましょう:Mage_Cms_Block_Block::_toHtml()。この_toHtml()メソッドは、任意のブロックオブジェクトをレンダリングするために使用され、cmsブロックの場合は、ブロックのコンテンツのみをレンダリングします。

cmsブロックのコンテンツをマークアップでラップしたい場合は、これを試すことができます:

{{block type="core/template" template="custom/block.phtml" block_id="some_block_id"}}

そして、ファイルcustom/block.phtmlでこれを行います:

<?php
$block = Mage::app()->getLayout()->createBlock('cms/block')->setBlockId($this->getBlockId()); //retrieve the cms block with the id set on this layout block
$html = $block->toHtml();//in this var you have the content of the cms block 
?>
<?php if ($html) : //this is needed to avoid additional markup if the cms block is empty?>
<div class="some-class">
    <div class="some-other-class">
        <?php echo $html;//actuall cms block?>
    </div>
</div>
<?php endif;?>

これがあなたが必要とするものであることを願っています。


1
素晴らしい解決策、このように考えたことはありません。それでも、ウィジェットを作成する方が適切ではないでしょうか?とにかく+1
Sander Mangel

ウィジェットで動作すると思いますが、これは、ウィジェットを介してレンダリングされたすべてのcmsブロックがその周りに同じマークアップを持つことを意味します。このようにして、静的ブロックごとに異なるテンプレートを使用できます。すべてを同じようにレンダリングしたい場合は、ウィジェットアプローチで十分でしょう。
マリウス

3

試しましたcms/widget_blockか?このブロックはから拡張されるMage_Core_Model_Templateため、実行しようとしていることを実行できる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.