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

Prestashop 1.7 products per page dropdown list in category

我正在查看 Prestashop 1.7,我想覆盖负责产品列表(又名类别存档)的控制器。 我正在使用官方的 Prestashop 入门主题,我想重写控制器以获得更多数据进行排序-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 的控制器。 由于缺乏适当的文档,我想从更有经验的开发人员那里获得一些 "where-is-that" 的信息 提前致谢

首先,为 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"

调整每页的产品数量。