Студия ВебМаус логотип

У Вас сайт на HostCMS?

доработка 1 200 руб./час

Выбрать дизайн для сайта

1500 вариантов дизайна

Купить готовый сайт

это удобно и выгодно

обратный звонок
ИП Меньщиков А.В.
ОГРНИП: 324762700034718, ИНН 761016505790
Телефон 8 (962) 211-56-75
Telegram:
ArtemVM84

Удваивается число просмотров элементов инфосистем и товаров магазина

статья опубликована 13 апреля 2019 г.

Удваивается число просмотров элементов инфосистем и товаров магазина - фотография 1 от 13.04.2019

При разработке сайтов одного из наших клиентов мной был замечен странный глюк: по какой-то непонятной причине происходило удвоение количества просмотров страниц, в частности это проявлялось в следующем:

  • Удвоение числа просмотров элементов информационных систем;
  • Удвоение числа просмотров товаров магазина;
  • Внутренняя статистика посещаемости HostCMS показывала ровно в два раза больше посещений;

Проверяется это очень просто. Если на странице отображается количество её просмотров, то достаточно просто обновить страницу и посмотреть, насколько увеличился счётчик просмотров. Должно быть, конечно, увеличение на +1. А почему-то происходило увеличение на +2 при каждом заходе на страницу.

Где посмотреть количество просмотров элемента ИС и товаров магазина

В XML за это отвечает тег showed. Если он у вас отсутствует в XML, то проверьте настройки запрещённых тегов в типовой динамической странице инфосистемы или магазина.

Перед тем как рассказать о причине этого странного поведения, сначала расскажу о процессе поиска ошибки. Если вам сразу хочется узнать в чём дело, пролистайте вниз.

Как я искал причину удвоения статистики посещаемости

Прежде всего нужно было проверить, не запрашивается ли открываемая страница два раза. Однако консоль в Google Chrome показала, что страница открывается только один раз, в том числе нет никаких AJAX запросов (а именно на это и было подозрение в первую очередь: например, всякие JavaScript счётчики и прочее).

После примерно часа различных проверок, размышлений и поисков в ядре HostCMS было принято самое простое решение — отключить всё лишнее. Первым делом вместо макета страницы (проверялось на примере товара магазина) был подключен пустой макет, то есть кроме Core_Page::instance()->execute() там ничего не было. Ошибка сразу же пропала и счётчик стал работать как надо.

Шаг второй — поиск "лишнего" в макете страницы. Подключил макет обратно и стал отключать все блоки кода, пока ошибка не исчезла. Оказалось следующее: в футере сайта выводились настраиваемые значки соцсетей через инфосистему. ИС была просто как хранилище данных, то есть с разделом не связана. Так вот, удвоение счётчика просмотров наблюдалось при выводе одного или более дополнительных свойств у этой информационной системы.

Для примера подключалась другая ИС (тоже с доп. свойствами) — ошибки не было. Это показалось странным — ошибка возникала только с данной ИС, а с другими — нет. В общем, какая-то непонятная магия...

Создание другой инфосистемы (вручную) и перенос данных туда ничего не дал. Как только включал вывод дополнительных свойств, так сразу же счётчики работали неверно (+2 вместо +1). Но хотя бы стало понятно, что дело не в самой инфосистеме.

Далее проверил, что будет если в XSL шаблоне, который связан с данной инфосистемой, отключить вывод данных. И вот тут и нашлось решение (опять же методом исключения, только уже в XSL файле). Решение оказалось неожиданным.

В чём причина удвоения статистики посещаемости

Причина оказалась в следующем. Посмотрите на картинку вверху страницы, на которой приведён фрагмент кода XSL шаблона. На скриншоте красным подчёркнут тег img, а конкретно — его атрибут src. В данном случае всё уже исправлено, но изначально было не так.

Причина удвоения посещаемости:

Если в теге img в качестве значения src указать символ # вместо пути к изображению, то наблюдается удвоение числа просмотров страницы. Возможно и другие значения тоже приводят к аналогичной ошибке, но дело было поздно ночью и проверять было некогда.

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

Решение простое: заменил # ссылкой на однопиксельное прозрачное изображение (в моём случае!) и проблема исчезла.

Почему именно так происходит? Дело очевидно в том, что при указании # в качестве URL картинки браузер обращается непосредственно к той странице, на которой эта картинка выводится (можете убедиться сами в консоли браузера). А раз так, то будет срабатывать счётчик просмотров элемента инфосистемы или магазина, так как значение счётчика увеличивается при вызове функции show().

студия WebMouse, мини-логотип
С уважением,

опубликовано 13 апреля 2019 г.

Поделиться ссылкой на эту статью

Если вам понравилась статья, поделитесь ей с друзьями или коллегами. Также вы можете присылать нам свои собственные статьи для публикации.

WebMouse — официальный дилер HostCMS
Вы занимаетесь своим бизнесом. Мы — вашим сайтом.