নোড সংরক্ষণ বা মুছার পরে কীভাবে কাস্টম পৃষ্ঠায় পুনর্নির্দেশ সম্পাদন করা যায়?


10

আমি যা করার চেষ্টা করছি তা কাজ করে না, আমি এখনও / নোড / {আইডি to এ পুনঃনির্দেশিত হয়েছি:

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
আমি এটাই পেয়েছি / কোরআর 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.
মডিউলস /

1
আপনি [ drupal.org/project/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

হুক_ফর্ম_ল্টার ব্যবহার করে আপনার দুটি জিনিস করা দরকার

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

তারপরে সাবমিট ফাংশনটির জন্য, আপনি যা যুক্তি চান তা ব্যবহার করতে পারেন। আপনি নোডফর্ম :: সেভের সাথে তুলনা করতে পারেন, যেখানে এটি আপনাকে ক্যানোনিকাল নোড পৃষ্ঠায় বা বর্তমান ব্যবহারকারীর অ্যাক্সেস অনুমতিগুলির ভিত্তিতে প্রথম পৃষ্ঠায় প্রেরণ করবে।

আপনি যদি এই আচরণটি পরিবর্তন করতে চান যাতে এটি বর্তমান নোড ফর্মটিতে থাকে, আপনি এটি করতে পারেন:

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 পরামিতি থাকে, যেমন / অ্যাডমিন / সামগ্রী পৃষ্ঠায় over

/ প্রশাসক / সামগ্রী পৃষ্ঠা থেকে গন্তব্য প্যারামিটারটি সরাতে, আপনি সেই দর্শন ক্ষেত্রগুলিতে "সামগ্রী: অপারেশন লিঙ্কগুলি (অপারেশনস)" এর অধীনে "গন্তব্য" চেকবক্সটি নির্বাচন করতে পারবেন না।

এখানে চিত্র বর্ণনা লিখুন


1

সিমফনি রিডাইরেক্ট রেসপন্স ব্যবহার করে আমার সাফল্য ছিল:

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

আপনার কোনও প্রতিক্রিয়া ব্যবহার করা উচিত নয়, কারণ এটি যদি প্রয়োজন হয় তবে হওর মডিউলগুলি পুনঃনির্দেশের পরিবর্তনের অনুমতি দেয় না।
কিমলালুনো

আমার জন্যও কাজ করেছেন।
ইনসেসে

0

মূল কোডটিতে আমি কোনও ভুল খুঁজে পাচ্ছি না তাই অন্য কিছু সম্ভবত ভুল। এটা আমার জন্য ভালই কাজ করে।

তবে custom.landing.pageঅবশ্যই একটি সংজ্ঞায়িত রুট এবং প্যারামিটারগুলি (যদি থাকে তবে) এর মতো পাস করতে হবে:

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

দেখুন FormState :: setRedirect () বিস্তারিত জানার জন্য।


0

আমি এই কার্যকারিতার জন্য সর্বদা নোড সেভ রিডাইরেক্ট মডিউলটি ব্যবহার করি। এটি এমন একটি সামগ্রীর ধরণের বিকল্প যোগ করে যা "নতুন সামগ্রী সংরক্ষণের পরে কী করতে হবে" বলে says

এটা কি?

এই মডিউলটি কোনও বিষয়বস্তুর টুকরো সংরক্ষণ করার পরে ব্যবহারকারীকে নিতে একটি অবস্থান নির্দিষ্ট করার একটি পদ্ধতি সরবরাহ করে।


এই মডিউলটি এখনও দ্রুপাল 8 এ পুরোপুরি পোর্ট করা হয়নি।
dxvargas
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.