обновление макета


В своем проекте я пытаюсь изменить позиции двух шаблонов на домашней странице темы "современный", обновив макет в файле local.xml. Имена файлов шаблонов следующие:

1)  frontend\base\default\template\page/switch/languages.phtml

2)  frontend\base\default\template\page/template/links.phtml

Вышеуказанные файлы шаблонов ссылаются на приведенные ниже имена блоков в папке макета "база/по умолчанию".

1)  store_language

2)  top.links

Оба блока находятся в одном родительском блоке, который является "заголовком". Итак, я написал local.xml как это в папке "по умолчанию/современный/макет".

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="header">     
            <remove name="top.links"/>
            <block type="page/template_links" name="top.linked" as="topLinked" template="page/template/links.phtml" before="store_language"/>
        </reference>
    </default>
</layout>

Приведенное выше обновление макет успешно удалил блок "top.links", но не добавил новый блок "top.linked" снова перед блоком "store_language". что я здесь делаю не так?

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

enter image description here

У меня есть также некоторые другие вопросы, такие как:

  • Следует ли обновлять макет с помощью"local.xml "только файл?
Author: Mr_Green, 2013-09-08

2 answers

<remove .. /> директива полностью удаляет блок. Даже если вы добавите его впоследствии с тем же именем, он все равно будет удален.

Если вы хотите удалить блок из одного места и вставить его в другое, вам нужно сделать вместо этого unsetChild сначала и insert везде, где вы хотите.

Однако в вашем случае это не поможет. Эти два блока явно повторяются внутри header.phtml, поэтому было бы намного проще просто поменять их местами там.

 2
Author: user487772, 2013-09-08 15:36:44

Если вы проверите файл template/page/html/header.phtml, вы заметите, что все блоки вызываются с помощью функции getChildHtml. Это означает, что для получения вашего блока topLinked вам придется добавить некоторый код в файл header.phtml.

[...]
<div class="quick-access">
    <?php echo $this->getChildHtml('topSearch') ?>
    <p class="welcome-msg"><?php echo $this->getWelcome() ?> <?php echo $this->getAdditionalHtml() ?></p>
    <?php echo $this->getChildHtml('topLinked') ?>
    <?php echo $this->getChildHtml('store_language') ?>
</div>
<?php echo $this->getChildHtml('topContainer'); ?>
[...]

В строке 5 я добавил ваш блок topLinked. Это будет включать блок перед store_language в заголовке.

По-прежнему удаление старого top.links и добавление нового не потребуется. Просто переместите вызовы getChildHtml в header.phtml, и вы сможете расположить их так, как хотите хочу.

 2
Author: Sander Mangel, 2013-09-08 16:47:17