Điểm:1

Truy cập giá trị nút trong mẫu twig đoạn văn

lá cờ es

Tôi đang viết một mẫu cành cây cho một đoạn văn. Tôi muốn truy cập giá trị trường văn bản từ trang/nút nơi loại đoạn văn này sẽ được thêm vào.

Cụ thể, tôi muốn truy cập giá trị của trường văn bản có tiêu đề 'field_runner_id'. Tôi truy cập giá trị này trong mẫu nhánh trang/nút của mình như thế này:

content.field_runner_id|field_value

Tôi đã thử một số kỹ thuật (được liệt kê bên dưới) để truy cập giá trị trường đó trong mẫu đoạn văn của mình nhưng không thành công.

Làm cách nào tôi có thể tham chiếu đến giá trị trường của trang mẹ trong mẫu đoạn văn?

Tôi đã tìm thấy một vài bài đăng và bài viết đề cập đến vấn đề này và có thể nhận thông tin chi tiết về nút cha, chẳng hạn như tiêu đề và nid nhưng không chứa các trường mà nút đó chứa.

Ví dụ như bài này: https://mark.ie/blog/printing-values-of-a-parent-node-from-a-drupal-paragraphs-field ...đã giúp tôi có được trang mẹ và tìm hiểu bằng cách thêm trang này vào mẫu đoạn văn của mình:

{% đặt cha mẹ = đoạn._referringItem.parent.parent.entity %}
{{ parent.title.value }}
{{ parent.nid.value }}

Tôi cũng đã thử những thứ này, trong số những thứ khác, nhưng không thành công:

{{ parent.content.field_runner_id.value }}
{{ parent.content.field_runner_id[0] }}
{{ parent.content.field_runner_id|field_value }}
Điểm:4
lá cờ ru

Lời nói đầu: Đừng sử dụng phương pháp đó từ blog đó, có một phương pháp tốt hơn.

  1. gì đó._referringItem không an toàn cho bộ đệm, vì vậy tốt hơn là không sử dụng mẫu Twig bên trong này.
  2. gì đó._referringItem không thực hiện bất kỳ kiểm tra truy cập
  3. đoạn._referringItem.parent.parent.entity có thể là cách thay thế dài nhất và khó hiểu nhất để viết đoạn.parentEntity

Vì vậy, bây giờ câu trả lời thực sự :-)

đoạn.parentEntity đang trả về đối tượng thực thể gốc (rất giống với đối tượng đoạn văn biến) nhưng nó không bao gồm một mảng kết xuất như Nội dung. Vì vậy, bạn không cần .Nội dung bạn cũng không cần |field_value.

Thay vào đó, hãy trực tiếp đến giá trị trường parent.field_on_hostnode.0.value


Thông tin thêm về các biến trong mẫu thực thể:

Nội dung = hoàn thành mảng kết xuất của một thực thể

nội dung.field_something = kết xuất mảng của một trường

nội dung.field_something|field_value = lấy lại giá trị trường thô từ một mảng kết xuất (yêu cầu mô-đun "Giá trị trường Twig")

thực thể = đối tượng thực thể thô (thay thế thực thể bằng nút trong mẫu nút, đoạn văn trong mẫu đoạn văn, v.v.).

thực thể.field_something.value = không được đề xuất, sẽ hoạt động khác nhau tùy thuộc vào loại trường và số lượng trường

entity.field_something.getValue() = lấy một mảng các giá trị trường thô, hoạt động cho tất cả các loại trường và tất cả các lực lượng trường

thực thể.field_something.0.value = lấy giá trị trường dữ liệu thô đầu tiên (đối với trường văn bản gốc, số, email, trường điện thoại; sẽ không hoạt động với liên kết, hình ảnh, tham chiếu thực thể...)

entity.field_something.0.name_of_database_column = lấy giá trị con dữ liệu thô đầu tiên tên_của_cơ_sở_dữ_liệu_cột của field_something (điều này có thể là định dạng trong một trường văn bản được định dạng, end_value trong một trường dữ liệu, target_id trong trường tham chiếu thực thể,...)

Chỉ trường tham chiếu thực thể:

Lưu ý rằng các phương pháp sau đây không an toàn cho bộ đệm, không nhận biết ngôn ngữ và không thực hiện kiểm tra quyền truy cập.

thực thể.field_reference.0.target_id = lấy ID số của thực thể con được tham chiếu đầu tiên

thực thể.field_reference.0.entity = đối tượng thực thể con được tham chiếu đầu tiên (không có mảng kết xuất!)

entity.field_reference.0.entity.getTranslation('de') = lấy bản dịch tiếng Đức của đối tượng con đầu tiên

Chỉ các đoạn:

đoạn.parentEntity = đối tượng thực thể cha trực tiếp (không có mảng kết xuất!)

Kevin avatar
lá cờ in
Ngoài ra, điều quan trọng là khi bỏ qua kết xuất, bạn có thể mất kiểm tra quyền truy cập.
lá cờ ru
Gợi ý tốt, tôi đã thêm điều này vào câu trả lời. AFAIK điều này cũng đúng với mọi `field_foo.0.entity`
scaffolding avatar
lá cờ es
Điều này thực sự hữu ích. Cảm ơn bạn @Hudri
Điểm:3
lá cờ ve

Tôi nghĩ nó dễ hơn bạn nghĩ:


{% đặt parentNode = đoạn.parentEntity %}
<!-- parentNode đã là đối tượng nút, vì vậy bây giờ bạn có thể truy cập trực tiếp vào bất kỳ trường nào mà không cần thông qua đối tượng nội dung --->

{{ parentNode.field_runner_id.value }}

Nói chung, điều gì sẽ làm cho cuộc sống của bạn trở nên dễ dàng hơn, đó là cài đặt phát triểndevel_kint_extras mô-đun để phát triển.

Sau đó, bạn có thể khám phá cấu trúc đối tượng drupal phức tạp như thế này và tìm đúng giá trị trường:

{{kint(parentNode)}}

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