Nie jestem pewien, jaka jest między nimi różnica
- menu_get_object () zwraca obiekt powiązany z aktualnie wyświetlaną stroną. Jeśli kod zostanie wykonany, gdy Drupal wyświetla stronę example.com/node/1, wówczas
menu_get_object()
zwróci obiekt węzła dla węzła o identyfikatorze 1; jeśli wyświetlana strona to example.com/user/1, wówczas menu_get_object('user')
zwróci obiekt użytkownika dla użytkownika o identyfikatorze 1.
- menu_get_item () zwraca tablicę zawierającą indeks dla każdego pola zawartego w tabeli „menu_router”. To zawiera:
- ścieżka: bieżąca ścieżka wywołania zwrotnego menu
- load_functions: tablica nazw funkcji (jak
node_load
), które mają zostać wywołane w celu załadowania obiektu odpowiadającego części bieżącej ścieżki
- access_callback: callback, który sprawdza, czy aktualnie zalogowany użytkownik ma dostęp do pozycji menu
- page_callback: nazwa funkcji, która renderuje stronę
- tytuł: tytuł strony powiązanej z pozycją menu
- drupal_lookup_path () to funkcja, która zwraca wewnętrzną ścieżkę związaną z aliasem przekazanym jako argument. Jeśli „strona główna” to alias powiązany z example.com/node/1, wówczas
drupal_lookup_path("homepage")
zwróci "node/1"
. Aliasy ścieżek mogą być powiązane z dowolnymi ścieżkami wewnętrznymi, nie tylko ze ścieżkami węzłów.
i która jest bardziej odpowiednia do uzyskania identyfikatora węzła w funkcji wstępnego przetwarzania bloku.
Jeśli wszystko, co chcesz uzyskać, to identyfikator węzła aktualnie pokazanego węzła, wystarczy użyć następującego kodu:
if (arg(0) == 'node') {
$nid = arg(1);
}
Jeśli potrzebujesz uzyskać obiekt węzła, możesz użyć następującego kodu:
if ($node = menu_get_object()) {
// Use the node object.
}
Z tych fragmentów drugi jest lepszy, ponieważ zwraca poprawny obiekt węzła dla ścieżek wewnętrznych, takich jak węzeł / 1 / rewizje / 3 / widok.
Należy pamiętać, że niektóre funkcje przetwarzania wstępnego, takie jak te dla strony lub węzła, mają już funkcję $variables['node']
. Oznacza to, że w takich przypadkach wystarczy użyć następującego fragmentu kodu w funkcji wstępnego przetwarzania, bez obawy o to, której funkcji użyć.
if (isset($variables['node'])) {
// Check the node ID or other properties.
}
W przypadku innych funkcji wstępnego przetwarzania sprawdź dokumentację, aby zobaczyć, czy istnieje jakaś zmienna zawierająca obiekt węzła. Na przykład, że jest to przypadek template_preprocess_comment()
, który sprawia, że $variables['node']
dostęp do funkcji przetwarzania wstępnego dla komentarzy.