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

Подсчет просмотров страниц

20.02.2015, 10:07
Гость
Гость

Добрый день!
Есть ли в NetCat функционал по подсчету просмотров страниц-постов (только живых, исключая ботов)?
Нужно не для статистики, а для вывода кол-ва просмотров под объектами (постами) в открытом доступе для посетителей.
Также нужно для построения списка популярных постов на основе кол-ва просмотров по каждому.
Если функционала нет, то как можно реализовать подсчет просмотров, используя стандартные функции NetCat?
С php я на уровне чайника или чуть получше :-)
20.02.2015, 10:50
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 1037

Создать в компоненте поле "Views" тип "число" со значением по умолчанию "0".
В полное отображение объекта вписать
Код:
<?=$nc_core->db->query("UPDATE Message".$classID." SET Views=Views+1 WHERE Message_ID=".$f_RowID."")?>

Это простой способ без проверок

Для последующего ответа с моей стороны вам придется авторизоваться

Модуль "Почтовые уведомления" – настройка email уведомлений на вашем сайте без программирования. Бесплатно. http://netcat.ru/products/CatStore/solution_242.html
20.02.2015, 11:25
Гость
Гость

Александр, спасибо большое!
Без проверок - вы имете ввиду без проверки ботов?
А если в списке объектов, то эту же функцию использовать? Тогда наверное много запросов к базе будет, список объектов может быть длинный. Как тогда в списке выводить кол-во просмотров оптимизированно?
20.02.2015, 11:30
Гость
Гость

А-а, извините, немножко Вас не понял. Этот код, чтобы просмотры записывались (обновлялись).
А выводить в списке или отображении как обычно другие поля.

Александр, немножко не в тему, Вы версткой занимаетесь - HTML5, CSS3, JS и "натягиванием" в NetCat?
23.02.2015, 11:12
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

Да, выводить значения счетчиков как обычные поля:
Код:
Просмотров: <?=$f_Views?>


Вот, кстати, вам слегка доработанный вариант - он отбросит просмотры основными роботами при обновлении счетчика:
Код:
<?
$useragent = $_SERVER['HTTP_USER_AGENT'];
$notbot = "Mozilla|Opera"; // Chrome|Safari|Firefox|Netscape - все идут с отметкой Mozilla
$bot = "Bot/|robot|Slurp/|yahoo";
if ( preg_match("/$notbot/i", $useragent) && !preg_match("!$bot!i", $useragent) ) {
$nc_core->db->query("UPDATE Message".$classID." SET Views=Views+1 WHERE Message_ID=".$f_RowID."");
}
?>


Если вы хотите выполнять обновление счетчика прямо в списке объектов, то запрос нужно, конечно, вынести из "объекта в списке" и поставить его в префикс списка объектов или в суффикс, а SQL-запрос вместе с if'ом модифицировать вот так:
Код:

if (count($row_ids) && preg_match("/$notbot/i", $useragent) && !preg_match("!$bot!i", $useragent) ) {
$nc_core->db->query("UPDATE Message".$classID." SET Views=Views+1 WHERE a.Message_ID IN (".join(",",$row_ids).")");
}

Тогда на каждый просмотр списка товаров, независимо от кол-ва товаров на странице, у вас будет всего лишь один update-запрос.
В недокументированной переменной $row_ids в префиксе списка объектов неткат отражает идентификаторы объектов, которые желает вывести в цикле. Полагаю, что и в суффиксе тоже (но я проверял только в префиксе, так что не гарантирую).
16.03.2015, 12:32
Гость
Гость

Спасибо, Руслан! Только сейчас увидел Ваш ответ.
198 196 2015-03-16 12:32:56 14023
Описание проекта