4

$ theme_registry ['page'] ['preprocess関数']の下の最後の項目であるにもかかわらず、hook_preprocess_pageの&$variablesへの変更がレンダリングされないという問題があります。$ variableの内容をファイルに記録すると、内容が変更されたことが示されますが、サイトでは内容は変更されていないように見えます。drupalですべてのキャッシュをフラッシュし、すべてのブラウザーキャッシュをフラッシュしましたが、それでも同じ結果になりました。

/**
 * Implementation of hook_preprocess_page().
 */
function grinchlist_preprocess_page(&$variables) {

  if (grinchlist_usercheck($variables['user']['uid'])) {
    $variables['scripts'] = preg_replace('/<script[^>]*christmas_snow.*<\/script>/','',$variables['scripts']);
  }
  file_put_contents('/tmp/vars.txt',print_r($variables,true));
}

/tmp/vars.txtには変数が正しく表示されますが、ブラウザーにはロードされているスクリプトが表示されます。

これはばかげた例かもしれませんが、他のインスタンスでhook_preprocess_pageでこの問題が発生したので、ここで何が起こっているのかを理解するのに本当に役立ちます...

ありがとう。

4

3 に答える 3

3

報告されたコードにエラーが含まれています。IFステートメントは、から修正する必要があります

if (grinchlist_usercheck($variables['user']['uid'])) {
  // ...
}

if (grinchlist_usercheck($variables['user']->uid)) {
  // ...
}

モジュールの 1 つで使用hook_preprocess_page()していますが、呼び出された関数によって変数の内容が変更されます。

次に、Richard M が報告したように、関数は から含まれる JavaScript ファイルのリストを取得する必要がありますdrupal_get_js()

于 2010-06-17T03:06:25.087 に答える
2

おそらく (これが CSS インクルードと同じように機能すると仮定して)drupal_get_js関数の最後で次のように呼び出す必要があると思います: $variables['scripts'] = drupal_get_js();.

于 2009-12-23T21:22:25.543 に答える
0

私はこれが古い質問であることを知っていますが、私はちょうどそれを打ちました、そして私は答えを知っていると思います。

jquery_updateがこれを引き起こしていると思います。

jquery_updateは、jquery_update_preprocess_pageが最後に実行されるように$theme_registryを変更するhook_theme_registry_alterを実装します。これは、ピーターが$ theme_registryで見たものにも関わらず、変更は彼が見た後に行われるためです。

jquery_updateはdrupal_add_js()から$ scriptsを取得し、配列をいじってから$variables['scripts']をリセットします。これにより以前に行われた変更が上書きされます。

完璧な解決策が何であるかわかりません。スクリプト文字列を直接混乱させることは想定されていないと思います。私は特別な1ページのケースを持っているので、jquery_update_preprocess_pageからコードを呼び出すというやや悪いことをするつもりです。Drupal6のjquery_updateが現在更新される可能性は低いです。それは、誰が最後に来るかという決闘に参加するよりも良いようです。

于 2012-03-19T14:33:33.787 に答える