Новий модуль блоку Magento


12

Я використовую Magento версії 1.8.1.0.

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

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

Ось що я маю досі:

\ app \ тощо \ модулі \ Crusader_All.xml

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

\ app \ code \ 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>

\ app \ code \ local \ Crusader \ CLHomePage \ Block \ Qwerty.php

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

\ app \ design \ frontend \ cruader \ default \ layout \ 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>

\ app \ design \ frontend \ cruader \ default \ template \ cruader \ home.phtml

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

\ app \ design \ frontend \ cruader \ default \ template \ cruader \ homeads.phtml

<p>Adverts</p>

Тепер, з вищезазначеним місцем, на моїй домашній сторінці відображається просто "Домашня обгортка", тому відображається вміст home.phtml, але не вміст homeads.phtml.

Якщо я зміню тип блоку homeadsна core/template, він працює, і я бачу і "Домашню обгортку", і "Рекламу". Тому я знаю, що проблема пов'язана з посиланням на мій новий тип блоку (який називається домом хрестового походу).

Що я тут роблю неправильно ..?

EDIT

Після пропозицій у відповідях я оновив деякі файли наступним чином, але він все ще не працює:

\ app \ тощо \ модулі \ Crusader_Home.xml

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

\ app \ code \ local \ Хрестоносець \ Головна \ тощо \ 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>

\ app \ code \ local \ Хрестоносець \ Головна \ Блок \ Qwerty.php

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

\ app \ design \ frontend \ cruader \ 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>

\ app \ design \ frontend \ cruader \ default \ template \ cruader \ home.phtml

<p>Home</p>

Тож я все ще в положенні, коли нічого не показує.

Після запрошення @FabianBlechschmidt я ввімкнув журнали, і це відображається у винятку.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 знайшов відповідь ... Це був компілятор. Я відключив компілятор і, здається, працює зараз.


Я припускаю, що у вас є помилка друку, перевірте великі регістри / малі імена файлів. Файли виглядають чудово. Чи очистили кеш конфігурації?
Fabian Blechschmidt

@FabianBlechschmidt Я перевірив великі регістри / малі літери в коді та назви файлів - мені це виглядає нормально. Все вище вкладено з моїх файлів. Наразі у мене весь кеш вимкнено, і я просто очистив увесь кеш і спробував ще раз - все одно не працює.
Стівен Останній

Ви перевіряли system.log та izjem.log? Якщо в ньому нічого немає, я б розпочав налагодження в MAge_Core_Model_Config-> getGroupedClassName (). Окрім цього: перегляньте великий підручник з налагодження та звітуйте про це.
Фабіан Блешшмідт

Я раніше не використовував журнали. Я включив їх в даний час, і exception.log показує:exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Стівен Last

Я оновив ім'я модуля відповідно до іншої відповіді тут, звідси і назва типу блоку (CLHomePage -> Головна).
Стівен Останній

Відповіді:


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

Продовжуючи працювати на цьому кроці, файлову програму \ code \ local \ Crusader \ CLHomePage \ тощо \ 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 .

*** EDIT наступні коментарі нижче

Додатково на основі журналу помилок я думаю, що проблема полягає в тому, що Magento не може знайти файл вашого класу. Отже, двічі перевірте, чи кеші оновлюються чи вимикаються, зокрема кеш XML, і що компілятор вимкнено чи повторно увімкнено .


дякую, я спробував ваші пропозиції. Я перейменував свій модуль у "Головна" та оновив усі посилання та папки. Все ще не працює. Я відредагую своє запитання, щоб показати зміни.
Стівен Останній

1
Це краще виглядає звичайно. Цікаво, чи ще десь є підлість помилки введення тексту. На основі журналу помилок я думаю, що проблема полягає в тому, що Magento не може знайти файл вашого класу. Тож двічі перевірте, чи кеші оновлено або вимкнено esp. Кеш XML і компілятор вимкнено або знову ввімкнено. Це не буде проблемою дозволу на файли, чи не так?
Малахій

1
Ви згадали чарівне слово - "Компілятор" ... Я відключив компілятор і, здається, працює зараз. Дякую! Якщо ви додасте це як відповідь, я прийму це за вас! :-)
Стівен Останній

Власне, це був не просто компілятор. Ваш оригінальний XML <block type="crusaderhome/qwerty"неправильний. Рішення полягає в тому, щоб: a) виправити 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 - не дитина домашньої сторінки. Я думаю, що це спрацювало б.


Дякую! Я раніше це намагався не щастить. Справа з батьком / дочкою працювала нормально, коли тип блоку був ядром / шаблоном (а не моїм типовим типом блоку), тому моя проблема не в розміщенні блоку.
Стівен Останній

-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>

Це має вирішити проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.