Рейтинг:0

Как передать значение поля узла в качестве аргумента представления в другое поле ссылки на сущность?

флаг cn

Проблема кажется простой, но я не могу получить документацию по ней.

У меня есть тип контента с двумя раскрывающимися полями: field_company в котором перечислены термины таксономии и field_protocol который ссылается на представление ссылочного типа сущности.

Я хочу пройти field_company ценность для field_protocol в качестве аргумента просмотра, чтобы при выборе компании список протоколов автоматически фильтровался через AJAX. Я добавил обратный вызов AJAX, чтобы обновить форму узла с полем field_company. Я не знаю, как передать значение поля и будет ли это значение фильтровать представление с помощью контекстного фильтра.

Скриншот

Рейтинг:1
флаг cn

Способ, которым я думал обновить раскрывающийся список поля узла, не сработает. Это следует делать таким образом:

https://codimth.com/blog/web/drupal/dependent-select-dropdowns-using-ajax-node-addedit-form-drupal-8-9

<?php

используйте Drupal\Core\Form\FormStateInterface;
используйте Drupal\Core\Url;

/**
 * Реализует hook_form_alter().
 */
функция MODULENAME_form_alter(&$form, FormStateInterface $form_state, $form_id)
{
  если ($form_id == 'node_article_form' || $form_id == 'node_article_edit_form') {

    //добавляем оболочку для выбора 2
    $form['field_select2']['#prefix'] = '<div id="select2-wrapper">';
    $form['field_select2']['#suffix'] = '</div>';

    // добавляем ajax для выбора 1
    $form['field_select1']['виджет']['#ajax'] = [
      'обратный вызов' => 'callback_field_select1_trigger',
      'обертка' => 'выбор2-обертка',
      'событие' => 'изменить',
      'прогресс' => [
        'тип' => 'пульсирующий',
        'message' => t('Извлечение контента...'),
      ],
    ];

    //выбираем 2 варианта в форме редактирования
    $field_select1_value = $form_state->getValue('field_select1');
    если ($form_id == 'node_article_edit_form' && !$field_select1_value) {
      $field_select1_edit_value = isset($form['field_select1']['виджет']['#default_value'][0]) ? $form['field_select1']['виджет']['#default_value'][0] : ноль;
      $form['field_select2']['виджет']['#options'] = getSelect2Options($field_select1_edit_value);
    }

  }
}

/**
 * @param массив $form
 * @параметр $form_state
 * @возврат смешанный
 */
функция callback_field_select1_trigger (массив $ form, $ form_state)
{
  $field_select1_value = $form_state->getValue('field_select1');
  если (!пусто($field_select1_value)) {
    $select1_value = $field_select1_value[0]['target_id'];
    $form['field_select2']['виджет']['#options'] = getSelect2Options($select1_value);
  } еще {
    $form['field_select2']['widget']['#options'] = getAllSelect2Options();
  }
  возврат $form['field_select2'];
}


/**
 * @параметр $select1_value
 * @возвратный массив
 */
функция getSelect2Options($select1_value)
{
  $query = \Drupal::entityQuery('taxonomy_term');
  $query->условие('vid', "select2_term");
  $query->условие('field_select1.0.target_id', $select1_value);
  $tids = $запрос->выполнить();
  $terms = \Drupal\taxonomy\Entity\Term::loadMultiple($tids);
  $опции = [];
  $options['_none'] = t('- Любой -');
  foreach ($terms как $key => $term) {
    $options[$key] = $term->имя->значение;
  }
  вернуть $options;
}


/**
 * @возвратный массив
 */
функция getAllSelect2Options()
{
  $query = \Drupal::entityQuery('taxonomy_term');
  $query->условие('vid', "select2_term");
  $tids = $запрос->выполнить();
  $terms = \Drupal\taxonomy\Entity\Term::loadMultiple($tids);
  $опции = [];
  $options['_none'] = t('- Любой -');
  foreach ($terms как $key => $term) {
    $options[$key] = $term->имя->значение;
  }
  вернуть $options;
}
// пример, как получить параметры, если select 1 - это несколько полей
$selectedItems = [];
$default_values ​​= $form['field_select1']['виджет']['#default_value'];
если ($ default_values ​​!= NULL) {
  foreach ($default_values ​​как $key => $value) {
    если ($значение!= 0) {
      $selectedItems[$value] = $value;
    }
  }
}
если (количество ($ вкладка) > 0) {
  $form['field_select2']['widget']['#options'] = getSelect2Options($selectedItems);
} еще {
  $form['field_select2']['widget']['#options'] = getAllSelect2Options();
}

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

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