Làm cách nào để thêm chế độ xem cho loại thực thể?


7

Tôi muốn thêm chế độ xem cho loại thực thể cụ thể theo chương trình trong Drupal 8. Tôi nghĩ rằng tài liệu về chế độ xem cho Drupal 8 không được cung cấp như đã cung cấp cho Drupal 7 do đó tôi gặp phải vấn đề khi triển khai điều này. trong cốt lõi sẽ giúp. Cảm ơn

Cần phải làm gì nếu tôi muốn thêm chế độ xem cho nhiều thực thể?

Câu trả lời:


13

Chế độ xem là các thực thể cấu hình.

Giống như bất kỳ thứ gì khác là một thực thể cấu hình, rất đơn giản để đưa vào "mã": Đặt cấu hình mặc định. Tạo nó trong UI, thực hiện xuất cấu hình ( admin/config/development/configuration/single/export), sau đó đặt core.entity_view_mode.$entity_type.$view_mode.ymltệp vào config/installbên trong mô-đun của bạn.

Chế độ xem sau đó sẽ tự động được nhập và tạo khi mô-đun được cài đặt.

Lưu ý rằng sau đó nó không được mã hóa cứng, vì vậy người dùng có thể xóa nó. Nếu bạn muốn ngăn chặn điều đó, bạn có thể thực hiện hook_entity_view_mode_access()để từ chối xóa quyền truy cập vào thực thể của mình cho mọi người.

Theo mặc định, bạn sẽ gặp sự cố khi cài đặt lại mô-đun vì nó sẽ không xóa chế độ xem đó khi bạn gỡ cài đặt mô-đun và hiển thị lỗi khi bạn cài đặt lại mô-đun. Có hai cách để khắc phục điều đó:

  • Di chuyển cấu hình để cấu hình / tùy chọn thay vì cấu hình / cài đặt. Sau đó, nó sẽ chỉ được tạo nếu nó chưa tồn tại.
  • Thêm một phụ thuộc được thi hành vào mô-đun của bạn, điều này sẽ đảm bảo rằng nó sẽ bị xóa khi mô-đun được gỡ cài đặt. Lưu ý rằng điều này chỉ hoạt động nếu bạn có vị trí này khi bạn cài đặt mô-đun lần đầu tiên.

Như thế này:

  dependencies:
    enforced:
      module:
        - yourmodule

Cảm ơn, vì vậy nếu tôi muốn làm cho các chế độ xem có sẵn cho các thực thể khác nhau như nút, bình luận, người dùng, khối và nhiều thứ khác thì tôi sẽ phải xuất cấu hình cho tất cả các chế độ này? Hoặc có cách nào để tạo chế độ xem mới bằng cách sử dụng một số chức năng của api thực thể.
dùng2750995 27/05/2015

Có, bạn cũng có thể làm điều đó với mã, giống như mọi thực thể khác được tạo. Vấn đề là biết loại thực thể nào để tạo chế độ xem cho. Bởi vì một số có thể đã tồn tại khi mô-đun được kích hoạt, một số khác có thể đến sau. Xem drupal.org/node/2430821 , ở đó tôi đã đề xuất loại bỏ logic động đó trong token.module (hiện đang thực hiện chính xác điều này) và thay vào đó chỉ là tài liệu về cách đặt tên chế độ xem trong UI để nó hoạt động với mã thông báo .module.
Berdir

Làm cách nào để chế độ xem này tự động bị xóa khi người dùng gỡ cài đặt mô-đun?
dùng2750995

1
Điều đó đã xảy ra thông qua hệ thống phụ thuộc cấu hình. Nếu không, đó là một lỗi cốt lõi mà bạn nên mở, liên kết ở đây và tôi sẽ bình luận ở đó.
Berdir

1
Khi tôi gỡ cài đặt mô-đun thì không có vấn đề gì nhưng khi tôi cài đặt lại mô-đun thì không thể cài đặt được vì trang nói $ view_mode tồn tại trong cấu hình hoạt động. Nếu đây là một lỗi bạn nghĩ thì tôi có nên đăng nó như là một vấn đề của thành phần cấu hình không? hoặc có cách nào để giải quyết vấn đề này?
dùng2750995

6

Để tạo chế độ Xem trong Drupal 8 (nghĩa là tùy chỉnh manage display), giờ đây có thể được thực hiện thông qua Giao diện người dùng:

admin/structure/display-modes/view

Hoặc nếu bạn muốn lập trình cung cấp chế độ Xem với mô-đun của mình, hãy làm theo các bước sau:

  1. Tạo một mô-đun tùy chỉnh
  2. Tạo một config/installthư mục trong mô-đun của bạn
  3. Bên trong config/install, tạo một tệp có têncore.entity_view_mode.node.my_module.yml

Sau đó, bên trong core.entity_view_mode.node.my_module.ymlthêm này:

langcode: en
status: true
dependencies:
  module:
    - node
    - my_module
id: node.my_module
label: 'My Module'
targetEntityType: node
cache: true

Sau đó cài đặt mô-đun của bạn (bạn sẽ phải gỡ cài đặt và sau đó cài đặt lại mô-đun của bạn nếu nó đã được cài đặt). Bây giờ bạn sẽ có chế độ xem tùy chỉnh có thể được bật cho tất cả các loại nội dung của bạn.

Để hỗ trợ các loại thực thể khác (ví dụ: nhận xét, người dùng) chỉ cần tạo một .ymltệp mới và thay thế các lần xuất hiện nodebằng loại thực thể mong muốn của bạn.


0
$entity_type="node"; //The entity for which you want to create the view mode
$view_mode="example"; //The name of the new view mode
$settings=Array();
$settings["id"]=$entity_type.".".$view_mode;
$settings["targetEntityType"]=$entity_type;
$evm=Drupal\Core\Entity\Entity\EntityViewMode::create($settings);
$evm->save();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.