Макет Magento - контент не отображается / не отображается - PullRequest
7 голосов
/ 13 августа 2011

Я прошел различные уроки по Magento, а также книгу по Magento по макету, но я застрял со следующей проблемой.

Я создал пользовательский модуль, расположенный в app / code / local /Компания / Модуль /.Я создал блок Company_Module_Block_Ablock, расположенный в Company / Module / Block / Ablock.php.Я определил <config> ... <frontend><layout><updates><module><file>module.xml в Company / Module / etc / config.xml

config.xml также имеет

<global>
   <blocks>
      <module>
         <class>Company_Module_Block</class>
      </module>
   </blocks>
</global>

Внутри этого module.xml у меня есть:

<layout>
    <company_module_index_index>
        <reference name="content">
            <block type="module/ablock" name="myablock" template="module/ablock.phtml" />
        </reference>
    </company_module_index_index>
</layout>

Я создал Company / Module / controllers / IndexController.php и определил там indexAction, который выполняет

$this->loadLayout();
$this->renderLayout();

Но что бы я ни пытался, я не могу отобразить свой ablock.phtml.ablock.phtml находится в приложении / design / frontend / company / default / template / module / ablock.phtml.Тема включена и в основном работает на сайте.

Я даже пытался изменить module.xml внутри макета, чтобы он даже не использовал шаблон, и даже это ничего не отображает.Вот так -

<reference name="content">
<block type="core/text">
    <action method="setText">
        <text>Testing</text>
    </action>
</block>
</reference>

Кстати, пользовательская тема работает нормально, в противном случае на других страницах содержимое отображается в правильном месте.

У меня есть SetEnv MAGE IS DEVELOPER MODE 1 в .htaccess, которыйдолжен помогать отображать даже предупреждения и вещи.Но в моих файлах systems.log и exceptions.log нет ошибок.(Да, ведение журнала включено)

Кто-нибудь может посоветовать, как решить эту проблему, или может обнаружить ошибку в конфигурации или коде?

Моя следующая опция - взлом кода основного модуля и регистрация, где мой module.xml загружается и анализируется, чтобы увидеть, что там происходит.

Спасибо.

Ответы [ 3 ]

32 голосов
/ 13 августа 2011

Шаги по устранению неполадок при обновлении макета XML:

  1. Ваш XML-файл (local.xml или module.xml) загружается в систему

  2. Соответствует ли тег метки, который вы использовали в файле макета, идентификатору, сгенерированному для вашего запроса?

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

<layout <!-- notice missing closing taglayout -->
    <company_module_index_index>
        <reference name="content">
            <block type="module/ablock" name="myablock" template="module/ablock.phtml" />
        </reference>
    </company_module_index_index>
</layout>

Если включен режим разработчика и вы очистили кэш, загрузка любой страницы с указанным выше кодом приведет к ошибке. Это позволяет вам знать, что Magento пытается загрузить ваш XML-файл. Если страница загружается без проблем, это означает, что ваш XML-файл находится не в том месте, или вы неправильно настроили XML в config.xml.

Далее вы проверяете свой макет. Вы хотите убедиться, что вы используете правильный. Вы можете просмотреть дескрипторы макета, которые использовались для определенного запроса, вызвав следующие после ваших loadLayout и renderLayout запросов

//from a controller action
$this->loadLayout();
$this->renderLayout();
var_dump(Mage::getSingleton('core/layout')->getUpdate()->getHandles());
exit("bailing early at ".__LINE__." in ".__FILE__);

Я обнаружил, что вышеуказанные элементы обычно решают 90% проблем с макетом. Обязательно пройдите процесс несколько раз, так как легко пропустить один шаг и предположить, что что-то в порядке, когда это не так. Взяв на себя мой обычный риск быть шиллом, одна из причин, по которой я создал Commerce Bug (расширение для коммерческой отладки), заключалась в том, чтобы быстро и на первый взгляд предоставлять эту информацию, чтобы помочь с проблемами отладки.

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

module_module_test

Однако дескриптор, который вы определяете в файле layout.xml, -

company_module_index_index

Это дескриптор «полное имя действия». Типичный синтаксис для этого

frontname_controllername_actionname

Измените дескриптор на module_module_test, и вы должны быть установлены.

1 голос
/ 13 августа 2011
  • Вы отключили или обновили кеш Magento?
  • Ваш модуль включен? Это перечислено в Системе, Конфигурации, Дополнительно, Дополнительно?
  • какой класс расширяет ваш блок?

С уважением, Алессандро

0 голосов
/ 13 августа 2011

Я не могу сказать, не увидев все ваши config.xml, возможно, вам не хватает такого раздела:адрес www.example.com/module.Это будет означать, что дескриптор макета company_module_index_index используется при загрузке макета.Кстати, опубликованный макет XML не работает, закрывающий тег не соответствует открывающему тегу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...