Столбцы сетки отображения продукта Magento на домашней странице - PullRequest
1 голос
/ 08 февраля 2012

Попытка заставить домашнюю страницу отображать сетку из 4 столбцов для отображения элементов с использованием шаблона two_column_right в файле local.xml. К сожалению, он использует сетку из трех столбцов, которую я указал для страниц каталога в другом месте: /

Возможно, нужно вставить <update handle="four_column_grid" /> под тегом, ссылающимся на домашнюю страницу ??

<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">

<four_column_grid>
    <reference name="product_list">
        <action method="setColumnCount">
            <count>4</count>
        </action>
    </reference>
</four_column_grid>

<three_column_grid>
    <reference name="product_list">
        <action method="setColumnCount">
            <count>3</count>
        </action>
    </reference>
</three_column_grid>

 <default>

 <!-- Header -->
        <reference name="header">
             <action method="unsetChild"><name>welcome</name></action>
        </reference>


  <!-- Root -->
  <reference name="root">
   <action method="unsetChild"><name>breadcrumbs</name></action>
  </reference>

  <reference name="footer">         
   <!-- Remove all the other Magento links - "Site Map, Search Terms, Advanced Search, and Contact Us"  -->
   <!-- <action method="unsetChild"><name>footer_links</name></action> -->
  </reference>

 <!-- Right sidebar -->
  <reference name="right">
   <remove name="paypal.partner.right.logo"/>
  </reference>

   </default>


 <catalog_category_default>
     <update handle="three_column_grid" />
 </catalog_category_default>

 <catalog_category_layered>
     <update handle="three_column_grid" />
 </catalog_category_layered> 

</layout>

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Краткий ответ: вы не можете устанавливать значения для блоков "внутри" блоков CMS, используя макет XML.

Когда в контроллерах действий вызывается loadLayout(), XML-макет обрабатывается, создаются все блоки и выполняются узлы <action>.Но блоки еще не визуализируются.
Когда вызывается renderLayout(), блоки визуализируются путем вызова их метода toHtml().

Если блок является экземпляром cms/block (или cms/page), содержащим экземпляр {{block ...}}, этот блок будет создан в данный момент.

В этот момент во время потока запросов все узлы XML макета <action> уже обработаны.
По сути, вы ссылаетесь на экземпляр блока в XML макета, который еще не существует.

В качестве обходного пути может быть полезно добавить блок списка продуктов на домашнюю страницу, используя также макет XML.Недостатком является то, что вы не можете свободно размещать его в другом содержимом блока CMS.

<cms_index_index><!-- layout handle for the default homepage action -->
    <reference name="content">
        <block type="catalog/product_list" name="product_list">
            <action method="setTemplate">
                <template>catalog/product/list.phtml</template>
            </action>
            <action method="setCategoryId">
                <catId>51</catId>
            </action>
            <action method="setColumnCount">
                <count>4</count>
            </action>
        </block>
    </reference>
</cms_index_index>

Конечно, вы не ограничены блоком списка товаров.Если вам нужно разместить список внутри другого контента, вы можете добавить блоки cms на домашнюю страницу, используя макет XML-объявления.

0 голосов
/ 04 июля 2014

Обратите внимание, что это изменилось в magento ce 1.9+ при расширении темы rwd. Вам нужно будет определить больше блоков для «name.after» и «after».

<cms_index_index>
    <reference name="content">
        <block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">
            <block type="core/text_list" name="product_list.name.after" as="name.after" />
            <block type="core/text_list" name="product_list.after" as="after" />
            <action method="setCategoryId"><catId>3</catId></action>
            <action method="setColumnCount"><count>4</count></action>
        </block>
    </reference>
</cms_index_index>
...