2012-09-06 34 views
4

我试图以默认的列表或网格模式执行我的类别视图显示产品。在catalog.xml中为类别视图设置“列表/网格”默认视图模式

<reference name="content"> 
     <block type="catalog/category_view" name="category.products" template="catalog/category/view.phtml"> 
      <block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml"> 
       <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml"> 
        <block type="page/html_pager" name="product_list_toolbar_pager"/> 
        <!-- The following code shows how to set your own pager increments --> 
        <!-- 
         <action method="setDefaultListPerPage"><limit>4</limit></action> 
         <action method="setDefaultGridPerPage"><limit>9</limit></action> 
         <action method="addPagerLimit"><mode>list</mode><limit>2</limit></action> 
         <action method="addPagerLimit"><mode>list</mode><limit>4</limit></action> 
         <action method="addPagerLimit"><mode>list</mode><limit>6</limit></action> 
         <action method="addPagerLimit"><mode>list</mode><limit>8</limit></action> 
         <action method="addPagerLimit" translate="label"><mode>list</mode><limit>all</limit><label>All</label></action> 
        --> 
       </block> 
       <action method="addColumnCountLayoutDepend"><layout>empty</layout><count>6</count></action> 
       <action method="addColumnCountLayoutDepend"><layout>one_column</layout><count>5</count></action> 
       <action method="addColumnCountLayoutDepend"><layout>two_columns_left</layout><count>4</count></action> 
       <action method="addColumnCountLayoutDepend"><layout>two_columns_right</layout><count>4</count></action> 
       <action method="addColumnCountLayoutDepend"><layout>three_columns</layout><count>3</count></action> 
       <action method="setToolbarBlockName"><name>product_list_toolbar</name></action> 
      </block> 
     </block> 
    </reference> 

这里是我有内部<catalog_category_layered><catalog_category_default>代码。知道任何人如何做到这一点?我在Google上搜索了很多时间并没有找到解决方案。

回答

11

您可以在布局XML或“自定义做到这一点布局更新”,在管理具有以下XML部分:

<reference name="product_list_toolbar"> 
    <action method="setData"><key>_current_grid_mode</key><value>list</value></action> 
</reference> 

可以肯定,在工具栏中块名称在这样的产品列表中块设置:

<action method="setToolbarBlockName"><name>product_list_toolbar</name></action> 
+0

这是一个很好的解决方案,如果你想覆盖特定类别的默认显示模式。 –

+0

希望我能投2倍..我安装了一个扩展,劫持'setToolbarBlockName' ..你回答帮助我的第二个问题,确保我使用重写的'setToolbarBlockName'名称 –

10

您可以设置网格或列表从后端

系统 - >配置 - >目录 - > Frontend->列表模式

+0

谢谢,但我想通过代码,从xml布局,像那些功能,把最大数量的产品 – Carlos

2

如果您选择使用@ rengaw83所述的方法,您将无法在该类别中的模式之间切换。例如,如果您点击“网格”,模式将不会更改为网格模式。

为了能够切换模式,只是通过自定义布局设置在一个类别默认视图模式,你需要重写的核心工具栏块,并添加下面的方法吧:

/** 
* Sets the current View modes (grid, list, etc.) 
* 
* @param array $modes 
*/ 
public function setCurrentModes($modes) 
{ 
    $this->_availableMode = $modes; 
    $modes = array_keys($this->_availableMode); 
    $defaultMode = current($modes); 
    $mode = $this->getRequest()->getParam($this->getModeVarName()); 
    if ($mode) { 
     if ($mode == $defaultMode) { 
      Mage::getSingleton('catalog/session')->unsDisplayMode(); 
     } 
    } else { 
     $mode = Mage::getSingleton('catalog/session')->getDisplayMode(); 
    } 

    if (!$mode || !isset($this->_availableMode[$mode])) { 
     $mode = $defaultMode; 
    } 
    $this->setData('_current_grid_mode', $mode); 
} 

然后您将可以设置自定义布局选项卡这样的模式:

<reference name="product_list_toolbar"> 
    <action method="setCurrentModes"> 
     <modes> 
      <list>List</list> 
      <grid>Grid</grid> 
     </modes> 
    </action> 
</reference> 

默认列表模式,或

<reference name="product_list_toolbar"> 
    <action method="setCurrentModes"> 
     <modes> 
      <grid>Grid</grid> 
      <list>List</list> 
     </modes> 
    </action> 
</reference> 
默认网格模式的

。或者你甚至可以只传递一种模式来设置可用的网格或列表模式。

相关问题