Используя новый Layout Handle глобально, определенный в Mage_Page, Magento - PullRequest
0 голосов
/ 18 января 2011

Уважаемые эксперты,
Я упоминаю, что все, что я сделал до сих пор в одном из моих проектов с использованием Magento версии 1.4.2, но ПОЖАЛУЙСТА, поправьте меня, если какой-либо из моих процессов кажется неправильным.Я буду более чем благодарен всем вам.

У меня совсем другой взгляд на страницу продукта, так что, возможно, было бы неразумно использовать доступные по умолчанию маркеры макета страницы.
Поэтому я подумал об использовании другого дескриптора макета "page_product_list "чем доступные (например," page_two_columns_left "," page_two_columns_right ").Для его использования я определил блок XML в файле "config.xml" (расположенный в папке "/app/code/local/Mage/Page/etc/"), как и другие блоки дескриптора макета.Код для моего пользовательского дескриптора макета: -

<!-- some other nodes -->
<three_columns module="page" translate="label">
  <!-- details of this node -->
</three_columns>
<product_list module="page" translate="label">
  <label>Product List Page</label>
  <template>page/product-list.phtml</template>
  <layout_handle>page_product_list</layout_handle>
</product_list>

Итак, теперь я хочу загрузить этот дескриптор макета вместо дескрипторов макета "page_two_columns_left" & "default" всякий раз, когда любой пользовательпытается просмотреть страницу сведений о любой категории.
Но это не работает.Может, кто-нибудь подскажет мне, что можно сделать, чтобы достичь этого должным образом в Magento?

Ответы [ 3 ]

3 голосов
/ 18 января 2011

Основываясь на существующих дескрипторах макета, я думаю, что в дополнение к вашим config.xml изменениям (которые, похоже, влияют только на поле выбора в admin), вы должны сделать следующее:

page.xml

<page_product_list translate="label">
    <label>Product List Page</label>
    <reference name="root">
        <action method="setTemplate"><template>page/product-list.phtml</template></action>
        <!-- Mark root page block that template is applied -->
        <action method="setIsHandle"><applied>1</applied></action>
    </reference>
</page_product_list>

catalog.xml

<catalog_product_view>
    <update handle="page_product_list"/>
    <!-- Existing declarations here -->
</catalog_product_view>
1 голос
/ 18 января 2011

Попробуйте это

<product_list module="page" translate="label">
    ....
    <update handle="page_product_list" />
    ....
</product_list>
0 голосов
/ 24 января 2011

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

<catalog_product_view translate="label">
    <label>Catalog Product View (Any)</label>
    <!-- Mage_Catalog -->
    <reference name="root">
        <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
    </reference>
...
</catalog_product_view>

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

<catalog_product_view>
    <reference name="root">
        <action method="setTemplate"><template>page/product-list.phtml</template></action>
    </reference>
...
</catalog_product_view>

Этого будет достаточно, чтобы Magento включил ваш шаблон страницы вместо одного из шаблонов по умолчанию. Не нужно дополнительно объявлять шаблон страницы в page.xml, если вы не хотите, чтобы он отображался в раскрывающихся списках и на панели администратора.

...