Строка 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-макете.
Спасибо за подробный ответ. Помогает много! Если бы я сделал все, что вы сказали выше, и мне все еще нужно было что-то помещать в свой макет/device.XML, который упоминает о блоке? –
Теперь дело в том, что у меня есть класс Abc_Device_Block_Device, присутствующий в Abc/Device/Block/Device.php, и класс Abc_Device_Block_Device расширяет Mage_Core_Block_Template (у меня нет методов в классе). Хотя, когда я делаю createBlock («устройство/устройство»). Он просто возвращает «ложь». Что я могу делать неправильно? –
Спасибо! Починил это. Проблема была в моем config.xml. Еще раз спасибо ! –