Вопрос

В настоящее время я использую модуль статистики (core) в моей установке Drupal 6.Это увеличивает количество в таблице {node_counter} каждый раз при просмотре узла, и это работает.

Мой вопрос в том, могу ли я программно увеличить и этот счетчик?Я стремлюсь достичь этого, когда пользователи взаимодействуют с контентом, созданным из представлений (скажем, щелкают по лайтбоксу), поэтому возможность обновления таблицы с помощью AJAX была бы идеальной.

Я выполнил быстрый поиск в d.o, и, похоже, там нет никаких модулей, которые выделялись бы сразу.Есть ли у кого-нибудь какой-нибудь опыт в этом?

Это было полезно?

Решение

Создать пользовательский модуль для этого не должно быть сложно.

Запрос, который выполняет модуль статистики, является:

db_query('UPDATE {node_counter} SET daycount = daycount + 1, totalcount = totalcount + 1, timestamp = %d WHERE nid = %d', time(), arg(1));
// If we affected 0 rows, this is the first time viewing the node.
if (!db_affected_rows()) {
  // We must create a new row to store counters for the new node.
  db_query('INSERT INTO {node_counter} (nid, daycount, totalcount, timestamp) VALUES (%d, 1, 1, %d)', arg(1), time());
}

Единственное, что нам нужно сделать, это заменить arg(1) с идентификатором узла, к которому мы хотим добавить счетчик, это можно было бы сделать в пользовательском модуле примерно так.

function custom_module_menu() {
  $items['custom/ajax/%node'] = array(
    'title' => 'Update count',
    'page callback' => 'custom_module_update_counter',
    'page arguments' => array(2),
    'access callback' => array('custom_module_access_control'),
  );

 function custom_module_update_counter($node) {
   db_query('UPDATE {node_counter} SET daycount = daycount + 1, totalcount = totalcount + 1, timestamp = %d WHERE nid = %d', time(), $node->nid);
   // If we affected 0 rows, this is the first time viewing the node.
   if (!db_affected_rows()) {
     // We must create a new row to store counters for the new node.
     db_query('INSERT INTO {node_counter} (nid, daycount, totalcount, timestamp) VALUES (%d, 1, 1, %d)', $node->nid, time());
   }
 }

Все, что осталось, это реализовать пользовательскую функцию контроля доступа, вы можете проверить, является ли запрос ajax, или создать любой элемент управления, который вам нравится, функция должна просто возвращать TRUE или FALSE.Вам также нужно создать событие ajax с идентификатором узла в ваших настройках, но это тоже не должно быть слишком сложно.

Вам нужно нажать на URL-адрес custom/ajax/2 чтобы обновить узел с идентификатором 2 и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top