Câu trả lời:
Sử dụng entity_load
để tải thực thể như được đề cập bởi @Nikhil.
Sau đó sử dụng entity_extract_ids , để giải nén gói. Thí dụ:
$entity = entity_load('node', array('7'));
list(, , $bundle) = entity_extract_ids('node', $entity);
echo "Bundle name is : " . $bundle;
Hàm entity_extract_ids
trả về một mảng được lập chỉ mục bằng số (không phải là bảng băm) có chứa các phần tử:
ở đâu, 0
, 1
, và 2
là chỉ số mảng. Tuy nhiên, cách tiếp cận được sử dụng bởi các mô-đun lõi và đóng góp là sử dụng list()
chức năng.
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
Đây là cái sạch nhất mà tôi nhận được từ mã mô-đun nhóm hữu cơ.
$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();
Ví dụ tôi có thể gọi nó như:
$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();
Chỉnh sửa: Như @Clive đã chỉ ra, phương pháp trên phụ thuộc vào mô đun thực thể.
Đây là một phương pháp khác không phụ thuộc vào bất kỳ mô-đun bổ sung. Nó được giải thích ở đây https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW
Sao chép phương pháp dán đó:
function _entity_get_bundle($entity, $entity_type) {
$info = entity_get_info($entity_type);
if (empty($info['entity keys']['bundle'])) {
return $entity_type;
} else {
return $entity->{$info['entity keys']['bundle']};
}
}
$group_type, $gid
gì và giá trị trong là $bundle
gì?
entity_load
, bằng cách nào nó sạch nhất?
entity_metadata_wrapper()
là sạch hơn entity_extract_ids()
phương pháp. Thêm vào đó, bạn dựa vào mô-đun thực thể đang được cài đặt ...
Hãy thử thực thể_load
Tải các thực thể từ cơ sở dữ liệu.
Các thực thể được lưu trữ trong bộ nhớ cache bộ nhớ tĩnh và sẽ không yêu cầu quyền truy cập cơ sở dữ liệu nếu được tải lại trong cùng một yêu cầu trang.
$ entity_type : Loại thực thể cần tải, ví dụ: nút hoặc người dùng.
$ ids : Mảng ID thực thể hoặc FALSE để tải tất cả các thực thể.
$ condition : (không dùng nữa) Một mảng các điều kiện kết hợp trên bảng cơ sở, trong đó các khóa là các trường cơ sở dữ liệu và các giá trị là các giá trị mà các trường phải có. Thay vào đó, tốt hơn là sử dụng EntityFieldQuery để lấy danh sách ID thực thể có thể tải bởi chức năng này.
$ reset : Có đặt lại bộ đệm trong cho loại thực thể được yêu cầu hay không.
Một mảng các đối tượng thực thể được lập chỉ mục bởi id của chúng. Khi không tìm thấy kết quả, một mảng trống được trả về.
Nếu bạn muốn một cách rất nhẹ, hiệu suất khôn ngoan, để lấy loại nút từ id nút - bạn có thể sử dụng một truy vấn chọn duy nhất trên bảng nút.
$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
array(':nid' => $nid))->fetchField();
Theo cách đó, bạn không cần phải gọi toàn bộ hệ thống hook thực thể, với entity_load, v.v.
Đó là một truy vấn chọn duy nhất bằng cách sử dụng id nút được lập chỉ mục.