Понимание getChildHtml в Magento

Из следующей строки в 2columns-right.phtml

<div class="col-main"> <?php echo $this->getChildHtml('global_messages') ?> <?php echo $this->getChildHtml('content') ?> </div> 

Я не могу понять, откуда, когда идет содержимое <?php echo $this->getChildHtml('content') ?> .

witch .phtml-файл вызывается для отображения данных с помощью <?php echo $this->getChildHtml('content') ?>

Если мы обсудим интерфейс веб-сайта, конкретную строку, о которой вы просили …

 <?php echo $this->getChildHtml('content') ?> 

добавляется к макету Magento XML в app / design / frontend / base / default / layout / page.xml. В Magento версии 1.8 вы найдете его в строках 92-94.

 <block type="core/text_list" name="content" as="content" translate="label"> <label>Main Content Area</label> </block> 

Изучив атрибут «type» этого тега блока, мы можем узнать, какой класс объекта этот раздел макета. Он исходит из модуля «Core» и имеет текстовый список типа блока. Имя класса для этого Mage_Core_Block_Text_List. (Приложение / код / ​​ядро ​​/ Маг / Ядро / блок / текст / list.php). Текстовые списки – это просто блокирующие контейнеры, целью которых является сохранение в них дополнительных дочерних блоков. Вы можете добавить любое количество дочерних блоков в текстовый список, и они будут отображены либо в том порядке, в котором они были добавлены, либо в том порядке, в котором они были назначены.

Итак, чтобы ответить на ваш вопрос, нет сценария просмотра (файл .phtml), который отображает содержимое $ this-> getChildHtml ('content'). Блоки, которые были добавлены в этот блок, могут сами иметь связанные с ними сценарии вида. Чтобы узнать, какие сценарии просмотра есть, вам нужно будет найти макет XML, который добавил блок.

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

 <?xml version="1.0"?> <layout> <default> <reference name="content"> <block type="core/template" name="my_view_script" template="hello/world.phtml" /> </reference> </default> </layout> по <?xml version="1.0"?> <layout> <default> <reference name="content"> <block type="core/template" name="my_view_script" template="hello/world.phtml" /> </reference> </default> </layout> по <?xml version="1.0"?> <layout> <default> <reference name="content"> <block type="core/template" name="my_view_script" template="hello/world.phtml" /> </reference> </default> </layout> 

Приведенный выше код добавит блок с классом объектов Mage_Core_Block_Template в блок с именем «content» (который, по вашему мнению, является тем, о котором вы просили). Затем Magento будет искать сценарий вида в следующих местах в следующем порядке:

 app/design/frontend/PACKAGE_NAME/THEME_NAME/template/hello/world.phtml app/design/frontend/PACKAGE_NAME/default/template/hello/world.phtml app/design/frontend/base/default/template/hello/world.phtml по app/design/frontend/PACKAGE_NAME/THEME_NAME/template/hello/world.phtml app/design/frontend/PACKAGE_NAME/default/template/hello/world.phtml app/design/frontend/base/default/template/hello/world.phtml 

Первый, который найден, тот, который он будет использовать. Если скрипт просмотра не найден, Magento будет регистрировать ошибку в var/logs/system.log (настройка файла журнала по умолчанию), указав, что сценарий просмотра не найден. Никакого выхода из блока не будет.

Обратите внимание, что в зависимости от ваших настроек в System -> Configuration -> (General) Design могут появиться дополнительные места в папке package/theme Magento. Также есть другие сценарии, например, если поле «Пользовательская тема» изменено для отдельных CMS-страницы, категории каталогов или продукты каталога, на странице просмотра этой отдельной модели может быть указано дополнительное место сценария представления (которое будет соответствовать выбранной теме), которое имеет приоритет над настройками по умолчанию вашего сайта.

Magento будет следовать этой же логике возврата при поиске файлов перевода, а также XML-файлов разметки.

Обратите внимание, что вполне приемлемо копировать отдельные сценарии просмотра (не копировать целые каталоги, копировать только сценарии просмотра, которые вы намереваетесь изменить) из app/design/frontend/base/default/template/ в вашу локальную тему и настраивать их для целей вашего сайта. Однако, чтобы иметь совместимый с обновлением сайт, файлы макетов не следует копировать с базы на вашу локальную тему. Это не соответствует рекомендациям по совместимости с обновлениями. Вместо этого обновления XML Layout для вашей темы должны содержаться в app/design/frontend/PACKAGE_NAME/THEME_NAME/layout/local.xml . Нет инструкций по макету из app/design/frontend/base/default/layout/* , которые не могут быть удалены / добавлены / изменены, что у вас есть, с соответствующими инструкциями XML в файле local.xml.