Как использовать шорткод на phtml-странице Magento

У меня есть короткий код

{{block type="ibtheme/product_list_featured" category_id="51" random_products="" template="catalog/product/list/featured.phtml"}}

который отлично работает в редакторе из бэкэнда. Как можно вызвать один и тот же короткий код со страницы PHTML?

Когда я помещаю тот же код, он печатает простой текст.


person Leo T Abraham    schedule 20.03.2014    source источник


Ответы (4)


phtml - это php-код, а не cms html, пропущенный через фильтр, чтобы улавливать короткие коды (макросы) и расширять их.

Содержимое между «{{» и «}}» должно интерпретироваться механизмом шаблонов и допустимо только внутри электронных писем, страниц/блоков CMS и редакторов wysiwyg в бэкэнде.

Вы помещаете их эквивалент в макет и вызываете их, как показано ниже ->

Блок Magento Shortcode CMS не работает на страницах продуктов

person Fiasco Labs    schedule 20.03.2014

В Magento CMS или в статическом блоке, если вы хотите добавить PHP-код, вы можете просто вызвать любой пользовательский файл .phtml, используя следующий код. Например, здесь я включаю my_custom.phtml.

{{block type="core/template" name="myCustom" template="cms/my_custom.phtml"}}

Это эквивалентно следующему тегу макета:

<block type="core/template" name="myCustom" template="cms/my_custom.phtml">

Надеюсь, что вы найдете ее полезной.

person Vishwas Bhatnagar    schedule 20.03.2014
comment
Это не работает для меня. Короткий код, который я упомянул выше, состоит из большего количества атрибутов. - person Leo T Abraham; 20.03.2014

Приведенные выше ответы неверны, если я читаю, что вы хотели бы использовать короткие коды на страницах phtml. Я часто использую их, так как у нас огромное количество контента, и разбить его на блоки phtml — это самый простой способ сохранить наш контент свежим.

Во всяком случае, вот правильный способ использования блоков вызовов в phtml:

     <?php echo $this->getLayout()->createBlock('core/template')->setTemplate('cms/my_custom.phtml')->toHtml(); ?>

Например, использовать блок в исходном ответе будет

    <?php echo $this->getLayout()->createBlock('ibtheme/product_list_featured')->setTemplate('catalog/product/list/featured.phtml')->toHtml(); ?>
person N2BH    schedule 05.06.2014

Я думаю, это то, что вы на самом деле ищете. Код находится в модуле CMS в коде Magento.

<?php
// Load the cms helper
$helper = Mage::helper('cms');
// get the cms static block processor
$processor = $helper->getBlockTemplateProcessor();

// run the content with the shortcode through the filter
// in this case $item->getAnswer() contains a shortcode
$html = $processor->filter($item->getAnswer());

// print it to the page
echo $html;
?>

Помните, что все возможно, просто копайте глубже. Если вы сомневаетесь, скопируйте основной код Magento.

person John Tilley    schedule 18.01.2017