سؤال

أستخدم حاليًا وحدة الإحصاء (Core) على تثبيت Drupal 6 الخاص بي. يزيد هذا العدد في جدول {node_counter} في كل مرة يتم عرض العقدة ، وهذا يعمل.

سؤالي هو - هل يمكنني زيادة هذا العداد برمجيًا أيضًا؟ أتطلع إلى تحقيق ذلك عندما يتفاعل المستخدمون مع المحتوى الذي تم إنشاؤه من طرق العرض (على سبيل المثال ، انقر فوق "Lightbox)) ، لذا فإن القدرة على تحديث الجدول مع Ajax ستكون مثالية.

لقد أجريت بحثًا سريعًا على DO ولا يبدو أن هناك أي وحدات تلتصق على الفور. أيمتلك أى أحد خبرة فى هذا؟

هل كانت مفيدة؟

المحلول

لا ينبغي أن يكون من الصعب عمل وحدة مخصصة لهذا الغرض.

الاستعلام الذي تديره وحدة الإحصائيات هو:

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 أو جعل أي عنصر تحكم تريد ، يجب أن تعود الوظيفة بشكل صحيح أو خطأ. تحتاج أيضًا إلى إنشاء حدث Ajax مع معرف العقدة في الإعداد الخاص بك ، ولكن لا ينبغي أن يكون ذلك صعبًا جدًا أيضًا.

تحتاج إلى ضرب عنوان URL custom/ajax/2 لتحديث العقدة مع المعرف 2 وما إلى ذلك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top