середу, 25 травня 2016 р.

Выбор количества товаров на странице в Simpla





Заказчик попросил меня доработать функционал 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;
}

Всё, наслаждайтесь!

Немає коментарів :

Дописати коментар