Template khusus untuk blok statis di halaman CMS?

8

Saya mencari di web dan tidak dapat menemukan cara melakukan ini.

Saya ingin menambahkan blok statis yang telah saya buat di admin sebelum ke halaman cms. Ini berfungsi menggunakan salah satu dari baris ini:

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

Sekarang saya ingin menggunakan templat khusus, yaitu:

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

Ketika saya memasukkannya ke halaman cms seperti ini, blok ditampilkan, tetapi tag "template" benar-benar diabaikan - cms/content.phtmldigunakan.

APA YANG SAYA MENCOBA
Saya mencoba untuk memperluas kelas Mage_Block_Cms_Block dan menambahkan setTemplate($this->getTemplate());ke _toHtml()-fungsi. Efeknya sama seperti di atas - cms/content.phtmldigunakan.

Saya mencoba memperluas kelas Mage_Core_Block_Template; tentu saja saya dapat mengatur templat di sini, tetapi saya memiliki masalah dalam mendapatkan blok statis. Saya tidak dapat menemukan cara mendapatkan blok dengan blok-id.

APA PERTANYAAN INI TENTANG / TIDAK TENTANG
Saya tahu bagaimana melakukan ini dengan PHP.
Saya tahu bagaimana melakukan ini dengan file XML.
Sangat penting untuk pertanyaan ini bahwa blok dapat dikelola di backend.

Saya menjalankan Magento CE 1.7.0.0.

Terima kasih atas waktu Anda!

simonthesorcerer
sumber

Jawaban:

8

Anda tidak dapat mengubah template untuk blok statis karena blok statis tidak memiliki template. Lihatlah metode: Mage_Cms_Block_Block::_toHtml(). The _toHtml()metode yang digunakan untuk membuat setiap blok objek, dan dalam kasus cms blok hanya membuat konten blok.

Jika Anda ingin membungkus konten blok cms apa pun di beberapa markup Anda dapat mencoba ini:

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

Dan dalam file custom/block.phtmllakukan ini:

<?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;?>

Saya harap ini yang Anda butuhkan.

Marius
sumber
1
Solusi yang bagus, tidak pernah terpikir seperti ini. Namun, bukankah membuat widget lebih tepat? Pokoknya +1
Sander Mangel
Saya kira itu bisa bekerja dengan widget, tetapi ini berarti bahwa semua blok cms yang diberikan melalui widget akan memiliki markup yang sama di sekitarnya. Dengan cara ini Anda dapat memiliki templat yang berbeda untuk blok statis yang berbeda. Jika Anda ingin semua yang diberikan sama, saya kira pendekatan widget harus cukup.
Marius
3

Sudahkah Anda mencobanya cms/widget_block? Blok ini memanjang dari Mage_Core_Model_Template, jadi itu mungkin untuk melakukan apa yang Anda coba lakukan.

fmrng
sumber