1

Drupal 6.26 を使用しています。たとえば、ページ引数を 150 から 50 に更新すると、ページが更新され、変更が表示されません。パフォーマンス ページからキャッシュをクリアすると、変更が表示されます。Drupal を Windows でローカルにテストしているため、キャッシュの設定はすべてオフになっています。Drupal 5 には $may_cache というブール値フラグがあることがわかりましたが、API を見ると、このオプションは Drupal 6 には存在しません。

変更を確認するたびにキャッシュをクリアしない方法はありますか?

function usman_menu(){

$items['usman/hello'] = array(
        'page callback' => 'usman_example',
        'access callback' =>'user_access',
        'access arguments' =>array('access content')
);

$items['usman'] = array(
        'page callback' => 'usman_begin',
        'page arguments' => array('150'), 
        'access callback' =>'user_access',
        'access arguments' =>array('access content')
);
return $items;
}

function usman_begin($id = 20, $message = "YES", $optional = "NO"){

print "Loaded " . __FUNCTION__;
print "<br/>";
print "ID is $id, Message is $message, Option is $optional";
}

OK、メニューフックについて少し学びました。パスが引数とプレースホルダーでどのように機能するかを確認するために、コードをいじっていました。テストするのに十分な速さでリフレッシュされ、キャッシュをクリアする必要がありました. 開発者のためだけに、パフォーマンスページからそのようなキャッシュを一時的に無効にするオプションがないことを考えると、これは奇妙だと思います。

ありがとう。

4

2 に答える 2

1

あなたの質問を正しく理解していれば、私の答えはノーです。

「ページ引数」=>配列(「150」)で引数値を変更していると仮定しています。この定義全体がキャッシュされ、次に同じパスがアクセスされたときに、キャッシュされたデータが使用され、hook_menu が呼び出されないためです。

私が提供できる唯一の提案は次のとおりです。

  • 手早く汚いテストを行うには、関数 (コールバック) 自体で変数の値をオーバーライドします。
  • モジュール/スクリプトを使用して、リセットのたびにキャッシュ テーブルをクリアします。たとえばdrush cc all、または devel を使用します。
于 2012-08-29T14:56:15.293 に答える
1

コアファイルを変更せずにそれを行う方法はわかりません (これは明らかに良い考えではありません)。

メニュー項目はキャッシュされ、menu_rebuild()が呼び出されるまで更新されません。これは、キャッシュをフラッシュする (または他のいくつかの管理タスクのいずれかを呼び出す) まで行われません。

どちらの方法でも、少なくともcache_menuテーブルをクリアする必要があります。そうしないと、hook_menu()単に呼び出されません。

于 2012-08-29T14:55:10.820 に答える