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


Из следующей строки в 2 столбцах -справа.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') ?>

Author: James Donnelly, 2013-10-21

1 answers

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

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

Добавляется в XML-файл макета Magento в 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>

Взглянув на атрибут "тип" этого тега блока, мы можем узнать, к какому классу объектов относится этот раздел макета. Он поступает из модуля "Ядро" и имеет текстовый список типа блока. Имя класса для этот список Mage_Core_Block_Text_List. (app/code/core/Mage/Core/Block/Text/List.php). Текстовые списки - это просто контейнеры блоков, назначение которых - хранить в них дополнительные дочерние блоки. Вы можете добавить любое количество дочерних блоков в текстовый список, и они будут отображаться либо в том порядке, в котором они были добавлены, либо в том порядке, в котором они были назначены.

Итак, чтобы ответить на ваш вопрос, нет сценария просмотра (файла.phtml), который отображает содержимое $this->getChildHtml ("содержимое"). блоки, которые были добавлены в этот блок, сами могут иметь связанные с ними сценарии просмотра. Чтобы узнать, что это за сценарии просмотра, вам нужно будет найти 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>

Приведенный выше код добавит блок с классом объектов Mage_Core_Block_Template в блок с именем "содержимое" (который, как оказалось, является тем, который вы спросили об этом). Затем 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

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

Обратите внимание, что в зависимости от ваших настроек в Системе ->Конфигурация -> (Общий) дизайн, могут быть дополнительные package/theme местоположения, в которые будет заглядывать Magento. Существуют также другие сценарии, например, если поле "Пользовательская тема" изменено для отдельных страниц CMS, категорий каталога или продуктов каталога, на странице просмотра этой отдельной модели может быть дополнительное расположение сценария просмотра (которое будет соответствовать выбранной теме), которое имеет приоритет над настройками вашего сайта по умолчанию.

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

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

 143
Author: Darren Felton, 2015-08-06 21:38:31