it-swarm.asia

استخدام jQuery للتواصل مع Drupal 7 عبر AJAX

لقد تعلمت كيفية استخدام AJAX مع Drupal 7. أعرف بالفعل كيفية استخدام السمة '#ajax' مع نموذج وأيضًا كيفية استخدم فئة "use-ajax" مع رابط.

لدي شريط تمرير لطيف jQuery على صفحتي ينبعث فيه حدث jQuery (يسمى "الشريحة") في كل مرة ينتقل فيها شريط التمرير إلى صورة جديدة. يحتوي الحدث أيضًا على رقم الشريحة الذي سنعرضه. يمكنني ربط الحدث باستخدام jQuery مثل هذا:

$('.slider').bind('slide', function(e, data) { alert(data.slide); });

سيؤدي ذلك إلى ظهور تنبيه يظهر الشريحة الحالية. بدلاً من ذلك ، أريد إجراء مكالمة AJAX مكالمة باستخدام Drupal 7's AJAX وتمرير رقم الشريحة الحالي إلى Drupal.

لقد كنت أبحث عن إجابة وأعتقد أنه قد يكون لها علاقة بكائن Drupal.ajax DOM لكني لست متأكدًا.

5
darkadept

أفترض أنك تريد عرض بعض البيانات عند تحريك شريط التمرير.

الطريقة التي أقوم بها هي دون استخدام السمة "#ajax".

نفذ المكالمة AJAX المكالمة ، وأرسل قيمة شريط التمرير كما POST المتغير إلى '/ foo/ajax':

    jQuery('#slider').slider({
            // Define your slider (min, max etc)
            ...
            // Add event handler
            change: function(event, ui) {
                jQuery.ajax({
                    type: 'POST',
                    url: '/foo/ajax',
                    dataType: 'json',
                    success: ajaxCompleted,
                    // Might want to use 'ui' instead of jQuery('#slider').
                    data: 'slider_value=' + jQuery('#slider').slider('values', 0);
                });
            }
    });

اصنع عنصر قائمة يسمى عندما يتحرك شريط التمرير:

function foo_menu() {
  ...
  $items['foo/ajax'] = array(
    'title' => t('foo AJAX'),
    'type' => MENU_CALLBACK,
    'page callback' => 'foo_ajax',
    'access arguments' => array('access content'),
  );
  ...
  return $items;
}

تنفيذ استدعاء صفحة foo_ajax:

function foo_ajax () {
  // Retrieve the slider value
  $slider_value = (int)$_POST['slider_value'];

  // Get some id's from the foo table
  $result = db_query('SELECT id FROM {foo} WHERE value = :value', array(':value' => $slider_value));
  $data = array();
  foreach ($result as $row) {
    // Do something with data
    // Parse to json

    $data[] = $row->id;
  }

  // Return json
  drupal_json_output($data)
}

تنفيذ ajaxCompleted (ضمن جافا سكريبت):

function ajaxCompleted () {
    // Parse Json
    // Add some stuff to your DOM.
}
19
Bart

إذا كنت أفهم بشكل صحيح ، فأنت بحاجة إلى إعداد مسار Drupal مع إعادة استدعاء الصفحة إلى أي وظيفة PHP ستتعامل مع بيانات شريط التمرير. ثم قم فقط بإجراء مكالمة AJAX على حدث الشريحة. شيء من هذا القبيل:

$('.slider').bind('slide', function(e, data) {
 var href = path/to/your/drupal/handler;

 $.ajax({
  type: "POST",
  url: href,
  data: {slide: data.slide},
 });

});

بهذه الطريقة يمكنك "POST" بيانات شريط التمرير إلى PHP وجعل وظيفة رد الاتصال تأخذ البيانات كحجة وتقوم بكل ما يجب القيام به من هناك. اقرأ عن وظيفة .AJAX $ jquery لمزيد من الخيارات لما يمكنك القيام به مع بيانات الإرجاع ، إلخ

تحرير: نجاح شخص نشر مثالا أكثر شمولا لنفس المفهوم في نفس الوقت. بالتأكيد تحقق من حله لمزيد من التفاصيل!

1
mattacular