4

我有一个显示来自外部站点的 RSS 提要列表的块。我想继续缓存除提到的块之外的其他块。怎么做?

例如,我有blockAblockBblockC。我只想将blockB的缓存设置永久更改为DRUPAL_NO_CACHE并保留其他块,我想以编程方式执行此操作。

4

4 回答 4

5

您可以在创建您的块的特定模块中更改缓存角色。在如下块信息中:

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,
    ),
  );
}
于 2012-08-10T11:22:16.960 回答
3

如果您在自己的模块中定义块,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;
}
于 2012-10-16T13:34:55.473 回答
1

这将通过转到性能设置页面(admin/settings/performance)并通过向下滚动单击“清除缓存数据”来减少工作。

但请确保此页面只能由管理员访问。

对于Drupal 7与Drupal 6相同:

<?php
  drupal_flush_all_caches();
  drupal_set_message('cache flushed.');
?>
于 2012-08-10T09:55:22.373 回答
1

积木从何而来?这很重要。正如 Jurgo 所说,hook_block_info如果它是自定义模块,您可以指定它。如果它们是视图块,则在处理此问题的视图中每个显示都有一个缓存设置。如果它们是其他模块提供的块,您需要直接查询数据库以更改块的缓存设置。

作为一般说明,要显示 RSS 提要,只需使用提要和视图。然后,您根本不需要为此编写自定义代码。

于 2012-08-10T19:38:14.300 回答