2012-06-21 3 views
1

Я хочу, чтобы создать блок и добавить этот блок в шаблон с помощьюЧто должно быть обязательно для createBlock

$this->_addContent($this->getLayout()->createBlock("device/device")) 

Прямо сейчас, она ничего не отображается.

Какие пункты следует отметить так, что мой блок получит визуализации (какие файлы должны знать прочь?)

Примечание:

COMPANY NAME: Abc 
MODULE NAME: Device 

Кроме того, createBlock ("устройство/устройство ") возвращает" false "

ответ

9

Строка device/device, передаваемая в createBlock, является псевдонимом класса. Классовые псевдонимы дают разработчику Magento возможность ссылаться на классы без использования фактического имени класса. Это косвенное указание позволяет заменить один класс (или переписать в терминологии Magento) другому, не меняя никакого кода, который создает экземпляр и использует класс.

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

<config> 
    <global> 
     <blocks> 
      <device> 
       <class>Abc_Device_Block</class> 
      </devicer> 
     </blocks> 
    </global> 
</config> 

При создании имени класса для части, часть xml является частью, которая предшествует/в псевдониме и заменяется содержимым тегов при генерации имени класса. Затем параметр/заменяется на _, а оставшаяся часть псевдонима класса добавляется к имени класса. Таким образом, с псевдонимом класса device/device и указанным выше XML будет создано следующее имя класса: Abc_Device_Block_Device, которое Magento ожидает найти в Abc/Device/Block/Device.php. Он будет искать папки в порядке, указанном в include_path, который обычно равен app/code/local, затем app/code/community, а затем app/code/core и, наконец, `lib.

Та же основная логика также относится к классам моделей и вспомогательных устройств.

Alan Storm's обязательное дополнение CommerceBug расширение имеет отличный инструмент для проверки того, какие алиасы класса/блока/вспомогательного класса сопоставляются с точки зрения имен классов и местоположений файлов.

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

+0

Спасибо за подробный ответ. Помогает много! Если бы я сделал все, что вы сказали выше, и мне все еще нужно было что-то помещать в свой макет/device.XML, который упоминает о блоке? –

+0

Теперь дело в том, что у меня есть класс Abc_Device_Block_Device, присутствующий в Abc/Device/Block/Device.php, и класс Abc_Device_Block_Device расширяет Mage_Core_Block_Template (у меня нет методов в классе). Хотя, когда я делаю createBlock («устройство/устройство»). Он просто возвращает «ложь». Что я могу делать неправильно? –

+0

Спасибо! Починил это. Проблема была в моем config.xml. Еще раз спасибо ! –

2

Это был отличный ответ Джим. Добавление точки к нему, приоритет является

  1. Местное
  2. сообщества, а затем приходит
  3. ядро, если я не ошибся.
Смежные вопросы