Шаблон вывода списка товаров категории Prestashop

PrestaShop

Дело в том что при наличии достаточно обширного асортимента товаров стала необходимо разделить товары по различным группам.

  1. Группа товаров которая отображалась в стандартном виде - Название, картинка, короткое описание, цена, купить
  2. Группа отображения в виде таблицы - Название, цена, купить.

Вторая группа будет использоватся для товаров для которых не важны ни описание ни внешний вид, таких как - расходные материалы, комплектующие и т. п. Для начала ставим принудительную компиляцию шаблона Smarty для того чтобы сразу же видеть изменения которые мы будем вносить в код. Для этого есть 2 способа. Первый. Идем в Админ панель сайта -> Настройки -> Производительность -> Принудительная компиляция -> Да Второй. Оставляем Принудительную компиляцию выключенной, идем в /config/smarty.config.inc.php ищем smarty->compile_check и меняем значение на true. Все теперь Smarty будет перекомпилировать только измененные шаблоны. Следующим шагом будет добавление свойства категории с названием flag_template. Идем в /classes/Category.php и в классе CategoryCore объявляем новую переменную, после:

public $date_upd;

ставляем:

/** @var integer category view template */
public   $flag_template;

Далее инициализируем переменную, находим:

$fields['date_upd'] = pSQL($this->date_upd);

и вставляем после нее:

$fields['flag_template'] = pSQL($this->flag_template);

Теперь у нас переменной flag_template будет присвоено значение из базы данных, таблицы _category поле flag_template. Нужно создать это поле в базе данных вручную. Я для этих целей использовал PhpMyAdmin В файле /themes/prestashop/category.tpl находим строку включения списка товаров:

{include file="$tpl_dir./product-list.tpl" products=$products}

И заменяем на:

{if $category->flag_template == 1}
{include file="$tpl_dir./product-list1.tpl" products=$products}
{else}
{include file="$tpl_dir./product-list.tpl" products=$products}
{/if}

Вобщем то на этом можно закончить. Можно вставлять столько условий, сколько будет шаблонов. Каждый из этих шаблонов необходимо будет перевести через админ панель (Инструменты (Tools) -> Переводы(Translation) -> Изменить перевод -> Фронт офис -> Флаг языка (русский? :))- просто скопировав значения из уже переведенного шаблона! После того как я уменьшил почти в 3-и раза высоту блока отображения (class="ajax_block_product) товара образовалась пустота внизу страницы. Я подумал что неплохо было бы эти товары выводить в большем количестве. Итак, я нашел класс который отвечает за к-во товаров на странице, а также за нумерацию страниц (pagination) - /classes/FrontController.php. Находим в нем function pagination и после

if (!self::$initialized)
$this->init();

Вставляем:

$query = 'SELECT `flag_template` FROM `'._DB_PREFIX_.'category` WHERE `id_category` = '.$_GET['id_category'];
$template = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
if ($template == 1) {$product_per_page = 30;}
else {$product_per_page = Configuration::get('PS_PRODUCTS_PER_PAGE');}

Далее по тексту ф-ции отслеживаем выражение Configuration::get('PS_PRODUCTS_PER_PAGE') и наменяем его на $product_per_page Огромное спасибо за хорошую подсказку Sors-у из русского сообщества Prestashop, без него я бы еще б неделю рыл код. З.Ы.: по просьбе Виталия выкладываю скрины как это выглядит на моем сайте. Это стандартный шаблон:

Модифицированный шаблон:

Comments

Login with GitHub to leave a comments