Magento новый модуль пользовательских блоков

12

Я использую Magento версии 1.8.1.0.

Я пытаюсь создать новый модуль пользовательских блоков, который я буду использовать для создания новой домашней страницы.

  • Пространство имен: Crusader
  • Модуль: CLHomePage
  • Тип блока: крестовый поход домой
  • Класс: Qwerty (только сейчас во время тестирования)
  • Дизайн упаковки: крестоносец
  • Тема: по умолчанию

Это то, что я до сих пор:

\ Приложение \ и т.д. \ модули \ Crusader_All.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Crusader_CLHomePage>
            <active>true</active>
            <codePool>local</codePool>
        </Crusader_CLHomePage>
    </modules>
</config>

\ Приложение \ код \ Local \ Crusader \ CLHomePage \ и т.д. \ config.xml

<?xml version="1.0"?>
<config> 
    <modules>
        <Crusader_CLHomePage>
            <version>0.0.1</version>
        </Crusader_CLHomePage>
    </modules>
    <global>
        <blocks>
            <crusaderhome>
                <class>Crusader_CLHomePage_Block</class>
            </crusaderhome>
        </blocks>
    </global>
</config>

\ Приложение \ код \ Local \ Crusader \ CLHomePage \ Block \ Qwerty.php

<?php
class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template
{
    // Methods (optional)
}
?>

\ Приложение \ дизайн \ интерфейс \ крестоносец \ умолчанию \ расположение \ local.xml

<?xml version="1.0" ?>
<layout>
    <cms_index_index>
        <reference name="content">
            <block type="core/template" name="homepage" template="crusader/home.phtml">
                <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
            </block>
        </reference>
    </cms_index_index>
</layout>

\ Приложение \ дизайн \ интерфейс \ крестоносец \ умолчанию \ шаблон \ крестоносец \ home.phtml

<div id="home">
<p>Home Wrapper</p>
<?php echo $this->getChildHtml('homeads'); ?>
</div>

\ Приложение \ дизайн \ интерфейс \ крестоносец \ умолчанию \ шаблон \ крестоносец \ homeads.phtml

<p>Adverts</p>

Теперь, когда все вышеперечисленное установлено, на моей домашней странице отображается только «Home Wrapper», поэтому home.phtmlотображается содержимое , а не содержимое homeads.phtml.

Если я изменяю тип блока на homeadsна core/template, он работает, и я вижу и «Home Wrapper» и «Adverts». Так что я знаю, что проблема связана со ссылкой на мой новый тип блока (называемый крестовый поход домой).

Что я здесь не так делаю ..?

РЕДАКТИРОВАТЬ

После предложений в ответах я обновил некоторые файлы следующим образом, но он все еще не работает:

\ Приложение \ и т.д. \ модули \ Crusader_Home.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Crusader_Home>
            <active>true</active>
            <codePool>local</codePool>
        </Crusader_Home>
    </modules>
</config>

\ Приложение \ код \ Local \ Crusader \ Home \ и т.д. \ config.xml

<?xml version="1.0"?>
<config> 
    <modules>
        <Crusader_Home>
            <version>1.0.0</version>
        </Crusader_Home>
    </modules>
    <global>
        <blocks>
            <crusader_home>
                <class>Crusader_Home_Block</class>
            </crusader_home>
        </blocks>
    </global>
</config>

\ Приложение \ код \ Local \ Crusader \ Home \ Block \ Qwerty.php

<?php
class Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template
{
    // Methods (optional)
}
?>

\ app \ design \ frontend \ crusader \ default \ layout \ local.xml (упрощено использование только одного блока вместо вложенных блоков, которые я пробовал ранее)

<?xml version="1.0" ?>
<layout>
    <cms_index_index>
        <reference name="content">
            <block type="crusader_home/qwerty" name="homepage" template="crusader/home.phtml" />
        </reference>
    </cms_index_index>
</layout>

\ Приложение \ дизайн \ интерфейс \ крестоносец \ умолчанию \ шаблон \ крестоносец \ home.phtml

<p>Home</p>

Так что я все еще в положении, где ничего не видно.

После запроса @FabianBlechschmidt я включил журналы, и это показано в файле exception.log:

2014-04-09T14:04:54+00:00 ERR (3): 
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty' in W:\stores\magento-dev\app\Mage.php:595
Stack trace:
#0 W:\stores\magento-dev\includes\src\__default.php(27744): Mage::throwException('Invalid block t...')
#1 W:\stores\magento-dev\includes\src\__default.php(27686): Mage_Core_Model_Layout->_getBlockInstance('crusader_home/q...', Array)
#2 W:\stores\magento-dev\includes\src\__default.php(27721): Mage_Core_Model_Layout->createBlock('crusader_home/q...', 'homepage')
#3 W:\stores\magento-dev\includes\src\__default.php(27488): Mage_Core_Model_Layout->addBlock('crusader_home/q...', 'homepage')
#4 W:\stores\magento-dev\includes\src\__default.php(27454): Mage_Core_Model_Layout->_generateBlock(Object(Mage_Core_Model_Layout_Element), Object(Mage_Core_Model_Layout_Element))
#5 W:\stores\magento-dev\includes\src\__default.php(27459): Mage_Core_Model_Layout->generateBlocks(Object(Mage_Core_Model_Layout_Element))
#6 W:\stores\magento-dev\includes\src\__default.php(13895): Mage_Core_Model_Layout->generateBlocks()
#7 W:\stores\magento-dev\includes\src\__default.php(11274): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#8 W:\stores\magento-dev\includes\src\__default.php(11213): Mage_Cms_Helper_Page->_renderPage(Object(Mage_Cms_IndexController), 'home')
#9 W:\stores\magento-dev\app\code\core\Mage\Cms\controllers\IndexController.php(45): Mage_Cms_Helper_Page->renderPage(Object(Mage_Cms_IndexController), 'home')
#10 W:\stores\magento-dev\includes\src\__default.php(13969): Mage_Cms_IndexController->indexAction()
#11 W:\stores\magento-dev\includes\src\__default.php(18331): Mage_Core_Controller_Varien_Action->dispatch('index')
#12 W:\stores\magento-dev\includes\src\__default.php(17865): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#13 W:\stores\magento-dev\includes\src\__default.php(20465): Mage_Core_Controller_Varien_Front->dispatch()
#14 W:\stores\magento-dev\app\Mage.php(684): Mage_Core_Model_App->run(Array)
#15 W:\stores\magento-dev\index.php(176): Mage::run('crusadergifts', 'store')
#16 {main}

Есть идеи, что происходит .. ??

РЕДАКТИРОВАТЬ № 2

@Malachy нашел ответ ... Это был компилятор. Я отключил компилятор, и теперь он работает.

Стивен Ласт
источник
Я предполагаю, что у вас есть опечатка где-то, проверьте прописные / строчные буквы имен файлов. Файлы выглядят хорошо. Вы чистили кеш конфига?
Фабиан Блехшмидт
@FabianBlechschmidt Я проверил прописные / строчные буквы в коде и именах файлов - выглядит нормально для меня. Все выше вставлено из моих файлов. В данный момент у меня отключен весь кэш, я только что очистил весь кэш и попытался снова - все еще не работает.
Стивен, последний
Вы проверяли system.log и exception.log? Если в нем ничего нет, я бы начал отладку в MAge_Core_Model_Config-> getGroupedClassName (). Кроме того: пожалуйста, ознакомьтесь с великолепным учебником по отладке и доложите.
Фабиан Блехшмидт
Я не использовал журналы раньше. Я включил их сейчас, и в файле exception.log показывается:exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Стивен, последний
Я обновил имя модуля в соответствии с другим ответом здесь, отсюда и название типа блока (CLHomePage -> Home).
Стивен, последний

Ответы:

11

Я нахожу всю проблему XML сложной, поэтому я сочувствую вашему делу здесь.

Мне кажется, что есть несоответствие с вашим именем класса и вашим блочным XML

т.е.

class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template

и

    <block type="core/template" name="homepage" template="crusader/home.phtml">
        <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
    </block>

Давайте начнем с типа блока и будем работать в обратном направлении. Я думаю, что здесь я ожидал бы увидеть что-то вроде

<block type="crusader_home/qwerty" ...

и этот тип будет относить Magento к классу

Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template

Продолжая работать в обратном направлении в этом направлении, файл app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml необходимо изменить на что-то вроде

<global>
    <blocks>
        <crusader_home>
            <class>Crusader_Home_Block</class>
        </crusader_home>
    </blocks>
</global>

Он указывает Magento на все классы, начинающиеся с 'Crusader_Home_Block_ *'. И теперь я думаю, что вам нужно переименовать ваш модуль Crusader_Home вместо Crusader_CLHomePage и соответственно изменить имена папок ...

И / НО, я настоятельно рекомендую вам изменить название вашего модуля. Только используйте одну заглавную букву в начале названия модуля, а не три, и не ставьте заглавные буквы в середине имени.

Возможно, вы захотите взглянуть на некоторые из инструментов, доступных для создания модулей. Я считаю их очень полезными для избежания ошибок при печати. Я использую это очень умные люди в MGT Commerce (у него простота на стороне), и это всеобъемлющее и удивительное кодирование Silk Software .

*** РЕДАКТИРОВАТЬ следующие комментарии ниже

Кроме того, основываясь на журнале ошибок, я думаю, что проблема в том, что Magento не может найти ваш файл класса. Поэтому дважды проверьте, обновлены или отключены кэши, в частности, кэш XML, и что компилятор выключен или повторно включен .

Малахия
источник
спасибо, я попробовал ваши предложения. Я переименовал свой модуль в «Домой» и обновил все ссылки и папки. Все еще не работает. Я отредактирую свой вопрос, чтобы показать изменения.
Стивен, последний
1
Это выглядит лучше, конечно. Интересно, есть ли еще где-нибудь скрытая ошибка ввода? Основываясь на журнале ошибок, я думаю, что проблема в том, что Magento не может найти ваш файл класса. Поэтому дважды проверьте, обновлены ли кэши или отключены ESP. Кэш XML и компилятор выключен или повторно включен. Это не было бы проблемой разрешения файла, не так ли?
Малахия
1
Вы упомянули волшебное слово - Complier ... Я отключил Complier, и теперь он работает. Спасибо! Если вы добавите это как ответ, я приму это для вас! :-)
Стивен, последний
На самом деле, это был не просто компилятор. Ваш оригинальный XML <block type="crusaderhome/qwerty"неверен. Решение состоит в том, чтобы а) исправить XML и б) перекомпилировать
Malachy
-1

ответь на свой вопрос в первую очередь

    <block type="core/template" name="homepage" template="crusader/home.phtml">
       <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
    </block>

следует заменить на

<block type="core/template" name="homepage" template="crusader/home.phtml"></block>
<block type="crusaderhome/qwerty" name="homeads" as="homeads" 
template="crusader/homeads.phtml" />

потому что homeads - это не ребенок домашней страницы. Я думаю, что это будет работать.

Tai
источник
Благодарность! Я пробовал это раньше без удачи. Родитель / потомок работали нормально, когда типом блока был основной / шаблон (а не мой тип блока), поэтому моя проблема не в размещении блоков.
Стивен, последний
-1

Я получил ту же проблему и решил ее, заменив следующий код в config.xml

<global>
    <blocks>
        <crusaderhome>
            <class>Crusader_CLHomePage_Block</class>
        </crusaderhome>
    </blocks>
</global>

к этому

<global>
    <blocks>
        <crusader_clhomepage>
            <class>Crusader_CLHomePage_Block</class>
        </crusader_clhomepage>
    </blocks>
</global>

Это должно решить проблему.

Сиддхарт
источник