Модуль Magento - переопределение контроллера, добавление шаблонов

В настоящее время я работаю над расширением Magento, и я переопределил основной контроллер, который отлично работает.

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

Поэтому я углубился в суть модуля Заказчика и контроллеров. Я видел там, что такие методы, как indexAction(), реализуют макет следующим образом:

<?php
public function indexAction()
{
  $this->loadLayout();
  $this->_initLayoutMessages('customer/session');
  $this->_initLayoutMessages('catalog/session');

  $this->getLayout()->getBlock('content')->append(
      $this->getLayout()->createBlock('customer/account_dashboard')
  );
  $this->getLayout()->getBlock('head')->setTitle($this->__('My Account'));
  $this->renderLayout();
}

Я перенес это в свое действие, и теперь макет отображается правильно. Теперь вопрос:

Независимо от того, что я ввожу в вызов ->createBlock('...'), ничего не отображается в области содержимого.

Как указать местоположение моего собственного блока, который будет отображаться как содержимое страницы, при этом украшая его макетом?

Я пробовал возиться с XML-файлами в /design/frontend/base/default/layout/myaddon.xml, но не смог заставить его работать.


person phidah    schedule 05.03.2010    source источник


Ответы (1)


Охватить всю систему компоновки Magento в одном посте StackOverflow — это немного, но вы сможете добиться того, чего хотите, с помощью следующего.

    $block = $this->getLayout()->createBlock('Mage_Core_Block_Text');
    $block->setText('<h1>This is a Test</h1>');
    $this->getLayout()->getBlock('content')->append($block);

Исходя из вышеизложенного, вы сможете построить то, что вам нужно. Идея заключается в том, что вы создаете свои собственные блоки, а затем добавляете их к существующим блокам в макете. В идеале вы создаете свои собственные классы блоков для создания экземпляров (а не Mage_Core_Block_Text) и используете их внутренний механизм шаблонов для загрузки файлов phtml (отделяя генерацию HTML от генерации кода).

Если вы заинтересованы в изучении внутренностей того, как работает система макетов, вы можете сделать намного хуже, чем начать со статьи < /a> Я писал по теме.

person Alan Storm    schedule 08.03.2010