Відповіді:
Використовуйте entity_load
для завантаження об'єкта, як згадував @Nikhil.
Потім використовуйте entit_extract_ids , щоб отримати пакет. Приклад:
$entity = entity_load('node', array('7'));
list(, , $bundle) = entity_extract_ids('node', $entity);
echo "Bundle name is : " . $bundle;
Функція entity_extract_ids
повертає числовий індексований масив (не хеш-таблицю), що містить елементи:
де, 0
, 1
, і 2
є індекси масиву. Однак підхід, який застосовують основні модулі та допоміжні модулі, полягає у використанні list()
функції.
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
Ось найчистіший, який я отримав з коду модуля Organic groups.
$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();
Наприклад, я можу назвати це так:
$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();
Редагувати: Як зазначав @Clive, вищевказаний метод залежить від модуля сутності.
Ось ще один метод, який не залежить від будь-якого додаткового модуля. Пояснюється тут https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW
Скопіюйте вставлення цього методу:
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
? і в чому значення $bundle
?
entity_load
, до речі, як це найчистіше?
entity_metadata_wrapper()
більш чистим, ніж entity_extract_ids()
метод. Плюс ви покладаєтесь на встановлений модуль сутності ...
Спробуйте object_load
Завантажте об'єкти з бази даних.
Суб'єкти зберігаються в статичному кеші пам'яті і не потребуватимуть доступу до бази даних, якщо вони знову завантажуються під час того ж запиту сторінки.
$ entit_type : тип сутності для завантаження, наприклад, вузол або користувач.
$ ids : масив ідентифікаторів сутності або FALSE для завантаження всіх сутностей.
$ умови : (застарілий) Асоціативний масив умов у базовій таблиці, де ключовими є поля бази даних, а значення - значення, які мають мати поля. Натомість бажано використовувати EntityFieldQuery для отримання списку ідентифікаторів об'єктів, завантажених за допомогою цієї функції.
$ reset : чи потрібно скинути внутрішній кеш для запитуваного типу сутності.
Масив об'єктів сутності, індексований їх ідентифікаторами. Коли результатів не знайдено, повертається порожній масив.
Якщо ви хочете дуже легким та ефективним способом отримати тип вузла з ідентифікатора вузла - ви можете використовувати один запит на вибір у таблиці вузлів.
$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
array(':nid' => $nid))->fetchField();
Таким чином, вам не потрібно викликати всю систему підключення сутності, з ent_load тощо.
Це один запит вибору з використанням індексованого ідентифікатора вузла.