Можете ли вы кэшировать блоки для каждого языка?


Сейчас я работаю над многоязычным сайтом и использую набор модулей интернационализации для его создания.

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

Возможно ли это? Или, это мой единственный реальный вариант использовать DRUPAL_CACHE_PER_PAGE?

Author: mpdonadio, 2013-09-05

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

 6
Author: znerol, 2013-11-04 20:59:18