Вы делаете здесь три ошибки.
Первый совет: Вы редактируете правый XML-файл?
Многие распространенные проблемы макета возникают из файла XML, который вы редактируете, не являющегося файлом XML, загруженным системой. Включите режим разработчика на своем сайте, установите display_errors
на 1
, а затем преднамеренно введите неверно сформированную ошибку в ваши XML-файлы и попробуйте загрузить страницу.
<!-- note the trailing greater than sign at the end -->
<adminhtml_system_config_index>
...
</adminhtml_system_config_index> >
Если страница загружается без ошибок, то вы не загружаете XML-файл, который, как вы думаете.
Второй совет: Вы используете правильную рукоятку компоновки?
Я не уверен, что вы находитесь. Несмотря на то, что на странице конфигурации системы по умолчанию используется действие index
, это действие фактически пересылает страницу в действие edit
.
#File: app/code/core/Mage/Adminhtml/controllers/System/ConfigController.php
public function indexAction()
{
$this->_forward('edit');
}
Пересылка означает, что есть внутренняя повторная отправка, но не перенаправление http. Это означает, что фактическая ручка
`adminhtml_system_config_edit`
Вот почему я использую (отказ от ответственности: и построен, и продать) Commerce Bug. На вкладке «Макет» всегда отображаются текущие дескрипторы, и я могу избежать предположений, которые отправляют мне неправильный путь.
Третьего Совет: Вы путаете блок с именем left
с левой колонкой?
В общем, контейнерные блоки Magento (в left
, content
, right
и т.д.) не шаблона блоков. Вместо этого они являются контейнерами (text/list
блоков, если быть точным), которые содержат и несколько блоков шаблонов.
Это другое место, где я использую Commerce Bug, specifically the new Graphviz feature. Это покажет вам структуру блока для любой конкретной страницы. В системе заводских настроек по умолчанию, вы увидите что-то вроде этого на странице настройки системы
Как вы можете видеть, левый блок не имеет шаблона, поэтому изменение его шаблон не будет иметь никакого эффекта.Вероятно, вам нужен блок left.child1
.
Четвертый совет: Является блоком, который вы пытаетесь изменить, добавленным XML-макетом.
Не слишком углубляясь в рендеринг макета (который будет take a book), есть некоторый блок, который добавляется после макет генерирует все его блоки. Если это так, ваш блок не будет доступен в XML-файлах макета.
Если посмотреть на метод editAction
, вы можете увидеть, что блок вкладок добавляется послеloadLayout
называется (ищите adminhtml/system_config_tabs
). Это означает, что он не будет доступен в XML-файлах макета.
public function editAction()
{
//...
//the `loadLayout` method call creates blocks based on layout XML files
$this->loadLayout();
$this->_setActiveMenu('system/config');
$this->getLayout()->getBlock('menu')->setAdditionalCacheKeyInfo(array($current));
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('System'), Mage::helper('adminhtml')->__('System'),
$this->getUrl('*/system'));
//this line add the `child1` block to the layout. (child one is the
//name chosen since the block has no explicit name
$this->getLayout()->getBlock('left')
->append($this->getLayout()->createBlock('adminhtml/system_config_tabs')->initTabs());
//...
Это означает, что вы не можете изменить шаблон этого блока из XML-файла макета. Вам нужно будет использовать настраиваемый модуль, который будет прослушивать соответствующее событие, а затем вносить изменения через PHP. Я хотел бы попробовать событие controller_action_layout_render_before
или controller_action_layout_render_before_adminhtml_system_config_edit
с PHP код, который выглядит примерно
$block = Mage::getSingleton('core/layout')->getBlock('child1');
if($block)
{
$block->setTemplate('foo.phtml');
}
Update: Так что я отлажена в него. Макет xml загружен правильно. Он застревает в Mage_Core_Model_Layout' (Enterprise 1.12.0.2). Если я использую 'left.child1': строка 311' if (! Empty ($ block)) 'не будет выполняться, поэтому' setTemplate' не будет вызываться. Если я использую 'left', он преуспевает, но, как вы уже сказали, вы не можете установить шаблон в« text/list ». Поэтому мне интересно, почему '$ block = $ this-> getBlock ($ parentName);' with $ parentName - 'left.child1' возвращает false? Я попытался ссылаться на 'footer', который работал, потому что он создается напрямую. Почему я не могу это сделать с левой колонкой? – tester
@tester Обновлен ответ. Похоже, что этот блок добавляется через PHP ** после ** макета XML-рендеринга, что означает, что он недоступен через XML-файлы макета. –
один последний вопрос: как я могу добавить файл css в этот 'left.child1'? Я пробовал '$ block-> addCss ('...');' и 'Mage :: getSingleton ('core/layout') -> addCss ('...');', но ничего не получилось. UPDATE: я нашел решение: addCss работает в блоке 'head'. – tester