Tôi đang sử dụng mô-đun Drupal Par Đoạn cho phép bạn tạo "gói" các trường bên trong các trường khác. (Nó thực hiện điều này bằng cách sử dụng các thực thể). Mỗi gói có tệp tpl.php của riêng nó.
Ngoài ra, bạn có thể lồng "các gói phụ" bên trong "các gói chính" cho các bố cục phức tạp.
Tôi đã tạo ra một "gói chính" được gọi là field_panels_content
.
Bên trong này là một "subbundle" khác chứa a field_body_text
. "Gói chính" có thể chứa số lượng "gói phụ" không giới hạn.
Trong chủ đề của tôi, tôi cần truy cập vào tất cả các field_body_text
trường từ nhiều "subbundle" từ tệp tpl.php dành cho "gói chính".
Tôi đã sử dụng devel_themer và thấy rằng tôi có thể đến các field_body_text
trường như thế này:
<?php print render($content['field_panels_content'][0]['entity']['paragraphs_item'][9]['field_body_text']); ?>
<?php print render($content['field_panels_content'][2]['entity']['paragraphs_item'][10]['field_body_text']); ?>
<?php print render($content['field_panels_content'][2]['entity']['paragraphs_item'][12]['field_body_text']); ?>
Như bạn có thể thấy điều này không tạo ra chủ đề hiệu quả vì tôi sẽ cần biết giá trị mảng thứ hai để in ra (ví dụ [9] [10] [12]).
Có cách nào để tôi có thể sử dụng một vòng lặp hoặc một số hàm PHP khác để tự động đến giá trị mảng thứ hai mà không cần biết không?
Giá trị mảng thứ hai này thay đổi theo từng phần nội dung mới (ví dụ: Nếu tôi thêm một lớp con mới, nó sẽ có giá trị là [13]. Lý do các số nhảy từ [10] sang [12] là vì tôi đã xóa lớp con đó [11].
Cập nhật
Dưới đây là một số bước tôi đã thử (từ trang này ):
Đây là một vòng lặp ví dụ:
<?php
foreach ( $content['field_panels_content'] as $wrapper) {
foreach ( $wrapper['entity']['paragraphs_item'] as $item ) {
if ( !empty($item['field_body_text']) ) {
print render($item['field_body_text']);
}
}
}
?>
Nó tạo ra các kết quả sau: Không thể sử dụng đối tượng thuộc loại Par ĐoạnsItemEntity làm mảng trong foreach ($ Wrapper ['entity'] ['Đoạns_item'] làm $ item) {
Đây là một phiên bản làm lại:
<?php
foreach ( $content['field_panels_content'] as $wrapper) {
foreach ( $wrapper['entity'].paragraphs_item as $item ) {
if ( !empty($item.field_body_text) ) {
print render($item.field_body_text);
}
}
}
?>
Thông báo lỗi: Fatal error: Cannot use object of type ParagraphsItemEntity as array in line "foreach ( $wrapper['entity'].paragraphs_item as $item ) {"
Chỉnh sửa mã để chỉ field_body bản nằm trong dấu ngoặc vuông (ví dụ $item['field_body_text']
), tạo thông báo lỗi này:
Fatal error: Cannot use object of type ParagraphsItemEntity as array
Chỉnh sửa mã để chỉ đoạn văn_item nằm trong dấu ngoặc vuông (ví dụ $wrapper['entity']['paragraphs_item']
), tạo ra thông báo lỗi này:
Fatal error: Only variables can be passed by reference in line print render($item.field_body_text);
Nếu tôi sử dụng in thay vì kết xuất, tôi nhận được thông báo lỗi này:
Fatal error: Cannot use object of type ParagraphsItemEntity as array
Ghi chú khác
Các mã sau hoạt động hoàn hảo:
<?php print render($content['field_panels_content'][0]['entity']['paragraphs_item'][9]['field_body_text']); ?>
<?php print render($content['field_panels_content'][1]['entity']['paragraphs_item'][10]['field_body_text']); ?>
Vì vậy, chắc chắn nó là một trường hợp đơn giản để cấu trúc lại mã thành một vòng lặp để có được kết quả mong muốn.
Xin lưu ý
Tôi không muốn sử dụng các mô-đun khác.
Tôi sẽ in riêng tất cả các trường_body bản ở đầu tệp tpl. Sau đó tôi sẽ hiển thị toàn bộ đoạn văn ( field_body_text
vẫn còn trong đó) theo cách thông thường.