Điểm:0

Làm cách nào để chuyển một giá trị trường nút làm đối số dạng xem sang trường tham chiếu thực thể khác?

lá cờ cn

Vấn đề có vẻ đơn giản, nhưng tôi không thể lấy bất kỳ tài liệu nào về vấn đề này.

Tôi có một loại nội dung với hai trường thả xuống: lĩnh vực_công ty trong đó liệt kê các thuật ngữ phân loại và trường_giao thức đang tham chiếu một dạng xem của loại tham chiếu thực thể.

tôi muốn vượt qua lĩnh vực_công ty có giá trị đối với trường_giao thức làm đối số dạng xem, để khi công ty được chọn, danh sách giao thức sẽ tự động được lọc qua AJAX. Tôi đã thêm một lệnh gọi lại AJAX để làm mới biểu mẫu nút với trường field_company. Tôi không biết cách chuyển giá trị trường và liệu giá trị này có lọc chế độ xem theo bộ lọc theo ngữ cảnh hay không.

ảnh chụp màn hình

Điểm:1
lá cờ cn

Cách tôi nghĩ để cập nhật danh sách thả xuống của trường nút sẽ không hoạt động. Điều này nên được thực hiện theo cách này:

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

<?php

sử dụng Drupal\Core\Form\FormStateInterface;
sử dụng Drupal\Core\Url;

/**
 * Triển khai hook_form_alter().
 */
hàm MODULENAME_form_alter(&$form, FormStateInterface $form_state, $form_id)
{
  if ($form_id == 'node_article_form' || $form_id == 'node_article_edit_form') {

    // thêm trình bao bọc để chọn 2
    $form['field_select2']['#prefix'] = '<div id="select2-wrapper">';
    $form['field_select2']['#suffix'] = '</div>';

    // thêm ajax để chọn 1
    $form['field_select1']['widget']['#ajax'] = [
      'gọi lại' => 'gọi lại_field_select1_trigger',
      'trình bao bọc' => 'select2-trình bao bọc',
      'sự kiện' => 'thay đổi',
      'tiến độ' => [
        'gõ' => 'đập',
        'tin nhắn' => t('Đang tìm nạp nội dung...'),
      ],
    ];

    // lấy 2 tùy chọn trong form chỉnh sửa
    $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] : null;
      $form['field_select2']['widget']['#options'] = getSelect2Options($field_select1_edit_value);
    }

  }
}

/**
 * @param mảng $form
 * @param $form_state
 * @return hỗn hợp
 */
hàm callback_field_select1_trigger(mảng $form, $form_state)
{
  $field_select1_value = $form_state->getValue('field_select1');
  if (!empty($field_select1_value)) {
    $select1_value = $field_select1_value[0]['target_id'];
    $form['field_select2']['widget']['#options'] = getSelect2Options($select1_value);
  } khác {
    $form['field_select2']['widget']['#options'] = getAllSelect2Options();
  }
  trả về $form['field_select2'];
}


/**
 * @param $select1_value
 * @return mảng
 */
hàm getSelect2Options($select1_value)
{
  $query = \Drupal::entityQuery('taxonomy_term');
  $query->condition('vid', "select2_term");
  $query->condition('field_select1.0.target_id', $select1_value);
  $tids = $query->execute();
  $terms = \Drupal\taxonomy\Entity\Term::loadMultiple($tids);
  tùy chọn $ = [];
  $options['_none'] = t('- Bất kỳ -');
  foreach ($terms as $key => $term) {
    $options[$key] = $term->name->value;
  }
  trả lại tùy chọn $;
}


/**
 * @return mảng
 */
hàm getAllSelect2Options()
{
  $query = \Drupal::entityQuery('taxonomy_term');
  $query->condition('vid', "select2_term");
  $tids = $query->execute();
  $terms = \Drupal\taxonomy\Entity\Term::loadMultiple($tids);
  tùy chọn $ = [];
  $options['_none'] = t('- Bất kỳ -');
  foreach ($terms as $key => $term) {
    $options[$key] = $term->name->value;
  }
  trả lại tùy chọn $;
}
// ví dụ về cách lấy tùy chọn nếu chọn 1 là nhiều trường
$sselectedItems = [];
$default_values ​​= $form['field_select1']['widget']['#default_value'];
nếu ($default_values ​​!= NULL) {
  foreach ($default_values ​​as $key => $value) {
    nếu ($giá trị != 0) {
      $sselectedItems[$value] = $value;
    }
  }
}
nếu (đếm($tab) > 0) {
  $form['field_select2']['widget']['#options'] = getSelect2Options($selectedItems);
} khác {
  $form['field_select2']['widget']['#options'] = getAllSelect2Options();
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.