Рейтинг:0

Передайте значение через URL в форму редактирования узла и используйте его для перенаправления после сохранения узла.

флаг cn

У меня есть узел, который включает в себя серию встроенных представлений.При отображении мне нужно передать значение через аргументы URL (http://example.org/node/x?id=y), чтобы представления могли получать соответствующую информацию. Пользователь должен иметь возможность редактировать этот узел, но когда он сохраняет и возвращается к узлу, он теряет идентификатор = у часть и отображение неполное.

я знаю, что могу использовать крючок_form_alter() для перенаправления, но я не могу понять, как я могу перенаправить после сохранения узла с использованием этого аргумента URL?

gmak avatar
флаг cn
@apaderno - Спасибо, что отредактировали мой пост, чтобы внести ясность.
флаг in
Какую версию Drupal вы используете?
gmak avatar
флаг cn
Я использую Друпал 9
Рейтинг:0
флаг us

С использованием крючок_form_alter(), вы можете добавить обработчик отправки, который устанавливает перенаправление. Код обработчика отправки будет похож на следующий.

функция mymodule_node_edit_submit (массив и $ форма, FormStateInterface $ form_state) {
  $node = $form_state->getFormObject()->getEntity();
  $id = \Drupal::request()->query->get('id');
  $form_state->setRedirect('entity.node.canonical', ['node' => $node->id()], [query => ['id' => $id]]);
}

Код для hook_form_BASE_FORM_ID_alter() будет просто следующим.

функция mymodule_form_node_form_alter(&$form, FormStateInterface $form_state) {
  $node = $form_state->getFormObject()->getEntity();

  // Поскольку этот хук вызывается для каждого узла, проверьте его тип содержимого.
  if ($node->getType() == 'интересующий вас тип контента') {
    $form['actions']['submit']['#submit'][] = 'mymodule_node_edit_submit';
  }
}

hook_form_FORM_ID_alter() реализация должна называться mymodule_form_node_<content_type_machine_name>_alter(). (Заменять моймодуль с именем машины модуля, <content_type_machine_name> с именем машины типа контента.) В этом случае, поскольку хук вызывается только для типа контента, ему не нужно проверять тип контента узла перед добавлением обработчика отправки.

gmak avatar
флаг cn
Что-то не работает. Если мой URL-адрес ```http://example.org/node/123?id=57```, после отправки формы он перенаправляется на ```http://example.org/node/123?id ```. Таким образом, кажется, что параметр запроса id не добавляется. Если я делаю ```dpm($id)``` в любой из функций, он отображается как NULL, что заставляет меня думать, что запрос не перехватывается из исходного узла. Я что-то пропустил?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.