Можете ли вы кэшировать блоки для каждого языка?
Сейчас я работаю над многоязычным сайтом и использую набор модулей интернационализации для его создания.
На сайте есть несколько пользовательских блоков, которые я обычно использую DRUPAL_CACHE_GLOBAL
в hook_block_info()
определение. Однако в некоторых из них будут содержаться переводимые строки , поэтому мне действительно нужно кэшировать их для каждого языка.
Возможно ли это? Или, это мой единственный реальный вариант использовать DRUPAL_CACHE_PER_PAGE
?
1 answers
Просто используйте DRUPAL_CACHE_GLOBAL
. На многоязычных сайтах язык пользователей является частью (cid
), т.е. ключа, используемого при хранении/извлечении записей в/из кэша блоков.
Функция, ответственная за это поведение, является drupal_render_cid_parts, которая вызывается из _block_get_cache_id.
Вы можете встроить следующий фрагмент в пользовательский блок PHP, чтобы проверить механизм:
$fakeblock = (object) array(
'module' => 'some-module',
'delta' => 'some-delta',
'cache' => DRUPAL_CACHE_GLOBAL,
);
print _block_get_cache_id($fakeblock);
На многоязычном сайте фрагмент должен что-то печатать например:
Некоторые-модуль: некоторые-дельта:бартик:ru