Ответы:
Используйте entity_load
для загрузки объекта, как упомянуто @Nikhil.
Затем используйте entity_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
являются индексы массива. Тем не менее, подход, используемый модулями core и contrib, заключается в использовании 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()
метод. Кроме того, вы полагаетесь на устанавливаемый модуль сущности ...
Попробуйте entity_load
Загрузка сущностей из базы данных.
Объекты хранятся в статическом кэше памяти и не требуют доступа к базе данных, если загружаются снова во время того же запроса страницы.
$ entity_type : тип объекта для загрузки, например, узел или пользователь.
$ ids : массив идентификаторов сущностей или FALSE для загрузки всех сущностей.
$ condition : (устарело) Ассоциативный массив условий в базовой таблице, где ключи - это поля базы данных, а значения - значения, которые должны иметь эти поля. Вместо этого предпочтительно использовать EntityFieldQuery для получения списка идентификаторов сущностей, загружаемых этой функцией.
$ reset : сбросить ли внутренний кэш для запрошенного типа объекта.
Массив объектов-сущностей, проиндексированных по их идентификаторам. Если результатов не найдено, возвращается пустой массив.
Если вам нужен очень легкий способ получения типа узла по идентификатору узла с точки зрения производительности - вы можете использовать один запрос на выборку для таблицы узлов.
$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
array(':nid' => $nid))->fetchField();
Таким образом, вам не нужно вызывать всю систему ловушек сущностей, с entity_load и т. Д.
Это один запрос на выборку, использующий индексированный идентификатор узла.