Почему Magento пытается вызвать пространство имен Mage, а не мое пользовательское пространство имен?
Я создал модуль в папке локального кода в нашем пользовательском пространстве имен. Блок не отображается на интерфейсе, и при проверке журнала исключений выясняется, что Magento ищет не в том месте.
exception ‘Mage_Core_Exception’ with message ‘Invalid block type: Mage_MyCompany_ForthcomingProducts_Block_List’ in /var/www/html/app/Mage.php:407
То же самое происходит, если я исключаю префикс MyCompany_ при вызове блока; он все еще выглядит в пространстве имен Mage. У меня есть это в файле под названием MyCompany_All.xml в папке "модули" и макеты CMS, которые я добавил, работают нормально, поэтому Magento определенно загружает его:
<?xml version="1.0"?>
<config>
<modules>
<MyCompany_CmsLayouts>
<codePool>local</codePool>
<active>true</active>
</MyCompany_CmsLayouts>
<MyCompany_ForthcomingProducts>
<codePool>local</codePool>
<active>true</active>
</MyCompany_ForthcomingProducts>
</modules>
</config>
У кого-нибудь есть какие-либо идеи относительно того, что является причиной этого?
Добавлено: Блок вызывается статическим блоком с этим кодом шаблона:
{{block type="MyCompany_ForthcomingProducts/List" template="forthcomingproducts/list.phtml"}}
И config.xml для блока это:
<?xml version="1.0" encoding="utf-8"?>
<config>
<modules>
<MyCompany_ForthcomingProducts>
<version>0.9</version>
</MyCompany_ForthcomingProducts>
</modules>
<global>
<blocks>
<forthcomingproducts>
<class>MyCompany_ForthcomingProducts_Block</class>
</forthcomingproducts>
</blocks>
</global>
</config>
1 answers
Попробуйте изменить объявление блока следующим образом:
{{block type="forthcomingproducts/list" template="forthcomingproducts/list.phtml"}}
В своем конфигурационном файле вы определили псевдоним для своих блоков (forthcomingproducts
), и теперь вы должны следовать ему. Magento разыменует forthcomingproducts
на MyCompany_ForthcomingProducts_Block
, как вы просили, затем добавит имя класса с заглавной буквы (list
), создав имя класса MyCompany_ForthcomingProducts_Block_List
. Когда вы используете alis, о котором Magento не знает (MyCompany_ForthcomingProducts
в вашем примере), предполагается, что он является частью пространства имен Mage.
Надеюсь, это поможет, Джо