it-swarm.asia

إعادة التوجيه إلى صفحة مخصصة بعد إضافة عقدة أو تحريرها

باستخدام hook_form_alter ، كيف يمكنني إعادة توجيه المستخدم إلى صفحة مخصصة بعد إنشاء أو تحرير عقدة بدلاً من العقدة التي تم إنشاؤها أو تحريرها؟

الرمز الحالي لـ hook_form_alter() هو الرمز التالي:

function custom_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'custom-node-form') {
    $form['actions']['submit']['#value'] = t('Add Entry');
    $form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
  }
}
14
Citricguy
function custom_form_node_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#node']->type == 'custom') {
    $form['actions']['submit']['#value'] = t('Add Entry');
    $form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
    $form['#submit'][] = 'custom_node_submit';
  }
}

function custom_node_submit($form, &$form_state) {
  $form_state['redirect'] = 'choose/your/path';
}

يعيد الرمز توجيه النموذج بشكل مستقل عن الزر الذي تم النقر عليه لإرسال النموذج. إذا كنت تريد إعادة توجيه نموذج فقط عند النقر على زر إرسال معين ، فيجب عليك استخدام الرمز التالي.

function custom_form_node_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#node']->type == 'custom') {
    $form['actions']['submit']['#value'] = t('Add Entry');
    $form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
    $form['actions']['submit']['#submit'][] = 'custom_node_submit';
  }
}

function custom_node_submit($form, &$form_state) {
  $form_state['redirect'] = 'choose/your/path';
}

  • لا يحتوي معرف النموذج على واصلات. معرف النموذج هو اسم الدالة PHP التي تنشئ النموذج (المعروف أيضًا باسم منشئ النموذج) ، ولا يمكن أن تحتوي الدالة PHP على الواصلات في اسمها.
  • يتم تمرير معرف النموذج إلى تطبيقات hook_form_alter () و hook_form_BASE_FORM_ID_alter () و hook_form_FORM_ID_alter () . hook_form_FORM_ID_alter() لا تحتاجها حقًا ، حيث يتم استدعاؤها لنموذج معين ، في حين يتم استدعاء الخطافين الآخرين لأكثر من نموذج واحد.
  • الوظيفة الأولى هي تنفيذ hook_form_BASE_FORM_ID_alter () ؛ في هذه الحالة ، معرف النموذج الأساسي هو "node_form" وهو النموذج الأساسي لنموذج تحرير العقدة.
  • يحتوي نموذج تحرير العقدة على $form['#node'] ، وهو كائن العقدة للكائن الذي يتم تحريره ؛ "مخصص" هو المعرف المختصر لنوع المحتوى الذي تريد إعادة توجيه المستخدمين بمجرد قيامهم بتحرير عقدة.
  • تبديل $form_state['redirect'] من hook_form_alter() ليس له أي تأثير ؛ يجب تعيينه من معالج التقديم.
16
kiamlaluno

يعمل هذا الرمز على موقع Drupal 7 site.

/**
 * Implements hook_form_alter()
 */

function custom_form_alter(&$form, &$form_state, $form_id) {    
  if ($form_id == 'article_node_form') {
    $form['actions']['submit']['#submit'][] = 'mysubmit_node_submit';
  }     
}

function mysubmit_node_submit($form, &$form_state) {
  $form_state['redirect'] = '/homepage';
}
9
sea26.2

يمكن القيام بذلك عن طريق تعيين $form_state['redirect'] ، على سبيل المثال باستخدام أحد الأسطر التالية.

$form_state['redirect'] = "some-internal-path";
$form_state['redirect'] = array($path, $options_array, $http_code);

إنها نفس الحجج التي ستمررها إلى drupal_goto() .

4
Shoaib Nawaz

لست متأكدًا مما إذا كان هذا خيارًا لك ، ولكن إذا كان هذا نوع محتوى ، فيمكنك تحقيق ذلك بسرعة كبيرة باستخدام وحدة القواعد عن طريق تعيين قاعدة ليتم تشغيلها عند التحديث أو إنشاء نوع محتوى معين.

2
Aaron Ortega