Cách thực hành tốt nhất để sử dụng một trường làm "thuộc tính" trong mẫu nút với Drupal 7 là gì? Tôi đang sử dụng thuật ngữ "thuộc tính" một cách lỏng lẻo ở đây để có nghĩa là một cái gì đó không thể được kết xuất cụ thể như một đoạn HTML; thay vào đó, nó được hiển thị bên trong một đoạn HTML ở đâu đó trong một mẫu.
API trường giúp dễ dàng bọc trường "nội dung" bằng HTML để có thể hiển thị trong mẫu, nhiều lần không cần chỉnh sửa mẫu nút, do cách thức kết xuất cây.
Xem xét một loại nội dung như
- Tiêu đề (tiêu đề)
- Cơ thể (cơ thể)
- Thêm (trường_extra)
Trong đó field_extra chỉ là thứ mà tôi muốn xử lý tiêu đề nút, vd
<?php if (!$page && $title): ?>
<h2><?php print $title ?> — <?php print $extra; ?></h2>
<?php endif; ?>
print render($content);
Đây là một ví dụ rất, rất đơn giản để minh họa những gì tôi đang nói.
Tôi chỉ có thể truy cập
$extra = trim($field_extra[0]["safe_value"]);
nhưng tôi sẽ phải trải qua một số logic show () / hide () tùy thuộc vào cách mọi thứ được cấu hình và truy cập trực tiếp vào các trường.
Tôi có thể tạo một theme_field () , chẳng hạn như
function mytheme_field__field_extra ($variables)
{
$items = $variables["items"];
return count($items) == 0 ? "" : trim(drupal_render($items[0]));
}
và sau đó sử dụng render () , nhưng tôi vẫn sẽ phải xem shenanigans show () / hide () và tôi không thực sự kết xuất trường, chỉ cố gắng lấy phiên bản đơn giản của nó để sử dụng ở đâu đó.
Hoặc, nếu điều này thực sự được xử lý bởi template_pre process_node () , vd
function mytheme_preprocess_node (&$variables)
{
$node = $variables["node"];
$language = $node->language;
if (isset($variables["field_extra"])
&& isset($variables["field_extra"][$language])
&& isset($variables["field_extra"][$language][0])) {
$variables["extra"] = trim($variables["field_extra"][$language][0]["safe_value"]);
}
}
Tôi biết tất cả những thứ này sẽ hoạt động. Tôi thực sự quan tâm đến những gì là thực hành tốt nhất ở đây. Tôi nghi ngờ rằng template_pre process_node () là cách tốt nhất để xử lý việc này, nhưng tôi chưa thấy gì dứt khoát về trường hợp này.
Cảm ơn.