Điểm:0

Mô-đun Linkit - Trỏ thuộc tính tiêu đề của liên kết tới một trường tùy chỉnh. Móc có sẵn?

lá cờ us

Hiện tại các mô-đun liên kết cung cấp liên kết Tiêu đề thuộc tính bằng cách kéo của nút liên quan Tiêu đề cánh đồng.

Chúng tôi muốn nó trỏ đến một trường khác trong nút.

Làm thế nào chúng ta có thể đạt được điều này?

tôi nhìn vào Trình chỉnh sửa mô-đun Liên kết nâng cao, nhưng tôi cần điều này tự động và trường tùy chỉnh của tôi thay đổi dựa trên loại nội dung.

Có lẽ ai đó có một ý tưởng hook?

Điểm:3
lá cờ cn

Có (ít nhất) 2 lựa chọn:

  1. Viết plugin bộ lọc tùy chỉnh, dựa trên plugin đó LinkitFilter plugin đi kèm với mô-đun Linkit. bên trong tiến trình() phương thức, trong đó tiêu đề hiện đang được đặt, hãy giới thiệu logic của riêng bạn để đặt trường tiêu đề thay vì trường hiện có $entity->nhãn().

    Phương pháp này có lợi ích là tự động cập nhật khi tiêu đề của nút được tham chiếu thay đổi, nhưng điều đó có nghĩa là bạn sẽ phải duy trì bộ lọc của mình cùng với các bản phát hành của mô-đun Linkit. Các tiến trình() không chỉ đặt tiêu đề và các tính năng/sửa lỗi mới trong mô-đun sẽ cần được tích hợp vào mã của bạn.

  2. Thay đổi biểu mẫu hộp thoại liên kết (giống như Liên kết nâng cao của Trình chỉnh sửa thực hiện) và đưa tiêu đề vào phần đánh dấu trong khi nó vẫn ở trong trình chỉnh sửa. Phương pháp này dễ dàng hơn một chút và ít bảo trì hơn, nhưng Tiêu đề thuộc tính sẽ không cập nhật khi tiêu đề nút. Nó sẽ chỉ cập nhật khi biểu mẫu hộp thoại liên kết được lưu lại.

    Nếu điều đó có thể chấp nhận được, thì đây là một ví dụ sơ bộ nhưng hiệu quả để bắt đầu:

    sử dụng Drupal\Core\Form\FormStateInterface;
    sử dụng Drupal\node\NodeInterface;
    
    function custom_module_form_editor_link_dialog_alter(&$form, FormStateInterface $form_state, $form_id) {
      array_unshift($form['#validate'], '_custom_module_link_dialog_validate');
    }
    
    function _custom_module_link_dialog_validate(mảng &$form, FormStateInterface $form_state) {
      $attributes = $form_state->getValue('attributes');
    
      if (isset($attributes['data-entity-type']) && $attributes['data-entity-type'] == 'node') {
        $node = \Drupal::service('entity.repository')
          ->loadEntityByUuid('nút', $attributes['data-entity-uuid']);
        if ($node instanceof NodeInterface) {
          $override_title = '';
          switch ($node->getType()) {
            trường hợp 'trang':
              $override_title = $node->field_title_override->value;
              nghỉ;
            trường hợp 'foo':
              //...
              nghỉ;
          }
          nếu (strlen($override_title)) {
            $form_state->setValue(['attributes', 'title'], $override_title);
          }
        }
      }
    }
    
lá cờ us
Cảm ơn vì những điều này!
lá cờ us
Cảm ơn vì những điều này! Và để chỉnh sửa câu hỏi của tôi để làm cho nó rõ ràng hơn. Chúng tôi sẽ cần điều này để chỉ áp dụng trên giao diện người dùng. Và không phải tất cả các loại nội dung sẽ có trường này. Có móc nối nào trong mô-đun Linkit cho phép bộ lọc kiểm tra xem nút có tồn tại một trường nhất định và điền và thay thế nó một cách nhanh chóng ở giao diện người dùng không?
lá cờ cn
Không, thật không may, hiện tại nó được mã hóa cứng ở giữa phương pháp xử lý. Bạn sẽ cần sao chép toàn bộ bộ lọc cho phương pháp đó

Đă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.