4

外部サイトからのRSSフィードのリストを表示するブロックがあります。上記のブロック以外の他のブロックをキャッシュし続けたい。どうやってするか?

たとえば、blockAblockBblockCがあります。blockBのキャッシュ設定を永続的に変更し、DRUPAL_NO_CACHE他のブロックはそのままにしておきたいのですが、プログラムでそれを実行したいと思います。

4

4 に答える 4

5

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,
    ),
  );
}
于 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)に移動し、下にスクロールして[キャッシュされたデータをクリア]をクリックすることで、作業を減らすことができます。

ただし、このページには管理者のみがアクセスできるようにしてください。

Drupal7の場合はDrupal6と同じです。

<?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 に答える