2011-11-10 13 views
1

各ユーザーロールに別々のテーマを適用したい。私は管理者側からこれを行うオプションがあることを知っていますが、私はプログラムでこれをやりたいのです。
グローバル$ custom_themeを使ってオプションが見つかりました。私はテーマをプログラムで適用する

function mymodule_config_preprocess_page(&$variables) { 
global $custom_theme; 
$custom_theme = 'bluemarine'; 
init_theme(); 

}

として私のコードを変更しかし、これは任意の変更を必要と.Isそれがテーマに影響を与えていませんか?

function mymodule_init() { 
    global $custom_theme; 
    $custom_theme = 'bluemarine'; 
} 

私の知る限りでは:

PLSのは、私はあなたがおそらくhook_init()でこれをやりたいだろう、それは前処理変数のポイントでテーマを変更するには遅すぎると思う私に

答えて

3

を助けますDrupalは後でこの処理を行うため、$custom_themeを使用して、使用するテーマを決定するので、init_theme()に電話する必要はありません。

+0

でテーマ変更を実施するための最良のフックだ私は、テーマが適用されたcondtionを変えたが、UTは私に警告メッセージ "の警告提供します:call_user_func_array()[function.call-ユーザーfunc-を配列]:最初の引数が有効なコールバックであると予想され、「 –

+1

」に「phptemplate_menu_local_tasks」が指定されています。このパス:/ admin/build/themesに移動します。下にスクロールして[設定を保存]をクリックすると、キャッシュがクリアされ、問題が修正されます。 – Clive

+0

ごめんなさい。もう1つ問題があります。テーマはブロックページには影響しません。管理者/ビルド/ブロック –

0

mymodule_config_preprocess_page()が実行されると、テーマは既に初期化されています。いったん初期化されると、テーマを再初期化することはできません。

ThemeKeyモジュールコードを参照すると、$custom_themeの値がhook_init()に変更されます。それはおそらくDrupalの6

function mymodule_init() { 
    global $custom_theme; 
    $custom_theme = 'bluemarine'; 
} 
関連する問題