Hàm entity_view làm gì?


7

Sau khi đọc tài liệu và tìm kiếm thông qua mã, tôi hoàn toàn không thể hiểu chức năng entity_view dùng để làm gì.

Các tài liệu giải thích nó thực hiện gọi lại xem nếu xác định, với một dự phòng để chức năng xem bộ điều khiển thực thể của. Vì tôi sử dụng Bộ điều khiển EntityAPIC, tôi muốn sử dụng chức năng xem đó, nên thêm một cấu trúc tương tự như bên dưới.

Vì vậy, tôi giả sử entity_view là để thay thế một cấu trúc như thế này (một phần của cuộc gọi lại trang).

// Prepare the entities
entity_prepare_view('entity_type', $entity_field_query_result);

// Apply theme to all entities
foreach($entity_field_query_result as $key => $item) {
  $entity->content = array();
  $entity->content += array(
    '#theme'     => 'my_entity_theme',
    '#element'   => $item,
    '#view_mode' => 'full',
    '#language'  => LANGUAGE_NONE,
  );
  $render[$key] = $entity->content;
}
return $render;

Vì vậy, tôi đã thay thế bằng

$render = entity_view('entity_type', $entity_field_query_result);

return $render;

Tuy nhiên, điều này cho thấy một trang trống, trong đó chức năng trước đó cho tôi thấy một danh sách các thực thể. Tôi có các chủ đề tùy chỉnh được áp dụng cho các thực thể này như sau, đó có thể là một vấn đề không?

function my_module_theme($existing, $type, $theme, $path) {
  return array(
    'my_entity_theme' => array(
      'variables' => array('element' => null),
      'template' => 'my_entity_theme',
      'path' => $path . '/template',
    ),
  );
}

Vì vậy, giả định của tôi về entity_view có đúng không, hay tôi thiếu các bước để đi đến một đầu ra có thể kết xuất?

Câu trả lời:


4

Kết quả là EntityFieldQuery không trả về các thực thể được tải đầy đủ. Hãy thử chạy kết quả truy vấn thông qua entity_load('type', $result['type']). Sau đó, bạn có thể kết xuất các kết quả lôi kéo thông qua entity_view('type', $entities).

Dưới đây là một ví dụ:

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node');
$query->entityCondition('bundle', 'article');
$result = $query->execute();
if (!empty($result)) {
  $entities = entity_load('node', array_keys($result['node']));
  return entity_view('node', $entities, 'full');
} else {
  return array('#markup' => t('No article nodes found.'));
}

Cảm ơn bạn đã trả lời, tôi đã viết trình bao bọc truy vấn của riêng mình rằng trên thực tế sẽ trả về các thực thể được tải. Tôi đọc qua đó khi viết câu hỏi. Vì vậy, tôi cho rằng nó phải là một cái gì đó khác ...
Neograph734

Các giá trị của $ entity_field_query_result trông như thế nào? Chúng có thể kết xuất không? Bạn đặt chúng trực tiếp vào trường '#element' của mảng kết xuất - do đó chúng phải tự hiển thị.
gue

Tôi thật ngốc - chúng sẽ được gửi đến chức năng chủ đề của bạn, nơi bạn có thể xử lý chúng theo cách bạn muốn.
gue

Vì vậy, tôi đoán entity_view không hoạt động trên chức năng chủ đề tùy chỉnh của bạn. Bạn có thể đi sâu vào vấn đề đó: làm thế nào để sử dụng chủ đề của riêng bạn cho các loại thực thể nhất định.
gue

Sau khi kết thúc mảng kết xuất, tôi phát hiện ra rằng các mục có #themegiá trị entity, vị trí của nó my_entity_theme. Vì vậy, chủ đề sai được gọi. Tôi sẽ thấy điều đó sai ở đâu.
Neograph734
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.