2010-03-20 8 views
6

Ich verwende derzeit das Statistikmodul (Kern) auf meiner Drupal 6-Installation. Dies erhöht jedes Mal, wenn der Knoten angezeigt wird, eine Zählung in der Tabelle {node_counter}, und das funktioniert.Update {node_counter} Tabelle programmatisch in Drupal

Meine Frage ist - kann ich diesen Zähler auch programmatisch inkrementieren? Ich versuche, dies zu erreichen, wenn Benutzer mit Inhalten interagieren, die aus Ansichten erstellt wurden (sagen wir mal auf einen Leuchtkasten), so dass es ideal wäre, die Tabelle mit AJAX zu aktualisieren.

Ich habe eine schnelle Suche auf d.o gemacht und es scheint keine Module zu geben, die sofort herausragen. Hat jemand damit Erfahrung?

Antwort

9

Es sollte nicht schwer sein, ein benutzerdefiniertes Modul dafür zu machen.

Die Abfrage, die das Statistik-Modul läuft, ist:

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

Das einzige, was wir tun müssen, ist arg(1) mit NodeID wir eine Zählung hinzufügen möchten zu ersetzen, dies in einem benutzerdefinierten getan werden könnte, Modul so etwas.

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

dass alle übrig bleibt, ist eine benutzerdefinierte Zugriffssteuerungsfunktion zu implementieren, können Sie überprüfen, ob die Anforderung Ajax ist oder machen, was Kontrolle Sie wollen, muss die Funktion nur TRUE oder FALSE zurück. Sie müssen auch ein Ajax-Ereignis mit der Knoten-ID in Ihrer Einstellung erstellen, aber das sollte auch nicht zu schwer sein.

Sie müssen die URL custom/ajax/2 zu aktualisieren Knoten mit der ID 2 usw.

+0

Danke sehr für Ihre ausführliche Antwort treffen. Wird auf dem benutzerdefinierten Modul knacken. – wiifm

+0

Mein Modul ist jetzt zum Download auf d.o. http://drupal.org/project/statistics_ajax verfügbar - falls jemand andere ähnliche Funktionen benötigt – wiifm