Обновление {node_counter} таблица программно в drupal

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

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

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

6
задан Cœur 21 January 2019 в 10:09
поделиться

1 ответ

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

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

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 событие с id узла в настройках, но это тоже не должно быть слишком сложно.

Вам нужно нажать url custom/ajax/2 для обновления узла с id 2 и т.д.

9
ответ дан 10 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: