Счетчик просмотров страницы с сортировкой по популярности для MODx Evo

  Дата публикации: 29.09.2012

  Просмотров: 2945

  Оценок: 10

Когда я уже заканчивал работу над своим сайтом, мне захотелось сделать для блога вывод популярных заметок (отсортированных по количеству просмотров). Я был уверен, что существует готовое решение, поскольку вещь нужная. Однако, хорошенько погуглив, я так и не нашел подходящего решения.

Одно из найденных мной решений предлагало создать в таблице site_content базы данных сайта дополнительное поле и в это поле записывать количество просмотров. Сниппет работал, просмотры считались, но вот заставить ditto сортировать по этому полю не представлялось возможным (а меня интересовала в первую очередь сортировка). Зато ditto умеет сортировать по TV-параметру. Но ведь TV-параметр в конце концов тоже записывается в базу. Осталось найти куда именно и будем записывать туда!

Представляю вашему вниманию свой вариант решения задачи. Вариант достаточно универсальный, безболезненно интегрируется и легко вызывается. Используется одна TV-переменная и один сниппет.

Как это работает:

  1. Сниппет проверяет, не manager ли просматривает страницу. Если manager, то счетчик увеличиваться не будет.
  2. Дальше сниппет ищет в базе запись о просмотре нашей страницы. И если не находит – создает новую запись, и прописывает в нее ноль просмотров (запись в базе соответствует TV-параметру для заданной страницы).
  3. И последним шагом сниппет добавляет +1 просмотр для страницы.

Сниппет для записи количества просмотров страницы в TV-переменную

Название сниппета: [[ViewCounter]]

Описание: Запись в TV посещения страницы

  1. <?php
  2. global $modx;
  3. if($modx->documentObject['donthit'] != 1 &&
  4. $_SESSION['usertype'] != 'manager') {
  5. $id=$modx->documentObject['id'];
  6. $table = $modx->getFullTableName("site_tmplvar_contentvalues");
  7.  
  8. $res = $modx->db->select("id", $table, "contentid='". $id."'");
  9. $total_rows = $modx->db->getRecordCount( $res );
  10.  
  11. if( $total_rows == 0 ) {
  12. $fields = array('tmplvarid' => 100500,
  13. 'contentid' => $id,
  14. 'value' => 0,
  15. );
  16. $modx->db->insert( $fields, $table);
  17. }
  18. $result = $modx->db->update("value=value+1", $table,
  19. "tmplvarid=100500 AND contentid='". $id."'");
  20. }
  21. ?>

Применение:

  1. Страницы, для которых считаем посещения, НЕКЕШУРУЕМЫЕ!
  2. Создаем TV-параметр count и запоминаем его id, привязываем его к нужному шаблону.
  3. Создаем сниппет [[ViewCounter]] согласно листингу, вместо числа 100500 пишем id нашего TV-параметра count.
  4. Сниппет [[ViewCounter]] вставляем в шаблон страниц с новостью (для которых мы считаем посещения) сразу после открывающегося тэга <body>.
  5. В вызове ditto, который отвечает за вывод наших новостей, указываем сортировку &orderBy=`count DESC`
  6. В шаблоне для этого вывода вызываем нашу TV-переменную [+count+], а непосредственно на самой странице [*count*].

Важно: при проверке работы сниппета разлогиньтесь или проверяйте в другом браузере, в котором вы не залогинены в админке, иначе счетчик не будет увеличиваться!

  Оценили 10 человек   Понравилось

популярные заметки:

Счетчик просмотров страницы с сортировкой по популярности для MODx Evo

  29.09.2012

  2946

  10

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

подробнее »

Бесплатный PHP+MySQL хостинг для Вашего сайта

  09.05.2012

  2283

  0

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

подробнее »