ফর্ম জমা দেওয়ার পরে কীভাবে কোনও পৃষ্ঠায় পুনর্নির্দেশ করবেন


24

আমার একটি কাস্টম মডিউল রয়েছে যা একটি ফর্ম প্রদর্শন করে।

ফর্মটি জমা দেওয়ার পরে, আমি ব্যবহারকারীকে একটি ভিন্ন পৃষ্ঠাতে পুনর্নির্দেশ করতে চাই।

আমি এটা কিভাবে করবো?

উত্তর:


31

জমা হ্যান্ডলারে আপনি করেন do

ড্রুপাল 7:

$form_state['redirect'] = 'url';

ড্রুপাল 8:

$form_state->setRedirect('route', $args, $options);
$form_state->setRedirectUrl(\Drupal\Core\Url);

এটি করার কোনও বিকল্প উপায় আছে? আমাকে যে ফর্মগুলি পুনঃনির্দেশ করতে হবে সেগুলি তার নিজের # সাবমিট হ্যান্ডলারের সাথে তৈরি করা হয়েছে (জমা দেওয়ার হ্যান্ডলারগুলি আমার কাস্টম মডিউলটিতে রাখেনি), সুতরাং আমার কোডটিতে অ্যাক্সেস নেই।
কার্লোস মুইজ

@ চার্লি আপনার নিজস্ব যুক্ত করতে form_alter ব্যবহার করুন।
googletorp

@Charlie যদি আপনার জন্য প্রধানত একটি লিঙ্কের মাধ্যমে প্রবেশযোগ্য, URL- এ একটি গন্তব্য প্যারামিটার করা: /my-form?destination=node/123
tostinni

ডি 7-তে কাজ করছেন না, তবে আমি এমন কিছু পেয়েছি যা করে। নীচে আমার বার্তা পরীক্ষা করুন।
ইগনাসিও সেগুরা পোস্টটিগো

আমি কেবল ডি 7 এর উত্তর দেওয়ার জন্য ধন্যবাদ বলতে চাই, তারপরে 5 বছর পরে ফিরে এসে ডি 8 এর উত্তর আপডেট করার জন্য। <3
পিঁপড়া

17

এটি লক্ষ্য করা উচিত যে এখানে বেশ কয়েকটি ট্রিগার রয়েছে যা একটি পুনঃনির্দেশকে আটকাতে পারে:

  • $form_state['redirect'] === FALSE: যদি সেট করা থাকে তবে ফর্ম বিল্ডার ফাংশন বা ফর্মের বৈধতা / জমা হ্যান্ডলার কোনও ব্যবহারকারীকে পুনঃনির্দেশিত করতে চায় না, যার অর্থ হল যে অনুরোধ drupal_goto()করা হয়নি। বেশিরভাগ ফর্মের জন্য, পুনর্নির্দেশের যুক্তি $form_state['redirect']অপরিজ্ঞাত বা মিথ্যা কিনা তা নির্বিশেষে একই হবে । তবে, যদি এটি সংজ্ঞায়িত না হয় এবং বর্তমান অনুরোধটিতে একটি 'গন্তব্য' ক্যোয়ারী স্ট্রিং রয়েছে, drupal_goto()পরিবর্তে সেই প্রদত্ত গন্তব্যটিতে পুনর্নির্দেশ করা হবে। শুধু সেটিং $form_state['redirect']করার FALSEকোনো ফেরৎ প্রতিরোধ করবে।
  • $form_state['no_redirect'] === TRUE: সেট করা থাকলে, কলব্যাক যা মূলত ফর্মটি তৈরি করেছিল তাতে কোনও পুনঃনির্দেশকে স্পষ্টভাবে মঞ্জুরি দেয় না, এর মধ্যে পুনঃনির্দেশ মান নির্বিশেষে $form_state['redirect']। উদাহরণস্বরূপ, কোনও পুনর্নির্দেশ রোধ করতে একটি এজেএক্স কলব্যাকে ফর্ম তৈরি করার সময় ajax_get_form()সংজ্ঞা দেয় $form_state['no_redirect']$form_state['no_redirect']ফর্ম বিল্ডার ফাংশন বা ফর্ম বৈধকরণ / জমা হ্যান্ডলারগুলি দ্বারা পরিবর্তন করা উচিত নয়।
  • $form_state['programmed'] === TRUE: মানে ফর্ম জমা দেওয়ার মাধ্যমে সাধারণত অনুরোধ করা drupal_form_submit()হত, সুতরাং যে কোনও পুনর্নির্দেশটি হ'ল স্ক্রিপ্টটি ভেঙে ফেলবে drupal_form_submit()
  • $form_state['rebuild'] === TRUE: এর অর্থ ফর্মটি পুনঃনির্দেশ ছাড়াই পুনর্নির্মাণ করা দরকার।

7

ড্রুপাল 7 এর জন্য, আমি এটি একটি কাস্টম মডিউলে চেষ্টা করেছি এবং এটি কাজ করে। এটি একটি থিম ব্যবহার করা যেতে পারে:

function my_theme_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'contact_site_form') {
$form['#submit'][] = 'contact_form_submit_handler';
}
}

function contact_form_submit_handler(&$form, &$form_state) {
$form_state['redirect'] = 'thank-you-page-alias';
}

বিটিডাব্লু, আমি এই স্নিপেটটি এখানে পেয়েছি: https://gist.github.com/postrational/5768796


4

ড্রুপাল 8 এ একটি বাহ্যিক URL এ পুনঃনির্দেশ করতে, TrustedRedirectResponseনিম্নোক্ত কোড হিসাবে ক্লাসটি ব্যবহার করুন ।

$response = new TrustedRedirectResponse('http://google.co.in');
$form_state->setResponse($response);

যদি এটি সহায়তা করতে পারে তবে useকীওয়ার্ড এবং এর নাম use Drupal\Core\Routing\TrustedRedirectResponse;
স্থানটি

2

ডি 8 এ আমি এটি পছন্দ করেছি (তবে এটি কাজ করবে না ... নীচে দেখুন):

/**
* Implements hook_form_FORM_ID_alter().
*/
function MYMODULE_form_FORM_ID_form_alter( array &$form, FormStateInterface $form_state, $form_id ) {

   // Force redirect to "/thankyou" page
   $url = "/thankyou";
   $path = \Drupal::service('path.alias_manager')->getPathByAlias($url);
   if(preg_match('/node\/(\d+)/', $path, $matches)) {
     $form_state->setRedirect('entity.node.canonical',
       array('node' => $matches[1])
     );    
   }

}

/ সম্পাদনা

আমি অনুপস্থিত ছিল যে মডিউলটি জমা দেওয়ার পরে setRedirect / setRedirectUrl কাজ করে, সুতরাং এটি ডি 8-তে আমার কার্যনির্বাহী সমাধান:

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MYMODULE_form_FORM_ID_form_alter( array &$form, FormStateInterface $form_state, $form_id ) {
  $form['actions']['submit']['#submit'][] = 'MYFORM_redirect_handler';
}

function MYFORM_redirect_handler($form, FormStateInterface $form_state) {
  // Force redirect to "/sent"
  $dest_url = "/sent";
  $url = Url::fromUri('internal:' . $dest_url);
  $form_state->setRedirectUrl( $url );
}

আশা করি এটি সাহায্য করতে পারে


1

ড্রুপাল 7 এর জন্য আপনি যদি প্যারামের মতো ইউআরএলটিতে পুনঃনির্দেশ করতে চানsomeurl?param1=1&param2=2

$query = array(
  'param1' => '1',
   'param2' => '2',
 );
$form_state['redirect'] = array(
    'someurl',
    array(
      'query'    => $query,
      'fragment' => 'hash_fragment',
    ),
  );
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.