
Заказчик попросил меня доработать функционал Simpla, добавив в шаблон вывода списка товаров возможность выбрать количество товаров на странице. Оказалось, для этого почти ничего делать не нужно было, весь функционал уже готов.
Первым делом вставим в шаблон выпадающий список с предустановленными количествами.
Если вы пользуетесь bootstrap'ом:
/*
* Файл: [design/ваш_шаблон/html/products.tpl]
*/
{* Количество товаров на листе *}
<div id="products_limit">
<button type="button">
На странице <i class="fa fa-caret-down"></i>
</button>
<ul class="dropdown-menu dropdown-menu-left">
<li{if $limit=='10'} class="active"{/if}><a href="{url limit=10 page=null}">10 товаров</a></li>
<li{if $limit=='20'} class="active"{/if}><a href="{url limit=20 page=null}">20 товаров</a></li>
<li{if $limit=='50'} class="active"{/if}><a href="{url limit=50 page=null}">50 товаров</a></li>
<li{if $limit=='100'} class="active"{/if}><a href="{url limit=100 page=null}">100 товаров</a></li>
<li role="separator" class="divider"></li>
<li{if $limit=='all'} class="active"{/if}><a href="{url limit=all page=null}">Все</a></li>
</ul>
</div>
Если же нет, убираем красивый dropdown, остаются только ссылки (не забудьте темизировать a.active через CSS):
/*
* Файл: [design/ваш_шаблон/html/products.tpl]
*/
{* Количество товаров на листе *}
<div id="products_limit">
<a href="{url limit=10 page=null}" {if $limit=='10'} class="active"{/if}>10 товаров</a>
<a href="{url limit=20 page=null}" {if $limit=='20'} class="active"{/if}>20 товаров</a>
<a href="{url limit=50 page=null}" {if $limit=='50'} class="active"{/if}>50 товаров</a>
<a href="{url limit=100 page=null}" {if $limit=='100'} class="active"{/if}>100 товаров</a>
<a href="{url limit=all page=null}" {if $limit=='all'} class="active"{/if}>все</a>
</ul>
</div>
Не забудем убрать из "пагинации" кнопку "все сразу", которая выводит все товары на одной странице. Зачем нам дублированный функционал? Нужно найти такую вот строчку и убрать её (или закомментировать):
/*
* Файл: [design/ваш_шаблон/html/pagination.tpl]
* Найти такую строку и удалить:
*/
<li><a href="{url page=all}">все сразу</a></li>
И добавим обработку входящего параметра $_GET['limit'], для этого нужно:
/*
* Файл: [view/ProductsView.php]
*/
// 1. Найти строки и удалить:
// Постраничная навигация
$items_per_page = $this->settings->products_num;
// 2. Чуть ниже найти строки:
// Вычисляем количество страниц
$products_count = $this->products->count_products($filter);
// Показать все страницы сразу
if($this->request->get('page') == 'all') {
$items_per_page = $products_count;
}
// И заменить их на
// Вычисляем количество страниц
$products_count = $this->products->count_products($filter);
// Постраничная навигация
// сохранить количество товаров на страницу в сессию
if ($items_per_page = $this->request->get('limit', 'string')) {
$_SESSION['limit'] = $items_per_page;
} elseif (!empty($_SESSION['limit'])) {
$items_per_page = $_SESSION['limit'];
} else {
$items_per_page = $this->settings->products_num;
}
$this->design->assign('limit', $items_per_page);
// Показать все страницы сразу
if ($items_per_page == 'all') {
$items_per_page = $products_count;
}
Всё, наслаждайтесь!
Немає коментарів :
Дописати коментар