नोड सेव या डिलीट करने के बाद कस्टम पेज पर रीडायरेक्ट कैसे करें?


10

जो मैं करने की कोशिश कर रहा हूं वह काम नहीं करता है, मैं अभी भी / नोड / {आईडी} पर पुनर्निर्देशित हो जाता हूं:

function hook_form_alter(&$form, $form_state, $form_id) {
  $form['actions']['submit']['#submit'][] = 'callback_set_redirect';
}
function callback_set_redirect($form, FormStateInterface $form_state) {
  $form_state->setRedirect('custom.landing.page');
}

2
यह वही है जो मैंने /core/modules/node/src/NodeForm.php में पाया हैIf saving is an option, privileged users get dedicated form submit buttons to adjust the publishing status while saving in one go. @todo This adjustment makes it close to impossible for contributed modules to integrate with "the Save operation" of this form. Modules need a way to plug themselves into 1) the ::submit() step, and 2) the ::save() step, both decoupled from the pressed form button.
olsav

1
आप [ drupal.org/project/rulesatalog(Rules) मॉड्यूल का उपयोग कर सकते हैं ।
सुमित अग्रवाल

1
क्या आप सुनिश्चित हैं कि आपका कस्टम सबमिट फ़ंक्शन भी कहा जाता है?
इल

1
यह भी हो सकता है कि कोई अन्य सबमिट फ़ंक्शन बाद में आपके कस्टम रीडायरेक्ट को ओवरराइड करे।
इल

जवाबों:


7

मूल रूप से कोड अकेले कार्रवाई प्रस्तुत करने के लिए काम करेगा, लेकिन ड्रुपल नोड सेव फॉर्म में कई क्रियाएं हैं, मुझे लगता है कि आपने व्यवस्थापक के रूप में लॉग इन किया होगा और यह कोशिश कर रहा होगा, फिर नीचे दिए गए कोड का पालन करें।

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

use Drupal\Core\Form\FormStateInterface;

//hook_form_alter
function hook_form_alter(&$form, $form_state, $form_id) {
  foreach (array_keys($form['actions']) as $action) {
    if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
      $form['actions'][$action]['#submit'][] = 'callback_submit';
    }
  }
}


function callback_submit($form, FormStateInterface $form_state) {
  $form_state->setRedirect('custom.page');
}

4

Hook_form_alter का उपयोग करते हुए, आपको दो काम करने होंगे

1) सुनिश्चित करें कि यह एक नोड फॉर्म 2 है) प्रत्येक सबमिट बटन पर एक कस्टम सबमिट हैंडलर जोड़ें।

function mymodule_form_alter(&$form, FormStateInterface $form_state, $form_id) {

  if (isset($form['#entity_type']) && $form['#entity_type'] == 'node') {
    foreach (array_keys($form['actions']) as $action) {
      if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
        $form['actions'][$action]['#submit'][] = 'mymodule_node_form_submit';
      }
    }
  }
}

फिर सबमिट फ़ंक्शन के लिए, आप जो भी तर्क चाहते हैं उसका उपयोग कर सकते हैं। आप NodeForm :: save के साथ तुलना कर सकते हैं, जहां यह आपको या तो कैनोनिकल नोड पेज पर या वर्तमान उपयोगकर्ता की एक्सेस अनुमतियों के आधार पर फ्रंट पेज पर भेजता है।

यदि आप इस व्यवहार को बदलना चाहते हैं ताकि यह वर्तमान नोड फॉर्म पर बना रहे, तो आप ऐसा कर सकते हैं:

function mymodule_node_form_submit($form, FormStateInterface $form_state) {
  $node = $form_state->getFormObject()->getEntity();
  if ($node->id()) {
    if ($node->access('edit')) {
      $form_state->setRedirect(
        'entity.node.edit_form',
        ['node' => $node->id()]
      );
    }
    else {
      $form_state->setRedirect('<front>');
    }
  }
}

यदि आप अपने कस्टम लैंडिंग पृष्ठ का उपयोग करना चाहते हैं, तो आप अपने द्वारा पहले से उपयोग किए जा रहे कोड के साथ पुनर्निर्देशित करें:

$form_state->setRedirect('custom.landing.page');

ध्यान दें कि जब "गंतव्य" $ _GET पैरामीटर है, जैसे कि / व्यवस्थापक / सामग्री पृष्ठ पर यह ओवरराइड नहीं करेगा।

गंतव्य पैरामीटर को / व्यवस्थापक / सामग्री पृष्ठ से निकालने के लिए, आप उस दृश्य फ़ील्ड में "सामग्री: संचालन लिंक (संचालन)" के तहत "गंतव्य" चेकबॉक्स को अनचेक करना चाहेंगे।

यहां छवि विवरण दर्ज करें


1

मुझे सिम्फनी पुनर्निर्देशन का उपयोग करके सफलता मिली:

function callback_set_redirect($form, FormStateInterface $form_state) {
  $url = Url::fromRoute("custom.landing.page")->toString();
  $response = new RedirectResponse($url);
  $response->send();
}

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

मेरे लिए भी काम किया।
इंसास

0

मैं मूल कोड के साथ कुछ भी गलत नहीं पा सकता हूं, इसलिए शायद कुछ और है। यह मेरे लिए ठीक काम करता है।

हालांकि, custom.landing.pageएक परिभाषित मार्ग और पैरामीटर होना चाहिए (यदि कोई हो) को इस तरह से पारित करने की आवश्यकता है:

  $form_state->setRedirect("custom.landing.page", [
    'parameter1' => 42,
  ]);

देखें FormState :: setRedirect () जानकारी के लिए।


0

मैं हमेशा इस कार्यक्षमता के लिए नोड सेव रिडायरेक्ट मॉड्यूल का उपयोग करता हूं । यह एक सामग्री प्रकार के लिए एक विकल्प जोड़ता है जो कहता है कि "नई सामग्री को बचाने के बाद क्या करना है"।

यह क्या है?

यह मॉड्यूल सामग्री का एक टुकड़ा सहेजने के बाद उपयोगकर्ता को लेने के लिए स्थान निर्दिष्ट करने की एक विधि प्रदान करता है।


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