2010-03-20 3 views
6

Attualmente utilizzo il modulo delle statistiche (core) sulla mia installazione di Drupal 6. Questo incrementa un conteggio nella tabella {node_counter} ogni volta che viene visualizzato il nodo e questo funziona.Aggiornamento della tabella {node_counter} programmaticamente in drupal

La mia domanda è - posso aumentare anche questo contatore a livello di codice? Sto cercando di ottenere questo risultato quando gli utenti interagiscono con i contenuti creati dalle viste (ad esempio, fare clic su una lightbox), quindi essere in grado di aggiornare la tabella con AJAX sarebbe l'ideale.

Ho eseguito una ricerca rapida su d.o e non sembrano esserci moduli che sporgono subito. Qualcuno ha qualche esperienza con questo?

risposta

9

Non dovrebbe essere difficile creare un modulo personalizzato per questo.

La query che il modulo statistiche corre è:

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

L'unica cosa che dobbiamo fare, è quello di sostituire arg(1) con l'ID del nodo vogliamo aggiungere un conteggio per questo potrebbe essere fatto in un costume modulo qualcosa come questo.

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

Tutto ciò che rimane è quello di implementare una funzione di controllo di accesso personalizzato, è possibile verificare se la richiesta è Ajax o fare qualunque cosa che ti piace di controllo, la funzione deve semplicemente restituire true o false. Devi anche creare un evento Ajax con l'id del nodo nelle tue impostazioni, ma non dovrebbe essere troppo difficile.

è necessario colpire l'url custom/ajax/2 per aggiornare il nodo con id 2 ecc

+0

Grazie molto per la risposta dettagliata. Otterrà cracking sul modulo personalizzato. – wiifm

+0

Il mio modulo è ora disponibile per il download su d.o http://drupal.org/project/statistics_ajax - nel caso in cui qualcun altro abbia bisogno di funzionalità simili – wiifm