2010-03-20 13 views
6

Actualmente uso el módulo de estadísticas (núcleo) en mi instalación de Drupal 6. Esto incrementa el conteo en la tabla {node_counter} cada vez que se ve el nodo, y esto funciona.Actualizar la tabla {node_counter} programáticamente en drupal

Mi pregunta es: ¿puedo aumentar también este contador programáticamente? Estoy buscando lograr esto cuando los usuarios interactúan con contenido creado a partir de vistas (por ejemplo, haga clic en una caja de luz), por lo que sería ideal actualizar la tabla con AJAX.

He hecho una búsqueda rápida en d.o y no parece haber ningún módulo que sobresalga de inmediato. ¿Alguien tiene alguna experiencia con esto?

Respuesta

9

No debería ser difícil crear un módulo personalizado para esto.

La consulta que se ejecuta el módulo de estadísticas es:

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()); 
} 

Lo único que tenemos que hacer, es reemplazar arg(1) con el identificador de nodo que queremos añadir un recuento a esto se podría hacer en una costumbre módulo algo así.

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()); 
    } 
} 

Todo lo que queda es la implementación de una función de control de acceso personalizado, se puede comprobar si la solicitud es ajax o hacer lo que sea te gusta el control, la función debe simplemente devolver VERDADERO o FALSO. También necesita hacer un evento ajax con la identificación del nodo en su configuración, pero eso tampoco debería ser demasiado difícil.

usted tenga que pulsar la url custom/ajax/2 para actualizar el nodo con id 2, etc.

+0

Gracias mucho por su respuesta detallada. Obtendrá grietas en el módulo personalizado. – wiifm

+0

Mi módulo está ahora disponible para descargar en d.o http://drupal.org/project/statistics_ajax - en caso de que alguien más necesite una funcionalidad similar – wiifm

Cuestiones relacionadas