我正在浏览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的人。 由于缺乏适当的文档,我要求更有经验的开发人员提供一些“来自哪里”的信息 提前致谢
答案 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}&{/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"
调整每页的产品数量。