Prestashop 1.7产品每页下拉列表类别

时间:2017-09-30 08:08:22

标签: php smarty prestashop prestashop-1.7

我正在浏览Prestashop 1.7,我想覆盖负责产品列表(又名类别档案)的控制器。 我正在使用正式的Prestashop启动主题,我想覆盖控制器以获得更多数据到sort-order.tpl

<div class="products-sort-order">
  <span>{if isset($listing.sort_selected)}{$listing.sort_selected}{else}{l s='Sort by:' d='Shop.Theme.Global'}{/if}</span>
  {foreach from=$sort_orders item=sort_order}
    <a
      class="{['current' => $sort_order.current, 'js-search-link' => true]|classnames}"
      href="{$sort_order.url}"
      rel="nofollow"
    >
      {$sort_order.label}
    </a>
  {/foreach}
</div>

在上面的代码片段中有一个sort_order变量,它是来自products-top.tpl的$ listing变量的一部分

<div id="js-product-list-top" class="products-selection">
  {if $listing.pagination.total_items|count > 1}
    <p>{l s='There are %product_count% products.' d='Shop.Theme.Catalog' sprintf=['%product_count%' => $listing.pagination.total_items|count]}</p>
  {elseif $listing.pagination.total_items > 0}
    <p>{l s='There is 1 product.' d='Shop.Theme.Catalog'}</p>
  {/if}

  {block name='sort_by'}
    {include file='catalog/_partials/sort-orders.tpl' sort_orders=$listing.sort_orders}
  {/block}

  {block name='pagination_summary'}
    {l s='Showing %from%-%to% of %total% item(s)' d='Shop.Theme.Catalog' sprintf=[
    '%from%' => $listing.pagination.items_shown_from ,
    '%to%' => $listing.pagination.items_shown_to,
    '%total%' => $listing.pagination.total_items
    ]}
  {/block}
</div>

我的目标是覆盖负责的控制器,以便生成一些链接来改变resultsPerPage,就像$ sort_order更改将一些参数传递给url的列表顺序一样。 问题是,虽然我几乎搜索了所有控制器,但我没有找到将这些数据传递给tpl的人。 由于缺乏适当的文档,我要求更有经验的开发人员提供一些“来自哪里”的信息 提前致谢

1 个答案:

答案 0 :(得分:3)

首先,为classes / controller / ProductListingFrontController.php

创建一个覆盖

并更改第279行:

$resultsPerPage <= 0 || $resultsPerPage > 36

到(例如..)

$resultsPerPage <= 0 || $resultsPerPage > 100
此示例中的

100是每页所需的最大项目数。您也可以根据需要选择更多或更少。现在让我们改变你的.tpl

在您的主题中,转到themes / yourtheme / templates / catalog / _partials / sort-orders.tpl

在页面顶部(许可证下方)添加此项以分配变量:

{if !empty($smarty.get.order)}
        {capture assign='ordering'}order={$smarty.get.order}&amp;{/capture}
    {else}
        {assign var='ordering' value=''}
    {/if}

    {if !empty($smarty.get.resultsPerPage)}
        {assign var='results_per_page' value=$smarty.get.resultsPerPage}
    {else}
        {assign var='results_per_page' value=25}
    {/if}

现在,在下面,添加以下代码:

<div class="col-md-3">
  <label style="float:left;margin-right: 15px" class="form-control-label hidden-sm-down sort-label">{l s='Products per page:'}</label>
  <div style="float:left;" class="sort-select dropdown js-dropdown">
    <a class="custom-select select-title" rel="nofollow" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
        {$results_per_page}
    </a>
    <div class="dropdown-menu">
      <a rel="nofollow" href="?{$ordering}resultsPerPage=25" class="dropdown-item js-search-link">
            25
        </a>
      <a rel="nofollow" href="?{$ordering}resultsPerPage=50" class="dropdown-item js-search-link">
            50
        </a>
      <a rel="nofollow" href="?{$ordering}resultsPerPage=75" class="dropdown-item js-search-link">
            75
        </a>
      <a rel="nofollow" href="?{$ordering}resultsPerPage=100" class="dropdown-item js-search-link">
            100
        </a>
    </div>
  </div>
</div>

您可能需要更改布局(或项目数量,或每页的最大结果数...),但您将会很高兴:)

例如,如果您要更改项目数(在下拉列表中),只需更改:

<a rel="nofollow" href="?{$ordering}resultsPerPage=25"

<a rel="nofollow" href="?{$ordering}resultsPerPage=40"

调整每页的产品数量。