Muszę zidentyfikować bundle
byt na podstawie jego type
i id
.
Na przykład, jeśli type
jest to „węzeł” i id
wynosi 7, mogę otrzymać „page” jako bundle
.
Dzięki
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
najczystszykod z modułu Organicznych grup.Na przykład mogę to nazwać:
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:
źródło
$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
Parametry
$ 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.
Zwracana wartość
Tablica obiektów encji indeksowana według ich identyfikatorów. Gdy nie zostaną znalezione żadne wyniki, zwracana jest pusta tablica.
źródło
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.
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.
źródło