У меня есть установка Magento, которая интегрирована с внешним веб-сайтом, и я хочу, чтобы блок корзины Magento отображался в заголовке этого внешнего сайта.
Я достиг этого с помощью следующего кода:
<?php
require_once(dirname(__FILE__).'/store/app/Mage.php');
$app = Mage::app();
$session = Mage::getSingleton('core/session', array('name'=>'frontend'));
$block = $app
->getLayout()
->getBlockSingleton('checkout/cart_sidebar')
->setTemplate('checkout/cart/sidebar.phtml');
echo $block->toHtml();
Но я хочу (и считаю, что это возможно) более приятный подход.
Мне не нравится тот факт, что я должен указать шаблон вручную с помощью setTemplate()
, который включает расположение шаблонов жесткого кодирования и повторение того, что он определил где-то еще (в XML файлах макета дизайна). Я попытался загрузить блок через $app->getLayout()->getBlock($name)
без результатов (были $name
представляет имя ссылки блока, как определено в XML файлах макета).
Итак, вопрос:
Есть ли способ сделать блок за пределами magento (со следующими реквизитами)?
- Я хочу, чтобы базовый макет xml и макет дизайна дизайна обновлений изменений дизайна загружался автоматически, поэтому мне не нужно вручную указывать путь шаблона и тип блока (снова).
- Я хочу загрузить блок по его имени ссылки, поэтому я могу использовать свойства, применяемые к нему в XML файлах макета.
Цель этого вопроса - обернуть его в функцию и сделать каждый блок за пределами Magento таким же образом, как и на шаблонах Magento. Например:
<div id="sidebar-cart-container">
<?php echo $this->renderMagentoBlock('cart-block-reference-id'); ?>
</div>
Спасибо заранее.