Как запустить проверку при каждой загрузке страницы?


Я хотел бы выполнить проверку при каждой загрузке страницы. Это касается только внешнего интерфейса, а не панели администратора.

В основном то, что я хотел бы сделать, это: 1) Пользователь переходит по URL-адресу на сайте drupal. 2) Выполняется проверка на стороне сервера. Если проверка пройдет успешно, выполните некоторую логику.

Как бы я это сделал?

Я предполагаю, что я могу использовать крючок, но какой это будет крючок?

Спасибо.

 7
Author: Clive, 2012-06-11

2 answers

hook_init() запускается при каждой загрузке страницы, за исключением кэшированных страниц, поэтому в зависимости от вашего варианта использования это может быть вариантом.

function MYMODULE_init() {
  // Custom logic
}

hook_boot() запускается на каждой странице, включая кэшированные страницы, поэтому может быть более полезным (опять же, в зависимости от вашего варианта использования). Однако, если у вас сложная логика для обработки, это, очевидно, замедлит сборку каждой страницы, даже тех, которые кэшируются.

function MYMODULE_boot() {
  // Custom logic
}

Если вы хотите проверить, попадает ли текущий путь под '/admin' или нет вы можете использовать такую проверку в любой функции:

if (arg(0) == 'admin') {
  // ...
}

Это не будет работать для страниц редактирования узлов, например, в пути пользователя нет "/admin"; но за исключением вызова hook_admin_paths() и проверяя текущий URL-адрес по каждому из возвращенных путей, я не уверен, как бы вы надежно проверили это в любом случае.

 14
Author: Clive, 2012-06-11 23:44:00

Я хотел внести в это что-то дополнительное. Я не сторонник hook_init() или hook_boot() для выполнения подобных задач, но, как правило, ищу конкретные крючки, которые выполняют то, что вы хотите. Эти два крючка очень широкие, и, хотя они выполняют свою работу, их также иногда называют несколько раз за загрузку страницы.

Альтернативой, которую я бы предложил, является hook_page_build().

Это будет выполняться при сборке страниц, и вам не придется беспокоиться о повторном запуске, когда вам это может не понадобиться. Я сделал скрипт для сайтов разработки, где он просто вводил бы бота, ограничивающего строку заголовка по всему сайту на страницах. Точно так же вы можете сделать то же самое, что и проверка при каждой загрузке страницы.

function my_module_page_build(&$page) {
  drupal_add_http_header('X-Robots-Tag', 'noindex,nofollow');
}

Аналогичным образом вы могли бы включить проверку административных страниц

function my_module_page_build(&$page) {
  if (path_is_admin()) {
    foo();
  } 
  else {
    bar();
  }
}

Я предпочитаю path_is_admin(), а не проверять произвольные аргументы с помощью arg(). Просто мое предпочтение. Так я чувствую себя менее хакерски, ИМО.

 9
Author: ElusiveMind, 2014-11-22 17:19:41