Изменение настроек кэша программно в Drupal 7
У меня есть блок, который отображает список RSS-каналов с внешнего сайта. Я хочу сохранить кэширование других блоков, кроме упомянутого блока. Как это сделать?
Например, у меня есть blockA, blockB и blockC . Я только хочу изменить настройки кэша блока постоянно на DRUPAL_NO_CACHE
и оставить другие блоки, как они есть, и я хочу сделать это программно.
Ответы - Изменение настроек кэша программно в Drupal 7 / Change cache settings programmatically in Drupal 7

10.08.2012 01:55:22
Это уменьшит работу, перейдя на страницу настроек производительности (admin / settings/performance) и нажав кнопку" Очистить кэшированные данные", прокрутив вниз.
Но убедитесь, что эта страница доступна только администратору.
Для Drupal 7 это то же самое, что и Drupal 6:
<?php
drupal_flush_all_caches();
drupal_set_message('cache flushed.');
?>


10.08.2012 03:22:16
Вы можете изменить роли кэширования в конкретном модуле, который создает ваш блок. В блоке информации, как ниже:
function pref_block_info() {
return array(
'pref_main' => array(
'info' => t('Display flash game for auth. users'),
'cache' => DRUPAL_NO_CACHE,
),
'pref_winner' => array(
'info' => t('Show the winner of the last week.'),
'cache' => DRUPAL_NO_CACHE,
),
'pref_leader' => array(
'info' => t('Show the leader of the current week.'),
'cache' => DRUPAL_NO_CACHE,
),
'pref_top' => array(
'info' => t('Show the top 10 of the current week.'),
'cache' => DRUPAL_NO_CACHE,
),
);
}

10.08.2012 11:38:14
Откуда берутся блоки? Это очень важно. Как сказал Юрго, вы можете указать его в hook_block_info
если это пользовательский модуль. Если они являются блоками представлений, существует параметр кэширования для каждого отображения в представлениях, который обрабатывает это. Если они являются блоками, предоставленными каким-либо другим модулем, вам нужно будет напрямую запросить базу данных, чтобы изменить настройку кэширования блока.
В качестве общего замечания, чтобы отобразить RSS-каналы, просто используйте каналы и представления. Тогда вы вообще не пишете пользовательский код для всего этого.

16.10.2012 05:34:55
Ответ, данный Jurgo, совершенно прав, если вы определяете блок в своем собственном модуле.
В случае, если вы хотите изменить поведение кэширования блока, написанного каким-либо другим модулем, вы можете использовать функцию mymodule_block_list_alter
function mymodule_block_list_alter(&$blocks, $theme, $code_blocks) {
// Remove the caching on rss feeds block.
// Here rss-feeds is the unique key for the block
$blocks['rss-feeds']['cache'] = DRUPAL_NO_CACHE;
}