Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля
Новогодние скидки до 25%!
Подробнее

Функция "Вы недавно смотрели"   Партнерский модуль

бесплатно
Скачать
promo
Для того, чтобы в интернет-магазине или в большом каталоге посетителю сайта было комфортнее, добавьте функцию просмотра последних просмотренных объектов.
Установка:
1. Содержимое прилагаемого файла вставьте в /netcat/modules/default/function.inc.php, не нарушая структуру PHP-кода.
2. В полном просмотре объекта (товара) поставьте такой вызов (например, в самый конец):
Код:
<? addToRecentlyView($f_RowID) ?>

При использовании компонентов 4-й версии, синтаксис другой:
Код:
".opt(addToRecentlyView($f_RowID),"")."


3. В компоненте, в котором хранятся Ваши объекты (товары) создайте новый шаблон "Вы смотрели", в системных настройках которого напишите:
Код:
$query_where="1";
$recently=getRecentlyView(); // получили массив с ID недавно просмотренных объектов
if(count($recently)) { // если что-то есть - делаем выборку
$ignore_sub=$ignore_cc=1;
$glist=join(",",$recently);
$query_where .= " and a.Message_ID in ($glist)";
$query_order="FIELD(Message_ID,$glist)";
}
else $query_where = "1<0"; // если ничего не смотрели, то и выводить ничего не нужно


Готово! Смотреть список ранее просмотренных объектов (товаров) нужно с помощью шаблона "Вы смотрели", который вы создали.
Например, можно создать некий раздел, допустим, "Просмотренные товары", добавить туда ваш товарный компонент, а шаблон вывода указать в настройках инфоблока не стандартный, а "Вы смотрели". И тогда при заходе на сайте в этот раздел, будет показываться список недавно просмотренных товаров.
Также можно вызывать этот шаблон через s_list_class($sss,$ccc,"&nc_ctpl=XXX")
где $sss - номер раздела, $ccc - номер инфоблока в этом разделе, а XXX - номер, присвоенный шаблону "Вы смотрели". В этом случае отобразить информацию о просмотренных товарах можно в любом месте сайта - например, в боковой колонке макета дизайна или в виде "карусели".
Функция предназначена для NetCat версии не ниже 5.0, редакция любая.

UPD 2013/11/13: Добавлена проверка magic_quotes_gpc для совместимости с разными настройками хостеров.
бесплатно

Комментарии 21

ipm  Ильин Павел 08 октября 2013, 12:41:31
Руслан, спасибо большое за решения, которые Вы выкладываете! :)
На обновления системы, я так понимаю, данная вставка кода в файл function.inc.php не должна никак повлиять? Т.е. обновляя систему, данная функция будет работать?
На здоровье! :-)
Да, файл /netcat/modules/default/function.inc.php никогда не портится при установке официальных обновлений NetCat. Поэтому можете смело вставлять туда любые полезности как по мере надобности, так и впрок :-)
Pilot  Тех-Альянс 13 ноября 2013, 01:29:04
NetCat Extra 5.2

Решение не работает. В подробном выводе объекта в месте вставки кода ".addToRecentlyView($f_RowID)." (компонент 57 v.4) [S]вываливается[/S] отображается ошибка Array.
При использовании компонентов от четвертой версии нетката, вызывать функцию нужно иначе, например так:
".opt(addToRecentlyView($f_RowID),"")." - тогда Array выводиться не будет.
Но, вообще-то, запоминание просмотренных объектов должно работать несмотря на вывод этой надписи!
Проверьте, поставив куда-нибудь в системные настройки компонента, такую команду:
print_r(getRecentlyView());
- должна будет показать массив с ID запомненных объектов.
Pilot  Тех-Альянс 13 ноября 2013, 10:43:49
В 57 компонент в системных настройках вставил
последней строкой print_r(getRecentlyView());

на странице отображается
Array ( )

".opt(addToRecentlyView($f_RowID),"")." - действительно, Array не отображается.

Создал новый шаблон компонента на основе 57. В системные настройки которого дописал:
[CODE]
$query_where="1";
$recently=getRecentlyView(); // получили массив с ID недавно просмотренных объектов
if(count($recently)) { // если что-то есть - делаем выборку
$ignore_sub=$ignore_cc=1;
$glist=join(",",$recently);
$query_where .= " and a.Message_ID in ($glist)";
$query_order="FIELD(Message_ID,$glist)";
}
else $query_where = "1<0"; // если ничего не смотрели, то и выводить ничего не нужно[/CODE]

Создал новый раздел "Вы смотрели" добавил к нему 57 компонент и выбрал созданный шаблон компонента.

Сначала посмотрел три товара, потом перехожу в раздел "Вы смотрели" Там пусто.

Просмотр информации о странице, а именно куков показывает переменную recently
c соержимым a%3A1%3A%7Bi%3A0%3Bs%3A3%3A%22363%22%3B%7D (т.е. a:1:{i:0;s:4:"1985";}). Таких переменных три, и у каждой своё содержимое.

Что-то делаю не так?
Разобрался, оказывается, на некоторых хостингах переменная magic_quotes_gpc настроена не так, как нужно, что и вызвало у Вас проблему. Функции исправил, сейчас выложу.
Ну как, попробовали исправленный вариант? Работает?
Pilot  Тех-Альянс 04 декабря 2013, 09:46:56
Добрый день! Сейчас работает! Спасибо огромнейшее!!!!
На здоровье! :)
Pilot  Тех-Альянс 09 декабря 2013, 13:31:32
Всё работает. Неделя теста на ура. Появился вопрос, как можно встроить в раздел "Вы смотрели" Очистить мою историю просмотра. Может быть кнопку? ) Есть идеи?
Да это просто! В компоненте:
[CODE]<a href='?rhist=1'>Очистить историю</a>
[/CODE]
в системных настройках:
[CODE]if($rhist) {
setcookie ("recently", "", time() - 3600);
}[/CODE]
Как-то так. :-)
Pilot  Тех-Альянс 09 декабря 2013, 15:18:51
Не удаляется ))

Таким макаром тоже не удаляется))
[CODE]if($rhist) {
setcookie ("recently", "");
}[/CODE]

А как впринципе эту recently печеньку удалить? У меня стоит проверка, если в кукисах есть эта переменная, то раздел вы смотрели активен, если этой печеньки нет, то раздел скрыт от глаз.
Она должна сама удалиться, если ей задать срок действия меньше, чем сейчас.
Можно попробовать тогда такой код:
[CODE]
if($rhist) {
setcookie ('recently', '', time() - 3600,'/');
}
[/CODE]
Обратите внимание, что в адресной строке должно стоять ?rhist=1
Pilot  Тех-Альянс 09 декабря 2013, 18:23:49
Это сработало )

Появилась идея на вашей базе написать код сравнения товаров)))
Если установить галку в чекбокс, он записывает id товара в печеньку. Потом переходим в раздел сравнения и смотрим, чем же отличаются товары. Вот только ума не приложу как заставить отмеченный чекбокс записывать в куку на вашем примере "Истории просмотров". Есть идеи?
Да, у меня есть уже готовый код для сравнения товаров, и примерно так и работает, но он сильно привязан к конкретному проекту, сделать что-то универсальное не получается из-за того, что поля в компоненте у всех разные. Поэтому я не стал его здесь выкладывать.
Только я делал не чекбоксом, а картинку-звездочку дизайнер нарисовал, но сути это не меняет. Запоминание в куку можно делать с помощью плагина jquery.cookie.js, через onclick-событие. Но я не вижу смысла запоминать эту информацию в COOKIE. SESSION по-моему ощутимо удобнее и безопаснее.
Алексей 16 апреля 2015, 16:41:50
в 5.5 вылезает: Column 'Message_ID' in order clause is ambiguous
Вероятно, на вашем проекте подключены какие-то доп.таблицы к компоненту через JOIN.
Тогда вам надо исправить одну строчку в системных настройках компонента, вот таким образом:[CODE]
$query_order="FIELD([COLOR=FF0000]a.[/COLOR]Message_ID,$glist)";
[/CODE]
Алексей 17 апреля 2015, 16:05:26
спасибо, работает.
а если в каталоге нужно вывести в Отображение объекта. например снизу, как поступить?
Если в детальной странице товара вы хотите разместить внизу блок "Вы недавно смотрели", то создайте в товарном компоненте новый шаблон, как описано выше (если еще не создали) и вызывайте этот шаблон в нужном месте следующим образом:
<?=nc_objects_list($sub,$cc,"nc_ctpl=2345")?>
где 2345 - номер этого самого шаблона. У вас номер будет свой, конечно.
саша 05 июля 2015, 04:50:32
все сделал как написано! появилась ошибка:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '20) AND sub.`Catalogue_ID` = '1' AND a.`Checked` = 1 ORDER BY FIELD(Message_ID' at line 5
на другом сайте работает, разобравться не могу
Скорее всего у вас системные настройки этого шаблона(компонента), куда вы поместили условие выборки, какие-то более сложные, чем приведено в примере. Скиньте весь код "системных настроек" используемого вами шаблона компонента мне на info@welpis.ru - попробуем разобраться.
оставить комментарий
Описание проекта