質問

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

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ページに入れたとき、ブロックが表示されますが、「テンプレート」タグは完全に無視されます - cms/content.phtml 使用されている。

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

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

この質問は何についてではありませんか /そうではありません
私はこれをPHPで行う方法を知っています。
XML-Filesでこれを行う方法を知っています。
この質問には、ブロックをバックエンドで管理できることが重要です。

Magento CE 1.7.0.0を実行します。

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

役に立ちましたか?

解決

静的ブロックにはテンプレートがないため、静的ブロックのテンプレートを変更することはできません。方法を見てください: 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;?>

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

他のヒント

一緒に試しましたか cms/widget_block?このブロックはから伸びています Mage_Core_Model_Template, 、したがって、あなたがやろうとしていることをすることが可能かもしれません。

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