Ненавязчиво добавить блок в корзину
Для модуля, над которым я работаю, я хочу добавить блок на экране корзины покупок, хочу сделать это ненавязчиво, и я бы хотел разместить его под содержимым корзины и перед остальными блоками (купон, оценка доставки, итоги, ...).
Мне удалось сделать ненавязчивую часть: наблюдатель слушает controller_action_layout_load_before
и если FullNameAction checkout_cart_index
он добавляет дескриптор моего файла обновления макета XML:
Наблюдатель:
public function showUpperGifts($observer)
{
$fullNameAction = $observer->getEvent()->getAction()->getFullActionName();
if ($this->_isEnabled &&
($fullNameAction == 'checkout_cart_index')) {
$layoutUpdate = $observer->getEvent()->getLayout()->getUpdate()
->addHandle('my_special_handle');
}
}
и файл макета:
<my_special_handle>
<reference name="content">
<block type="module/block" name="module_block" template="module/block.phtml"/>
</reference>
</my_special_handle>
При этом отображается содержимое моего phtml-файла, но я не могу разместить его там, где хочу.
Моей первой попыткой было использовать before="name.of.block"
атрибут, но это не работает. Если я использую before="whatever"
это идет прежде всего внутри checkout.cart
блок, и если я использую after="whatever"
это идет после всего. Короче говоря, это не берет содержание before
или же after
во внимание.
Глядя на файлы макетов XML основных модулей Magento, я понял, что эти аргументы в пользу before
а также after
появляется только тогда, когда блоки, которые они размещают после или до, находятся внутри правого / левого столбцов. Так что я думаю, что это что-то особенное для этих столбцов.
Итак, мой вопрос, могу ли я указать местоположение моего блока внутри контента? И да как?
Другим решением было бы загрузить блок асинхронно, так как я мог бы затем добавить к div по своему выбору результат вызова AJAX, но я бы предпочел сделать это "обычным" способом, если смогу.
Спасибо за прочтение:)