नोड में जोड़े जाने या संपादित किए जाने के बाद एक कस्टम पृष्ठ पर पुनर्निर्देशित करें


15

उपयोग करते हुए 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');
  }
}

"इसके लिए एक मॉड्यूल है": नोड गंतव्य ( drupal.org/project/node_destination ) लेकिन यह केवल D6 के लिए उपलब्ध है। शायद इसे अनुकूलित किया जा सकता है।
Benj

जवाबों:


16
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 फ़ंक्शन में इसके नाम में हाइफ़न नहीं हो सकते हैं।
  • आईडी ID हुक_फॉर्म_लेटर () , हुक_फॉर्म_बीने_फ्रेम_आईडी_लेटर () , और हुक_फॉर्म_फॉर्म_एडलेटर () के कार्यान्वयन के लिए पारित किया गया है । hook_form_FORM_ID_alter()वास्तव में इसकी आवश्यकता नहीं है, क्योंकि इसे एक विशिष्ट रूप के लिए कहा जाता है, जबकि अन्य दो हुक एक से अधिक रूपों के लिए लगाए जाते हैं।
  • पहला कार्य हुक_फॉर्म_नए_से_फोर्म_आईडी_अल्टर () का कार्यान्वयन है ; इस स्थिति में, बेस फॉर्म आईडी "नोड_फॉर्म" है जो नोड एडिट फॉर्म के लिए आधार फॉर्म है।
  • नोड एडिट फॉर्म में सम्‍मिलित है $form['#node'], जो कि एडिट की जा रही वस्‍तु के लिए नोड ऑब्जेक्ट है; "कस्टम" उस सामग्री प्रकार के लिए संक्षिप्त आईडी है जिसे आप नोड संपादित करने के बाद उपयोगकर्ताओं को पुनर्निर्देशित करना चाहते हैं।
  • फेरबदल $form_state['redirect']से hook_form_alter()कोई असर नहीं करता है; इसे सबमिशन हैंडलर से सेट करना होगा।

इसके लिए धन्यवाद। ध्यान दें कि &में function custom_node_submit($form, &$form_state) {बहुत महत्वपूर्ण है। अन्यथा आप राज्य को संदर्भ के रूप में पारित नहीं कर रहे हैं और आपके द्वारा मैन्युअल रूप से संपादित किए जाने वाले संपादन प्रभावित नहीं करेंगे।
ब्रैम

9

यह कोड एक Drupal 7 साइट पर काम करता है।

/**
 * 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';
}

आप किस उत्तर का उल्लेख कर रहे हैं # 4?
Елин Й

यह मेरे लिए काम क्यों नहीं कर रहा है? मैं एक ही कोड का उपयोग कर रहा हूं
रूबी

अपना कैश @ साफ़ किया?
कोडरमा

मौजूदा नोड्स के लिए, आप पहले गंतव्य को अनसेट करना सुनिश्चित करते हैं, जो सामान्य रूप से URL में तब जोड़ा जाता है जब आप पृष्ठ पर संपादन बटन पर क्लिक करते हैं admin/content: drupal.stackexchange.com/a/192271/15055
१ym

4

यह सेटिंग के द्वारा किया जा सकता है $form_state['redirect'], उदाहरण के लिए निम्न पंक्तियों में से किसी एक का उपयोग करके।

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

यह वही दलीलें हैं जिन्हें आप पास करेंगे drupal_goto()


प्रतिक्रिया @Shoaib नवाज के लिए धन्यवाद। मैंने $ form_state ['redirect'] को hook_form_alter हुक के साथ आउट लक के साथ जोड़ा।
सिट्रिकगुई

मेरे जीवन के लिए, मुझे कहीं भी प्रभावी बनाने के लिए $ form_state ['पुनर्निर्देशित] नहीं मिल सकता है।
Citricguy

यदि आप नोड जोड़ने या संपादित करने के बाद पुनर्निर्देशित करने का प्रयास करते हैं तो यह काम नहीं करेगा । क्यों देखने के लिए, नोड फॉर्म सबमिट पर एक नज़र डालें । TRUE का मूल्यांकन करने पर आप जो भी मान निर्दिष्ट करते हैं $form_state['redirect'], वह ओवरराइट हो जाएगा ($node->nid)
फ्री रेडिकल

2

यकीन नहीं होता है कि यह आपके लिए एक विकल्प है, लेकिन अगर यह एक सामग्री प्रकार है, तो आप नियम मॉड्यूल का उपयोग करके एक नियम को सेट करके या एक निश्चित सामग्री प्रकार के निर्माण के लिए ट्रिगर करके नियम का उपयोग करके इसे बहुत जल्दी प्राप्त कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.