Sử dụng các trường làm thuộc tính trong các mẫu nút


7

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 ?> &mdash; <?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.

Câu trả lời:


1

Có lý do để không chỉ đặt định dạng "<hidden>"trong "quản lý hiển thị" của loại nội dung không? Sau đó, nó sẽ không bao giờ kết xuất nhưng bạn vẫn có nó nếu bạn muốn nó.

Nếu bạn thực sự muốn làm điều này theo chương trình, thì cách tốt nhất, đối với tôi, là sử dụng một mô-đun không phải là chủ đề của bạn. Tại sao? Bởi vì nếu chủ đề của bạn thay đổi ... bạn có muốn hiển thị thêm không? Không, vì vậy làm cho nó độc lập với chủ đề bằng cách đặt nó trong một mô-đun.

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.