Вряд ли hook_init
"в начале игры" и, конечно, не первый, кто запускает запросы к базе данных. Порядок начальной загрузки: загрузить конфигурацию, попытаться обслужить страницу из кэша, инициализировать базу данных, загрузить переменные, загрузить сеанс, заголовок страницы. Первый перехватчик - hook_boot
, либо если кэш страницы имеет попадание, либо заголовок страницы - к тому времени, по крайней мере, фаза инициализации переменной запускает запрос либо для загрузки переменных из базы данных (либо для их извлечения из кэша но вы не можете полагаться на кеш, а кеш по умолчанию - база данных в любом случае). Однако не все потеряно. Вы можете либо поместить свой код прямо в settings.php
, либо написать небольшой обработчик кэша, что-то вроде этого:
class HackyDatabaseCache extends DrupalDatabaseCache {
function __construct($bin) {
// your code finding the database here.
parent::__construct($bin);
}
}
добавьте $conf['cache_backends'][] = 'path/to/hackydatabasecache.inc';
и $conf['cache_class_cache_page'] = 'HackyDatabaseCache';
к вашему settings.php
. Это обеспечит запуск вашего кода перед любыми запросами. Если вы используете memcache или mongodb для кэширования, то расширьте его с помощью того же кода, просто измените, какой класс будет расширен.