Как установить макет по умолчанию в Magento 1.5, используя local.xml? - PullRequest
5 голосов
/ 05 апреля 2011

Итак, я сделал несколько макетов, которые хочу использовать, и подумал, что установка этого в вашем файле local.xml исправит это для каждой страницы.Как это

<default>
<reference name="root">
    <action method="setTemplate">
      <template>page/mytheme.phtml</template>
    </action>
</reference>
</default>

Это, однако, ничего не делает.Вместо этого, если я выберу

...<customer_account_forgotpassword>
  <reference name="root">
    <action method="setTemplate"><template>page/mytheme.phtml</template></action>
  </reference>
</customer_account_forgotpassword>  

<customer_account_confirmation>
  <reference name="root">
    <action method="setTemplate"><template>page/mytheme.phtml</template></action>
  </reference>
</customer_account_confirmation>...

и так далее для каждого конкретного места, оно будет изменено на этих конкретных страницах.Я ошибаюсь или это единственный способ сделать это?

Ответы [ 4 ]

11 голосов
/ 06 апреля 2011

Проблема, с которой вы (вероятно) сталкиваетесь, заключается в том, что что-то приходит позже и снова устанавливает шаблон для корневого блока , переопределяя ваши изменения.

Более поздние версии Magento (1.4somethingish) представили способ предотвратить это. Если вы посмотрите в page.xml, вы увидите такую ​​ручку

<page_one_column translate="label">
    <label>All One-Column Layout Pages</label>
    <reference name="root">
        <action method="setTemplate"><template>page/1column.phtml</template></action>
        <!-- Mark root page block that template is applied -->
        <action method="setIsHandle"><applied>1</applied></action>
    </reference>
</page_one_column>

Если дескриптор page_one_column применяется к вашему запросу, или вы применяете его вручную с помощью

<update handle="page_one_column" />

Magento изменит шаблон , а вызовет метод setIsHandle в блоке.

<action method="setIsHandle"><applied>1</applied></action>

В Magento есть код, который будет искать свойство IsHandle, и если оно истинно, дальнейшие вызовы setTemplate будут игнорироваться. (это немного упрощает вещи, но это более или менее верно)

Попробуйте что-то вроде

<default>
    <reference name="root">
        <action method="setTemplate">
          <template>page/mytheme.phtml</template>
        </action>
        <action method="setIsHandle">
            <applied>1</applied>
        </action>       
    </reference>
</default>  

И посмотрите, поможет ли это.

Имейте в виду, что это одна из тех серых областей, где неясно, если сторонние разработчики должны идти. Кроме того, изменение шаблона для всех страниц может оказать нежелательное влияние на те части сайта, которые ожидают присутствия в определенном шаблоне.

2 голосов
/ 05 сентября 2012

На самом деле, вы на правильном пути. Вы просто не указали запрос на local.xml. Вы также должны включить запрос, который вы переопределяете.

Вот пример кода local.xml

<layout>
    <default>
    ....
    </default>

    <!-- Update Configuration for this request specially -->
    <customer_account_confirmation> 
      <reference name="root">
        <action method="setTemplate"><template>page/mytheme.phtml</template></action>
      </reference>
    </customer_account_confirmation>

</layout>

Этой конфигурации достаточно , чтобы сделать то, что вам нужно.

1 голос
/ 05 апреля 2011

Да, кажется, что вы должны добавить его к некоторым отдельным ручкам. Это потому, что дескриптор <default> загружается первым. Дескриптор <customer_account_forgotpassword> читается только позже. Если вы проверите файл design/frontend/base/default/layout/customer.xml, то увидите, что этот самый дескриптор устанавливает шаблон, отличный от <default>.

Посмотрите на этот пример порядка, в котором маркеры макета читаются Magento для страницы "Забыли пароль":

1. default
2. STORE_default
3. THEME_frontend_default_babel
4. customer_account_forgotpassword
5. customer_logged_out

Там вы можете увидеть, почему настройка шаблона дескриптора <default> переопределена.

Я рекомендую вам использовать модуль Layout Viewer для Magento от Alan Storm: http://alanstorm.com/layouts_blocks_and_templates

0 голосов
/ 30 апреля 2013

У меня была похожая проблема, и я подумал, что это может сэкономить кому-то время.
Пытался установить 1column макет на cms страниц .Ни одно из решений не работало, пока я не понял:
Шаблон страницы CMS установлен из Admin CMS > Pages > Design > Layout, а не local.xml.
Если вы установите шаблон для дескриптора <default> в local.xml, это не помогает, потому что это будет переопределено дескриптором макета, выбранным из страниц администратора для каждой конкретной страницы CMS.

...