Я тоже не уверен, что вы подразумеваете под it is not called in some of the custom modules
, поэтому просто предположим, что вы можете иметь в виду пользовательские страницы, предоставляемые другими модулями:
Как уже отмечали Джереми и Googletorp, ваш блок if
if ((arg(0) == 'node') && is_numeric(arg(1)) && arg(2) == '') {
// database inserts here
}
будет принимать значение true, только если пользователь запрашивает полную страницу узла (например, «узел / 42»). не будет соответствовать ни одной другой странице , например представлению терминов (например, таксономия / термин / 36), главной странице по умолчанию ("узел") или странице просмотра, предоставляемой модулем представлений (может / иметь /) любой / путь) и т. д.
Таким образом, вставка вашей базы данных будет происходить только для страниц узлов, и ничего больше.
Если вы хотите регистрировать каждый запрос страницы, вы можете просто удалить блок if и выполнить вставку базы данных напрямую.
Редактировать после уточнения в комментариях (cec_monitoring_exit()
не вызывается для некоторых страниц, созданных другими модулями):
Я вижу только две возможные причины для этого.
Первой причиной будет ошибка, возникшая сразу после вывода страницы, но перед вызовом вашей реализации hook_exit()
( проверьте журналы вашего сервера на наличие ошибок php при запросах страниц с ошибками ). Если вы посмотрите на index.php (папка верхнего уровня вашего экземпляра Drupal):
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$return = menu_execute_active_handler();
// Menu status constants are integers; page content is a string.
if (is_int($return)) {
switch ($return) {
case MENU_NOT_FOUND:
drupal_not_found();
break;
case MENU_ACCESS_DENIED:
drupal_access_denied();
break;
case MENU_SITE_OFFLINE:
drupal_site_offline();
break;
}
}
elseif (isset($return)) {
// Print any value (including an empty string) except NULL or undefined:
print theme('page', $return);
}
drupal_page_footer();
вы можете видеть, что вывод страницы генерируется путем печати результата theme('page', $return)
. Вызов hook_exit()
происходит сразу после этого в drupal_page_footer()
.
Таким образом, вы должны проверить (желательно с помощью отладчика, но вы также можете использовать операторы печати), если drupal_page_footer()
выполняется на рассматриваемых страницах вообще. Если он вызывается, ошибка может произойти в hook_exit()
реализации другого модуля, который вызывается раньше вашего, поэтому вам нужно проверить его.
Вторая причина заключается в том, что один из модулей обойдет стандартный поток выполнения Drupal, вызвав саму тему ('page', ...), и впоследствии остановит выполнение. В этом случае drupal_page_footer()
не будет вызван, потому что выполнение было бы остановлено задолго до вызова menu_execute_active_handler()
. Обратите внимание, что ни один из установленных модулей Drupal не сделает этого, поэтому это маловероятно.
Помимо этих опций, я понятия не имею, что может вызвать это.