Я не совсем уверен, какая разница между ними
- menu_get_object () возвращает объект, связанный с отображаемой в данный момент страницей. Если код выполняется, когда Drupal показывает страницу example.com/node/1, он
menu_get_object()
вернет объект узла для узла, чей ID равен 1; если отображается страница example.com/user/1, то menu_get_object('user')
будет возвращен объект пользователя для пользователя, чей ID равен 1.
- menu_get_item () возвращает массив, содержащий индекс для каждого поля, содержащегося в таблице «menu_router». Это включает в себя:
- путь: текущий путь обратного вызова меню
- load_functions: массив имен функций (например
node_load
), которые будут вызваны для загрузки объекта, соответствующего части текущего пути
- access_callback: обратный вызов, который проверяет, есть ли у текущего вошедшего в систему пользователя доступ к пункту меню
- page_callback: имя функции, которая отображает страницу
- title: заголовок страницы, связанной с пунктом меню
- drupal_lookup_path () - это функция, которая возвращает вам внутренний путь, связанный с псевдонимом, переданным в качестве аргумента. Если «домашняя страница» - это псевдоним, связанный с example.com/node/1, то
drupal_lookup_path("homepage")
вернется "node/1"
. Псевдонимы путей могут быть связаны с любыми внутренними путями, а не только с путями узлов.
и который больше подходит для получения идентификатора узла в функции предварительной обработки блока.
Если все, что вы хотите получить - это идентификатор узла, показанного в данный момент, вам просто нужно использовать следующий код:
if (arg(0) == 'node') {
$nid = arg(1);
}
Если вам нужно получить объект узла, то вы можете использовать следующий код:
if ($node = menu_get_object()) {
// Use the node object.
}
Из этих фрагментов второй лучше, так как он возвращает правильный объект узла для внутренних путей, таких как представление узла / 1 / revisions / 3 /.
Имейте в виду, что некоторые функции предварительной обработки, такие как функции для страницы или узла, уже имеют $variables['node']
. Это означает, что в этих случаях вам просто нужно использовать следующий фрагмент в функции предварительной обработки, не беспокоясь о том, какую функцию использовать.
if (isset($variables['node'])) {
// Check the node ID or other properties.
}
Для других функций предварительной обработки, проверьте документацию, чтобы видеть, есть ли какая-либо переменная, содержащая объект узла. Например, это тот случай, template_preprocess_comment()
когда $variables['node']
для функций предварительной обработки доступны комментарии.