外部サイトからのRSSフィードのリストを表示するブロックがあります。上記のブロック以外の他のブロックをキャッシュし続けたい。どうやってするか?
たとえば、blockA、blockB、blockCがあります。blockBのキャッシュ設定を永続的に変更し、DRUPAL_NO_CACHE
他のブロックはそのままにしておきたいのですが、プログラムでそれを実行したいと思います。
youreブロックを作成する特定のモジュールでキャッシュの役割を変更できます。以下のようなブロック情報:
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,
),
);
}
独自のモジュール内でブロックを定義している場合、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;
}
これにより、パフォーマンス設定ページ(admin / settings / performance)に移動し、下にスクロールして[キャッシュされたデータをクリア]をクリックすることで、作業を減らすことができます。
ただし、このページには管理者のみがアクセスできるようにしてください。
Drupal7の場合はDrupal6と同じです。
<?php
drupal_flush_all_caches();
drupal_set_message('cache flushed.');
?>
ブロックはどこから来るのですか?それは重要です。Jurgoが言ったhook_block_info
ように、カスタムモジュールの場合はで指定できます。それらがビューブロックである場合、これを処理するビュー内のディスプレイごとにキャッシュ設定があります。それらが他のモジュールによって提供されるブロックである場合、ブロックのキャッシュ設定を変更するには、データベースに直接クエリを実行する必要があります。
一般的な注意として、RSSフィードを表示するには、フィードとビューを使用するだけです。次に、このいずれの場合もカスタムコードをまったく記述しません。