Пользовательский шаблон для статических блоков на странице CMS?
-
16-10-2019 - |
Вопрос
Я искал в Интернете и не смог найти, как это сделать.
Я хочу добавить статический блок, который я создал в администраторе ранее в 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
, так что может быть возможно сделать то, что вы пытаетесь сделать.