Подтвердить что ты не робот

Понимание 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') ?>

4b9b3361

Ответ 1

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

<?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). Текстовые списки - это просто блокирующие контейнеры, целью которых является сохранение в них дополнительных дочерних блоков. Вы можете добавить любое количество дочерних блоков в текстовый список, и они будут отображены либо в том порядке, в котором они были добавлены, либо в том порядке, в котором они были назначены.

Итак, чтобы ответить на ваш вопрос, нет представления script (.phtml file), который отображает содержимое $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>

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

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

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

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

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.