2010-03-20 23 views
6

Tôi hiện đang sử dụng mô-đun thống kê (lõi) trên bản cài đặt Drupal 6 của mình. Điều này làm tăng số đếm trong bảng {node_counter} mỗi lần nút được xem và điều này hoạt động.Cập nhật bảng {node_counter} theo chương trình trong drupal

Câu hỏi của tôi là - tôi có thể tăng bộ đếm này theo cách lập trình không? Tôi đang tìm cách để đạt được điều này khi người dùng tương tác với nội dung được tạo ra từ các khung nhìn (nói nhấn vào một lightbox), do đó, có thể cập nhật bảng với AJAX sẽ là lý tưởng.

Tôi đã thực hiện tìm kiếm nhanh trên d.o và dường như không có bất kỳ mô-đun nào bị loại bỏ ngay lập tức. Có ai có bất cứ kinh nghiệm với điều này?

Trả lời

9

Sẽ không khó để tạo mô-đun tùy chỉnh cho việc này.

Các truy vấn mà các module thống kê chạy là:

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

Điều duy nhất chúng ta cần làm, là để thay thế arg(1) với id nút chúng tôi muốn thêm một số để điều này có thể được thực hiện trong một phong tục mô-đun một cái gì đó như thế này.

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

Tất cả những gì còn lại là để thực hiện một chức năng điều khiển truy cập tùy chỉnh, bạn có thể kiểm tra nếu yêu cầu là ajax hoặc thực hiện bất kiểm soát mà bạn thích, chức năng chỉ phải trả về TRUE hoặc FALSE. Bạn cũng cần phải thực hiện một sự kiện ajax với id nút trong cài đặt của bạn, nhưng điều đó cũng không quá khó.

Bạn cần nhấn url custom/ajax/2 để cập nhật nút có id 2, v.v.

+0

Thankyou rất nhiều cho câu trả lời chi tiết của bạn. Sẽ bị nứt trên mô-đun tùy chỉnh. – wiifm

+0

Mô-đun của tôi hiện có sẵn để tải xuống trên d.o http://drupal.org/project/statistics_ajax - trong trường hợp bất kỳ ai khác cần chức năng tương tự – wiifm

Các vấn đề liên quan