Почему 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>
Author: Mufaddal, 2010-01-28

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.

Надеюсь, это поможет, Джо

 7
Author: Joseph Mastey, 2010-01-28 16:05:25