باستخدام 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');
}
}
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';
}
hook_form_FORM_ID_alter()
لا تحتاجها حقًا ، حيث يتم استدعاؤها لنموذج معين ، في حين يتم استدعاء الخطافين الآخرين لأكثر من نموذج واحد.$form['#node']
، وهو كائن العقدة للكائن الذي يتم تحريره ؛ "مخصص" هو المعرف المختصر لنوع المحتوى الذي تريد إعادة توجيه المستخدمين بمجرد قيامهم بتحرير عقدة.$form_state['redirect']
من hook_form_alter()
ليس له أي تأثير ؛ يجب تعيينه من معالج التقديم.يعمل هذا الرمز على موقع 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';
}
يمكن القيام بذلك عن طريق تعيين $form_state['redirect']
، على سبيل المثال باستخدام أحد الأسطر التالية.
$form_state['redirect'] = "some-internal-path";
$form_state['redirect'] = array($path, $options_array, $http_code);
إنها نفس الحجج التي ستمررها إلى drupal_goto()
.
لست متأكدًا مما إذا كان هذا خيارًا لك ، ولكن إذا كان هذا نوع محتوى ، فيمكنك تحقيق ذلك بسرعة كبيرة باستخدام وحدة القواعد عن طريق تعيين قاعدة ليتم تشغيلها عند التحديث أو إنشاء نوع محتوى معين.