Score:0

ฉันจะส่งค่าฟิลด์โหนดเป็นอาร์กิวเมนต์ดูไปยังฟิลด์อ้างอิงเอนทิตีอื่นได้อย่างไร

ธง cn

ปัญหาดูเหมือนง่าย แต่ฉันไม่สามารถหาเอกสารประกอบได้

ฉันมีประเภทเนื้อหาที่มีฟิลด์แบบเลื่อนลงสองฟิลด์: field_company ซึ่งแสดงรายการเงื่อนไขอนุกรมวิธานและ field_โปรโตคอล ซึ่งกำลังอ้างอิงมุมมองประเภทการอ้างอิงเอนทิตี

อยากสอบผ่าน field_company มูลค่าถึง field_โปรโตคอล เป็นอาร์กิวเมนต์มุมมอง ดังนั้นเมื่อเลือกบริษัทแล้ว รายการโปรโตคอลจะถูกกรองโดยอัตโนมัติผ่าน AJAX ฉันได้เพิ่มการโทรกลับ AJAX เพื่อรีเฟรชแบบฟอร์มโหนดด้วยฟิลด์ field_company ฉันไม่ทราบวิธีส่งค่าฟิลด์และค่านี้จะกรองมุมมองตามตัวกรองตามบริบทหรือไม่

ภาพหน้าจอ

Score: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') {

    // เพิ่ม wrapper เพื่อเลือก 2
    $form['field_select2']['#prefix'] = '<div id="select2-wrapper">';
    $form['field_select2']['#suffix'] = '</div>';

    // เพิ่ม ajax เพื่อเลือก 1
    $form['field_select1']['widget']['#ajax'] = [
      'callback' => 'callback_field_select1_trigger',
      'wrapper' => 'select2-wrapper',
      'เหตุการณ์' => 'เปลี่ยนแปลง',
      'ความคืบหน้า' => [
        'type' => 'throbber',
        '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']['widget']['#default_value'][0]) ? $form['field_select1']['widget']['#default_value'][0] : null;
      $form['field_select2']['widget']['#options'] = getSelect2Options($field_select1_edit_value);
    }

  }
}

/**
 * @param อาร์เรย์ $form
 * @param $form_state
 * @return ผสม
 */
ฟังก์ชัน callback_field_select1_trigger (อาร์เรย์ $form, $form_state)
{
  $field_select1_value = $form_state->getValue('field_select1');
  ถ้า (!empty($field_select1_value)) {
    $select1_value = $field_select1_value[0]['target_id'];
    $form['field_select2']['widget']['#options'] = getSelect2Options($select1_value);
  } อื่น {
    $form['field_select2']['widget']['#options'] = getAllSelect2Options();
  }
  ส่งคืน $form['field_select2'];
}


/**
 * @param $select1_value
 * @return อาร์เรย์
 */
ฟังก์ชัน getSelect2Options($select1_value)
{
  $query = \Drupal::entityQuery('taxonomy_term');
  $query->condition('วิดีโอ', "select2_term");
  $query->condition('field_select1.0.target_id', $select1_value);
  $tids = $query->execute();
  $terms = \Drupal\taxonomy\Entity\Term::loadMultiple($tids);
  $ตัวเลือก = [];
  $options['_none'] = t('-ใดๆ -');
  foreach (เงื่อนไข $ เป็น $key => $term) {
    $options[$key] = $term->name->value;
  }
  กลับตัวเลือก $;
}


/**
 * @return อาร์เรย์
 */
ฟังก์ชัน getAllSelect2Options()
{
  $query = \Drupal::entityQuery('taxonomy_term');
  $query->condition('วิดีโอ', "select2_term");
  $tids = $query->execute();
  $terms = \Drupal\taxonomy\Entity\Term::loadMultiple($tids);
  $ตัวเลือก = [];
  $options['_none'] = t('-ใดๆ -');
  foreach (เงื่อนไข $ เป็น $key => $term) {
    $options[$key] = $term->name->value;
  }
  กลับตัวเลือก $;
}
// ตัวอย่างวิธีรับตัวเลือกหากเลือก 1 เป็นหลายฟิลด์
$selectedItems = [];
$default_values ​​= $form['field_select1']['widget']['#default_value'];
ถ้า ($default_values ​​!= NULL) {
  foreach ($default_values ​​เป็น $key => $value) {
    ถ้า ($value != 0) {
      $selectedItems[$value] = $value;
    }
  }
}
ถ้า (นับ ($ แท็บ) > 0) {
  $form['field_select2']['widget']['#options'] = getSelect2Options($selectedItems);
} อื่น {
  $form['field_select2']['widget']['#options'] = getAllSelect2Options();
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา