Случайные товары на главной странице ПрестаШоп.

miniСегодня мы разберемся как сделать показ случайных товаров в модуле homefeatured. Модуль отображает товары на главной странице и имеет несколько вариантов перевода-популярные товары, наши предложения, избранные товары, рекомендуемые товары на главной и другие. Давайте расширим функционал модуля и добавим возможность вывода случайных товаров.
По умолчанию в настройках модуля можно изменять только количество товаров.

default
Откроем основной файл модуля homefeatured.php текстовым редактором notepad++ и в методе install добавим новую переменную HOME_FEATURED_RANDOM

 
Значение ноль означает выключено по умолчанию.
Теперь чтобы работать в модуле с новой переменной добавляем ее в метод getContent()

 
А в метод displayForm добавляем html форму с радио кнопами

 
Если сбросить или установить модуль то в настройках появиться радио кнопки включения и отключения отображения случайных товаров.
random
С настройкой модуля в бэк-офисе закончили, чтобы товары выводились в случайном порядке в шаблоне модуля необходимо в функции hookDisplayHome отвечающей за вывод товаров на главной странице сделать следующие изменения.
Меняем условия

 
на

 
И для объявленной переменной $product добавляем условия вывода товаров в случайной последовательности в зависимости включена или выключена объявленная переменная $random

 
Наконец в строке

 
комментируем часть кода.
Готово.
Полный код с исправлениями и комментариями

 

Сбрасываем или устанавливаем модуль и наслаждаемся. При обновлении страницы в случайном порядке будут меняться до 8 товаров.
До встречи на http://webnewbie.ru/

Comments (21)

Кирилл
26.02.2014 - 14:15 / Ответить

Скопировал готовый код, в модуле появилась настройка рандома, а вот страница сайта открывается белым листом и все. Что делать?

26.02.2014 - 14:48 / Ответить

Вернуть все обратно как было. Модуль использовался из версии 1.5.6.1. Если у вас другая версия, то замените свой модуль на модуль из указанной версии. Либо делайте по аналогии на своем модуле, но не бездумно копируйте код. Как вариант, можете еще почистить кэш магазина.

Петр
20.03.2014 - 17:58 / Ответить

На странице сайта товары под этим модулем отображаются как избранные товары. Можно поменять это название на популярные товары?

21.03.2014 - 02:54 / Ответить

В ПрестаШоп есть возможность изменять любой текст в бэк-офисе. Локализация-переводы-перевод установленных модулей. Задаете поиск Ctrl+F вставляете “избранные товары” и меняете на “популярные товары”

Рома
24.04.2014 - 19:04 / Ответить

Спасибо за статью!
А как например сделать, точнее что нужно менять в коде, чтобы этот модуль отображал товары из определенной категории? Например я хочу вывести на главную все товары в НАЛИЧИИ. Я создам категорию “Товары в наличии”, но уберу её от глаз пользователей, то есть скрою эту категорию, но хотелось бы чтобы все товары этой категории выводились на главной через существующий модуль. Понимаю что копать нужно в методе hookDisplayHome где и определяется ИД категории, но что именно нужно менять, в этом и вопрос? Заранее благодарен!

25.04.2014 - 06:16 / Ответить

Замените строку
[php]$category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id);[/php]
На
[php]$category = new Category(тут номер категории, (int)Context::getContext()->language->id);[/php]
Не забудьте поменять цифрой комментарий.

Рома
25.04.2014 - 11:47 / Ответить

Все получилось!
Спасибо!

Vlad
09.07.2014 - 18:31 / Ответить

Поправил наименование этого блока. Сбросил. Блок пропал с главной.
Отключал-выключал.
Как его туда вернуть?

10.07.2014 - 02:47 / Ответить

Изменения в названиях блоков и т.д. лучше производить с помощью перевода в бэк-офисе. Скорее всего с изменением наименования вы зацепили какой то знак, может кавычку или тег или правили файл обычным блокнотом. Для того чтобы вернуть все обратно следует вернуть первоначальный файл и сделать все заново по правилам.

Vlad
12.07.2014 - 14:02 / Ответить

я только изменил перевод в бэкофисе названия блока. После сохранения изменений в переводе, ничего на главной не изменилось. Я сбросил блок. Он пропал.
Я не открывал блокнотом, ничего не правил в файлах. Я только сейчас нашел эту папку homefeatured в папке “модули” , удалил её и опять скопировал из бэкапа.
Ничего не изменилось, блок пропал. Хотя стоит в бэкофисе включенным.
Все кэши отключены, включена принудительная перекомпиляция.
В чем может быть дело?
Только изменил 1 фразу без всяких тегов и сбросил блок.

13.07.2014 - 12:24 / Ответить

Задавая вопрос на этой странице, касающейся изменений в модуле homefeatured, Вы ввели меня в заблуждение. Что касается случая с изменением в переводе ответить однозначно не получиться. Это все равно, что если бы Вы обратились к доктору с вопросом о головной боли, которая у не проходит после принятия цитрамона. Ищите фрилансера, который бы смог найти причину бага.

Сергей
02.11.2014 - 02:34 / Ответить

Здравствуйте Евгений.
Код в файле homefeatured.php не совсем похож на Ваш. Подскажите пожалуйста , как мне его исправить , чтобы получить случайный вывод.В программировании я аматор. Большое спасибо за помощь .
Мой код :….

02.11.2014 - 14:33 / Ответить

Не надо мне сюда вставлять код модуля, просто напишите, что и используете модуль из версии 1.6. Тема избита и давно бы нашли решение в сети.
Для случайного вывода товаров замените метод
[php]public function hookDisplayHome($params)
{
if (!$this->isCached(‘homefeatured.tpl’, $this->getCacheId()))
{
$this->_cacheProducts();
$this->smarty->assign(
array(
‘products’ => HomeFeatured::$cache_products,
‘add_prod_display’ => Configuration::get(‘PS_ATTRIBUTE_CATEGORY_DISPLAY’),
‘homeSize’ => Image::getSize(ImageType::getFormatedName(‘home’)),
)
);
}

return $this->display(__FILE__, ‘homefeatured.tpl’, $this->getCacheId());
}[/php]
на
[php]public function hookDisplayHome($params)
{
$category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id);
$nb = (int)(Configuration::get(‘HOME_FEATURED_NBR’));
$products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10), ‘date_add’, ‘DESC’, false, true, true, $nb);
shuffle($products);
$this->smarty->assign(
array(
‘products’ => $products,
‘add_prod_display’ => Configuration::get(‘PS_ATTRIBUTE_CATEGORY_DISPLAY’),
‘homeSize’ => Image::getSize(‘home_default’),
)
);
return $this->display(__FILE__, ‘homefeatured.tpl’);
}[/php]

roma
14.05.2015 - 03:56 / Ответить

Простите – на Главной (в шаблоне Presta shop 1.6) товары скрыты. Только нажав на кнопку “Популярное” – открываются тов. предложения. Как поменять код чтобы предложения были сразу на сайте открыты. Заранее спасибо.
Код отправляю, возможно его менять в этой функции??
[php]
public function hookDisplayHomeTab($params)
{
if (!$this->isCached(‘tab.tpl’, $this->getCacheId(‘homefeatured-tab’)))
$this->_cacheProducts();

return $this->display(__FILE__, ‘tab.tpl’, $this->getCacheId(‘homefeatured-tab’));
}

public function hookDisplayHome($params)
{
$category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id);
$nb = (int)(Configuration::get(‘HOME_FEATURED_NBR’));
$products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10), ‘date_add’, ‘DESC’, false, true, true, $nb);
shuffle($products);
$this->smarty->assign(
array(
‘products’ => $products,
‘add_prod_display’ => Configuration::get(‘PS_ATTRIBUTE_CATEGORY_DISPLAY’),
‘homeSize’ => Image::getSize(‘home_default’),
)
);
return $this->display(__FILE__, ‘homefeatured.tpl’);
}

public function hookDisplayHomeTabContent($params)
{
return $this->hookDisplayHome($params);
}

public function hookAddProduct($params):
[/php]

14.05.2015 - 10:56 / Ответить

Тут код менять не надо, все делается программными настройками.Зайдите в управление хуками модуля и удалите модуль из хука hookDisplayHomeTab.

roma
15.05.2015 - 02:51 / Ответить

Я зашел в панель управления в меню расположение блоков и удалил там модуль товары на Главной в .
displayHomeTab. Там было 4-е модуля, осталось 3 шт Новые товары, блок скидок и лидеры продаж.
После удаления модуля из displayHomeTab – товары на Главной исчезли с главной страницы сайта вместе с кнопкой “Популярное”.
Что-то еще надо сделать, чтобы они отобразились?? Или подождать?? Вообще изменения на сайт иногда падают через мин. 20 (это связано с кэшированием..)
И заранее благодарю за помощь))
Меню “Управления хуками” в преста 1.6 не нашел, поэтому удалял модуль в меню расположение блоков. Если сделал ошибку уточните пож. как исправить.

15.05.2015 - 03:18 / Ответить

Первый ответ был в теории, а на практике нужно еще удалить в модуле хук displayHomeTabContent и установит модуль в хуке displayHome. Управление хуками происходит в настройках модуля, сверху зеленое меню, там вкладка Управление хуками. Самый простой способ восстановить все что Вы натворили-это переустановить все вышеперечисленные Вами модули.

roma
15.05.2015 - 04:29 /

Огроменнное спаСИбоо))) Вы не представляете – 2-а дня парило. Думал код менять надо. Спасибо)) Вы гений presta shop))

15.05.2015 - 11:23 /

Спасибо за отзыв, но увы, я не гений. Это все стандартные навыки, которыми должен владеть каждый пользователь PrestaShop. Практикуйтесь и все у Вас будет получаться

Владимир
30.05.2015 - 01:29 / Ответить

Приветствую. Может Вы подскажете, как сделать чтобы на главной странице отображение Новинок, Популярных товаров и Рекомендуемых было как на скриншоте prntscr.com/7anbe3
Уже чего только не пробовал. В дефолтной теме их нельзя вывести одна под другой, или это я просто не смог разобраться.
prntscr.com/7anc7c

31.05.2015 - 05:17 / Ответить

Почитайте комментарии выше, я уже отвечал на этот вопрос

Leave a Reply