Добавление кнопок навигации вперед-назад на странице товара

В этой статье мы рассмотрим пример как добавить возможность клиенту магазина просматривать товары одной категории не выходя со страницы товара и добавим кнопки навигации следующий товар-предыдущий товар. Для примера воспользуемся стандартным шаблоном PrestaShop версии 1.6.0.9. Но точно таким же способом можно воспользоваться для установки кнопок для шаблонов Престашоп версий 1.5. Для работы нам потребуется расширить функционал контроллеров classes/product.php, controllers/front/ProductController.php и изменить файл шаблона страницы товара hemes/default-bootstrap/product.tpl
Как всегда, чтобы сохранить работоспособность проекта в случае обновления Prestashop, поместим файлы контроллеров с расширением в папку override.
Создадим файл override/classes/Product.php и разместим в нем следующий код:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
class Product extends ProductCore
{
public function getAdjacentProducts()
{
//получить информацию о текущей позиции товара в категории по умолчанию
$position = Db::getInstance()->getValue('SELECT position FROM '._DB_PREFIX_.'category_product WHERE id_product = ' . (int)$this->id . ' AND id_category = ' . (int)$this->id_category_default);
// получить информацию из БД о следующем и предыдущем товаре
$previous = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT cp.id_product, pl.link_rewrite, cp.position, pl.name
FROM '._DB_PREFIX_.'category_product cp
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (cp.id_product = pl.id_product)
LEFT JOIN '._DB_PREFIX_.'product p ON (cp.id_product = p.id_product)
WHERE p.id_category_default = '.(int)$this->id_category_default.' AND (cp.position < '. (int)($position ) .' ) AND cp.id_category = ' . (int)$this->id_category_default .' AND pl.id_lang = '.(Context::getContext()->language->id).'
ORDER BY cp.position DESC');
$next = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT cp.id_product, pl.link_rewrite, cp.position, pl.name
FROM '._DB_PREFIX_.'category_product cp
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (cp.id_product = pl.id_product)
LEFT JOIN '._DB_PREFIX_.'product p ON (cp.id_product = p.id_product)
WHERE p.id_category_default = '.(int)$this->id_category_default.' AND (cp.position > '. (int)($position ) .' ) AND cp.id_category = ' . (int)$this->id_category_default .' AND pl.id_lang = '.(Context::getContext()->language->id).'
ORDER BY cp.position ASC');
return array('previous' => $previous, 'next' => $next);
}
}
|
В комментариях кода я отметил какие расширения мы добавили.
Теперь создадим файл override/controllers/front/ProductController.php
и запишем в нем следующий код
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Class ProductController extends ProductControllerCore
{
public function initContent()
{
$adjacent_products = $this->product->getAdjacentProducts();
$this->context->smarty->assign(array(
'prev_product'=> $adjacent_products['previous'],
'next_product'=> $adjacent_products['next']
));
parent::initContent();
}
}
|
Здесь мы используем ранее созданный метод getAdjacentProducts() из файла product.php и указываем переменные для навигации предидущий-следующий
Осталось добавить кнопки в шаблон. Для этого откроем файл themes/default-bootstrap/product.tpl
найдем строку с кодом
|
1
|
<div class="primary_block row">
|
и перед ней вставим следующий код
|
1
2
3
4
5
6
7
8
|
<div class="product-navigation clearfix" style="margin-bottom:20px">
{if $prev_product}
<a title="{$prev_product.name}" class="btn btn-default" href="{$link->getProductLink($prev_product.id_product, $prev_product.link_rewrite)}">{l s='Previous Product'}</a>
{/if}
{if $next_product}
<a title="{$next_product.name}" class="btn btn-default" style="float:right"href="{$link->getProductLink($next_product.id_product, $next_product.link_rewrite)}">{l s='Next Product'}</a>
{/if}
</div>
|
Все готово. Но, чтобы заработали переопределения в файлах находящиеся в папке override необходимо почистить кэш, удалив файл cache/class_index.php
Чтобы перевести на русский названия кнопок Next Product и Previous Product воспользуйтесь переводом шаблона в бэк-офисе.
Результат







Не получилосьь…..
Вроде бы зделал все как написана, но ни чего не получилось, беда, что сделал не так не пойму ((((
Если прочитать еще раз внимательно, а может и еще раз, может и получится, а беда пройдет стороной?
К сожалению так и не заработало, проверил три раза, если смотреть исходный код то видно только
А каким редактором пользовались?
Notepad++, поставил чистую престу 1.6.0.9 тоже самое, незнаю в чём проблема
Тогда поясните что значит по Вашему исходный код, где показаны пробелы.
В chrome нажать f12 или правой кнопкой мыши посмотреть код элемента скрин “clip2net.com/s/39mu1Jv”
Не знаю в чем проблема. Завтра специально для Вас сделаю все, что описано в статье на тестовом сайте и дам ссылку. Вообще, все что я пишу в статьях проверено на локальном сервере. Возможно еще этот баг
привет! спасибо, все получилось!
для тех кто думает, что это “баг”, – не пробовали в начале кода поставить [php] <? [/php] ?
без кавычек естественно.
или просто код скопировали?))
Здравствуйте!
PrestaShop™ 1.5.6.1
1. Теперь создадим файл override/controllers/front/ProductController.php
- Такой директории не существует, если я правильно понимаю. то её нужно создать (весь путь) как указан у Вас в данной статье?
2. Осталось добавить кнопки в шаблон. Для этого откроем файл themes/default-bootstrap/product.tpl
найдем строку с кодом
- в файле /product.tpl к сожалению нет строки
Как тогда быть в этом случае?
Заранее благодарен за ответ!
В примере использовался PrestaShop 1.6.0.9. Тупо копировать и пробовать на 1.5.6.1 нельзя. Подумайте,почитайте внимательно и делайте по аналогии.
У меня вот такой вопросик: Можно ли сделать так, чтобы надписи на кнопках выводились только на русском? Заказчику это принципиально!
Как же так, делаете на заказ, а перевести с английского на русский не можете? previous, next.
Подскажи когда вставляешь код то нужно что то добавлять?(([php] <? [/php] ?))
у меня лично код не работает
Да, теги php добавлять надо, у Вас не сайте есть наверняка другие файлы переопределения, постомтрите и по примеру сделайте.И еще не забываете удалить файл class_index.php в корне папки cache иначе работать не будет.
Все работает))) Я вообще в этом не разбираюсь, но с помощью статьи все сделал, все получилось! Спасибо
Все работает. Все хорошо. Я не разбираюсь в этом, но благодаря статье – смог это сделать. Спасибо.
Был бы благодарен, если бы Вы написали как все-таки перевести названия кнопок!? Заранее спасибо)))
Разобрался как менять язык кнопок. Спасибо