Puncte:0

Cum pot transmite o valoare a câmpului de nod ca argument de vizualizare către un alt câmp de referință de entitate?

drapel cn

Problema pare simplă, dar nu pot obține nicio documentație pentru ea.

Am un tip de conținut cu două câmpuri drop-down: field_company care enumeră termeni de taxonomie și field_protocol care face referire la o vizualizare a tipului de referință de entitate.

vreau să trec de field_company valoare pentru field_protocol ca argument de vizualizare, astfel încât atunci când compania este selectată, lista de protocoale este filtrată automat prin AJAX. Am adăugat un apel invers AJAX pentru a reîmprospăta formularul nodului cu câmpul field_company. Nu știu cum să transmit valoarea câmpului și dacă această valoare va filtra vizualizarea după filtru contextual.

captură de ecran

Puncte:1
drapel cn

Modul în care m-am gândit să actualizez meniul drop-down al câmpului nod nu va funcționa. Acest lucru ar trebui făcut în acest fel:

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

<?php

utilizați Drupal\Core\Form\FormStateInterface;
utilizați Drupal\Core\Url;

/**
 * Implementează hook_form_alter().
 */
funcția MODULENAME_form_alter(&$form, FormStateInterface $form_state, $form_id)
{
  if ($form_id == 'node_article_form' || $form_id == 'node_article_edit_form') {

    //adăugați un wrapper pentru a selecta 2
    $form['field_select2']['#prefix'] = '<div id="select2-wrapper">';
    $form['field_select2']['#suffix'] = '</div>';

    // adăugați ajax pentru a selecta 1
    $form['field_select1']['widget']['#ajax'] = [
      'callback' => 'callback_field_select1_trigger',
      'wrapper' => 'select2-wrapper',
      'eveniment' => 'schimbare',
      'progres' => [
        'type' => 'throbber',
        'message' => t('Se preiau continut...'),
      ],
    ];

    //se selectează 2 opțiuni în formularul de editare
    $field_select1_value = $form_state->getValue('field_select1');
    if ($form_id == 'node_article_edit_form' && !$field_select1_value) {
      $field_select1_edit_value = isset($form['field_select1']['widget']['#default_value'][0]) ? $form['field_select1']['widget']['#default_value'][0] : nul;
      $form['field_select2']['widget']['#options'] = getSelect2Options($field_select1_edit_value);
    }

  }
}

/**
 * @param matrice $form
 * @param $form_state
 * @return mixt
 */
funcția callback_field_select1_trigger(matrice $form, $form_state)
{
  $field_select1_value = $form_state->getValue('field_select1');
  dacă (!gol ($field_select1_value)) {
    $select1_value = $field_select1_value[0]['target_id'];
    $form['field_select2']['widget']['#options'] = getSelect2Options($select1_value);
  } altfel {
    $form['field_select2']['widget']['#options'] = getAllSelect2Options();
  }
  returnează $form['field_select2'];
}


/**
 * @param $select1_value
 * @return matrice
 */
funcția getSelect2Options($select1_value)
{
  $interogare = \Drupal::entityQuery('termen_taxonomie');
  $query->condition('vid', "select2_term");
  $query->condition('field_select1.0.target_id', $select1_value);
  $tids = $interogare->execute();
  $termi = \Drupal\taxonomie\Entitate\Term::loadMultiple($tids);
  $opțiuni = [];
  $options['_none'] = t('- Oricare -');
  foreach ($terms ca $key => $term) {
    $opțiuni[$cheie] = $term->nume->valoare;
  }
  returnează $opțiuni;
}


/**
 * @return matrice
 */
funcția getAllSelect2Options()
{
  $interogare = \Drupal::entityQuery('termen_taxonomie');
  $query->condition('vid', "select2_term");
  $tids = $interogare->execute();
  $termi = \Drupal\taxonomie\Entitate\Term::loadMultiple($tids);
  $opțiuni = [];
  $options['_none'] = t('- Oricare -');
  foreach ($terms ca $key => $term) {
    $opțiuni[$cheie] = $term->nume->valoare;
  }
  returnează $opțiuni;
}
// exemplu cum să obțineți opțiuni dacă selectați 1 este mai multe câmpuri
$selectedItems = [];
$default_values ​​= $form['field_select1']['widget']['#default_value'];
dacă ($default_values ​​!= NULL) {
  foreach ($default_values ​​ca $key => $value) {
    dacă ($valoare != 0) {
      $selectedItems[$value] = $valoare;
    }
  }
}
dacă (număr ($tab) > 0) {
  $form['field_select2']['widget']['#options'] = getSelect2Options($selectedItems);
} altfel {
  $form['field_select2']['widget']['#options'] = getAllSelect2Options();
}

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.