Ненавязчиво добавить блок в корзину - PullRequest
2 голосов
/ 11 мая 2011

Для модуля, над которым я работаю, я хочу добавить блок на экране корзины покупок, хочу сделать это ненавязчиво, и я бы хотел разместить его под содержимым корзины и перед другими блоками (купон, оценка доставки, итоги, ...).

Мне удалось сделать ненавязчивую часть: наблюдатель слушает 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, но я бы предпочел сделать это «обычным» способом, если смогу.

Спасибо за чтение:)

...