Odpowiedzi:
Służy entity_load
do ładowania jednostki, jak wspomniano w @Nikhil.
Następnie użyj encji_wyodrębniania_id , aby wyodrębnić pakiet. Przykład:
$entity = entity_load('node', array('7'));
list(, , $bundle) = entity_extract_ids('node', $entity);
echo "Bundle name is : " . $bundle;
Funkcja entity_extract_ids
zwraca tablicę indeksowaną numerycznie (nie tablicę skrótu) zawierającą elementy:
gdzie 0
, 1
i 2
są indeksami macierzy. Jednak podejście zastosowane w modułach core i contrib polega na użyciu tej list()
funkcji.
list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
Oto najczystszy kod z modułu Organicznych grup.
$wrapper = entity_metadata_wrapper($entity_type, $entity_id);
$bundle = $wrapper->getBundle();
Na przykład mogę to nazwać:
$wrapper = entity_metadata_wrapper('node', 1);
$bundle = $wrapper->getBundle();
Edycja: Jak wskazał @Clive, powyższa metoda zależy od modułu encji.
Oto kolejna metoda, która nie zależy od żadnego dodatkowego modułu. Wyjaśniono to tutaj https://forrst.com/posts/Get_the_bundle_of_a_Drupal_7_entity-0xW
Skopiuj wklejanie tej metody:
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
? i jaka jest wartość $bundle
?
entity_load
, przy okazji, jak to jest najczystsze?
entity_metadata_wrapper()
jest czystszy niż entity_extract_ids()
metoda. Dodatkowo polegasz na zainstalowaniu modułu encji ...
Wypróbuj entity_load
Załaduj jednostki z bazy danych.
Jednostki są przechowywane w statycznej pamięci podręcznej i nie będą wymagać dostępu do bazy danych, jeśli zostaną ponownie załadowane podczas tego samego żądania strony.
$ entity_type : typ jednostki do załadowania, np. węzeł lub użytkownik.
$ ids : tablica identyfikatorów encji lub FALSE, aby załadować wszystkie encje.
$ warunki : (przestarzałe) Tablica asocjacyjna warunków w tabeli podstawowej, gdzie kluczami są pola bazy danych, a wartości są wartościami, które pola te muszą mieć. Zamiast tego lepiej jest użyć EntityFieldQuery do pobrania listy identyfikatorów encji ładowanych przez tę funkcję.
$ reset : czy zresetować wewnętrzną pamięć podręczną dla żądanego typu encji.
Tablica obiektów encji indeksowana według ich identyfikatorów. Gdy nie zostaną znalezione żadne wyniki, zwracana jest pusta tablica.
Jeśli chcesz uzyskać bardzo lekki sposób pod względem wydajności, aby uzyskać typ węzła z identyfikatora węzła - możesz użyć pojedynczego zapytania wyboru w tabeli węzłów.
$type = db_query("SELECT type FROM {node} WHERE nid = :nid",
array(':nid' => $nid))->fetchField();
W ten sposób nie musisz wywoływać całego systemu zaczepienia encji, z encją_obciążenie itp.
Jest to jedno zapytanie typu select, wykorzystujące indeksowany identyfikator węzła.