2011-03-08 5 views
2

私はdrupalウェブサイトのテーマを変えることができるPHPスクリプトを書いています。これまでのところ、とても良いですが、私が理解できなかった最後のものです。フォームを送信するたびに、データベースは変更されますが、テーマは変更されません。どうやら、私はキャッシュをクリアする必要があります。私は、Drupalのウェブサイト上でこれを見つけた:drupalキャッシュをクリアする - PHPスクリプト

<?php include_once './includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); drupal_flush_all_caches(); ?>

私はこのスクリプトを少しファイル「clear.php」を作るべき、と私はキャッシュをクリアするたびに、私はこのファイルに移動しなければなりませんキャッシュの叫びをクリアする...

しかし、それらは私の問題です。スクリプトでこのページを呼び出す方法がわかりません。 もちろん、私はこのページにユーザーをリダイレクトするボタンを作ることができますが、私はそれを1つのスクリプトで好きです。

アイデアはありますか?または、PHPを使ってDrupalキャッシュをフラッシュする他の方法はありますか?

ありがとうございます!

答えて

1

Tadaaは、それをやった:)

をちょうど私のスクリプトでこの作品のOPのPHPを貼り付けます。

$deletecachesql = "DELETE FROM cache"; $deletecachequery = mysql_query($deletecachesql) or die ("error").mysql_error(); $deletecacheresult = mysql_fetch_array($deletecachequery);

スクリプトは、キャッシュのクリアを行いますが、私はSじゃありませんそれは良いことだと思います。また、ウェブサイトから削除するように指示されました:

  • キャッシュから削除します。
  • cache_menuから削除します。
  • cache_filtersから削除します。
  • cache_pageから削除します。
  • ウォッチドッグから削除します。

これは賢明なことですか?このようにキャッシュを消去(削除)するには?

0
+0

おかげで、私は、ユーザーがdrupalのメニューを使用することを義務づけるする必要はありません。ちょうど彼のスクリプトは彼のdrupalウェブサイトを制御するための素敵なHTML/CSSファイルで動くことができます。だからモジュールと管理者メニューはありません。 – Michiel

3

いくつかのヒントを参考になっかもしれません:

  • フォームの_submitフックにdrupal_flush_allcaches();を呼び出さないのはなぜですか?ブートストラップする必要はありません。
  • また、hook_menuを持つカスタムモジュールで関数コールバックを使用してメニューエントリを作成し、スニペットを配置することもできます。もう一度ブートストラップする必要はありません。

  • 本当に別のスクリプトである必要がある場合は、インストールのルートフォルダに入れてからmysite.com/clear.phpを呼び出します。あなたはどこか別の場所に置いた場合(それは相対パスだから)、あなたはbootstrap.incする

  • をパスを変更する必要がありますが、それらだけの1をフラッシュする必要がある場合、すべてのキャッシュをフラッシュしないでください:cache_clear_all('theme_registry', 'cache', TRUE);
をお試しください
+0

Ok、いくつかの便利なヒント!どうもありがとう!ちょうどあなたに状況の良い印象を与えるために。 FOLDER =(dDrupal、fChangetheme.php、fClear.php)ここで、d-はディレクトリを表し、f-はファイルを表します。私はちょうどスクリプトのclear.phpファイルへのリンクをエコーし​​ますか? – Michiel

+0

私はその記法を理解していないし、あなたはそれをやっている方法もまだ分かっていません:)しかし、あなたは非Drupalフォームでそれをやっているなら、リンクか

。 (そのようです)。たぶん、キャッシュをフラッシュした後に、あなたはdrupal_go_toでユーザをリダイレクトすることができます – corbacho

+0

ええ、Drupalフォームではありません。それは私たち自身で書いたスクリプトです。私が見つけた解決策について、この質問に対する私の "答え"をチェックしてください... – Michiel

0

キャッシュをプログラムでmysql-statementsでクリアするように注意してください。

これはDrupalレジストリ全体を破損する可能性があり、drupalブートストラップの空白ページで終わる可能性があります。したがって、drushでも失敗する可能性があります。

これを修正する唯一の方法は、再びここから「registry_rebuild」を使用している: https://drupal.org/project/registry_rebuild

私は昨日、手動でキャッシュをクリアしようとしたそのように終わりました。 は、私は強くのようなものを使用しておくことをお勧め:リンクについて

cache_clear_all(NULL, 'cache_page'); 
OR 
drupal_flush_all_caches(); 
関連する問題