it-swarm.asia

كيفية ajaxify تقديم نموذج الويب في Drupal 7؟

لقد حاولت تغيير عرض نموذج الويب باستخدام hook_form_alter() و hook_node_view() في وحدة نمطية مخصصة بحيث يمكنني إضافة "#ajax" في مكان ما.

هل لدى أي شخص بالفعل بعض الخبرة في العمل مع نموذج الويب وأجاكس على D6 أو D7؟ أعتقد أن المنطق سيكون هو نفسه بالنسبة لـ D6 و D7 ثم مجرد تغييرات التنفيذ.

8
E. de Saint Chamas

وحدة اجاكس تعمل لي في Drupal 6.

مقابل Drupal 7:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
      // see if webform_client_form_ is in the form_id
      if(strstr($form_id, 'webform_client_form_')) {
        // get the nid so we can use it in the wrapper value
        $nid = $form['#node']->nid;
        // add the ajax properties to the submit button
        $form['actions']['submit']['#ajax'] = array(
          'callback' => 'mymodule_webform_js_submit',
          'wrapper' => 'webform-client-form-' . $nid,
          'method' => 'replace',
          'effect' => 'fade',
        );
      }
    }

function mymodule_webform_js_submit($form, $form_state) {
      // define the $sid variable (submission id from webform)
      $sid = $form_state['values']['details']['sid'];
      // if we have a sid then we know the form was properly submitted, otherwise, we'll just return the existing $form array
      if ($sid) {
        // first we have to load up the webform node object
        $node = node_load($form_state['values']['details']['nid']);
        // create an array up with the confirmation message, retreived from the webform node
        $confirmation = array(
          '#type' => 'markup',
          '#markup' => check_markup($node->webform['confirmation'], $node->webform['confirmation_format'], '', TRUE),
        );
        // return the confirmation message
        return $confirmation;
      }
      else {
        // return the form
        return $form;
      }
    }
8
Matthew Woodard

واحدة من أسهل الطرق إذا كنت تبحث عن ajaxify فقط نموذج معين سيكون لإضافة المكوّن الإضافي لنموذج jquery . انها جميلة إلى الأمام مباشرة.

أضف التعليمات البرمجية أدناه إلى وظيفة المعالجة المسبقة للصفحة في ملف template.php.

  1. أولاً قم بإضافة المكوّن الإضافي jquery مع التعليمات البرمجية أدناه.

    drupal_add_js (drupal_get_path ('theme'، 'your_theme'). "/js/jquery.form.js") ؛

  2. ثم أضف الكود التالي ، استبدل #your_form_ID بمعرف النموذج الخاص بك

    drupal_add_js ('

                (function($){ 
    $(document).ready(function() { 
    
                $("#your_form_ID").ajaxForm(function() { 
                    alert("Thank you for your comment!"); 
                }); 
    });     }(jQuery));;
    
           ', 'inline');
    

هذا كل ما أنجزته. ربما ترغب في التفكير في تحميل البرامج النصية فقط الصفحات التي تحتاجها.

0
esafwan