Пользовательский шаблон для статических блоков на странице CMS?

magento.stackexchange https://magento.stackexchange.com/questions/2841

Вопрос

Я искал в Интернете и не смог найти, как это сделать.

Я хочу добавить статический блок, который я создал в администраторе ранее в 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, как это, блок показан, но «шаблон»-TAG полностью игнорируется- cms/content.phtml используется.

Что я попробовал
Я попытался расширить класс mage_block_cms_block и добавить setTemplate($this->getTemplate()); к _toHtml()-Функция. Эффект такой же, как и выше - cms/content.phtml используется.

Я попытался расширить класс mage_core_block_template; Конечно, я могу установить шаблон здесь, но у меня есть проблемы с получением статического блока. Я не могу найти, как получить блок от Block-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