メディアモジュールにフックしているカスタム Drupal 7 モジュールがあり、レンダリングにいくつかの js を追加するのに問題があります。
モジュールは次のようなテーマを定義しています:
function media_flash_theme($existing, $type, $theme, $path) {
return array(
'media_flash_video' => array(
'variables' => array('uri' => NULL, 'options' => array()),
'file' => 'media_flash.theme.inc',
'path' => $path . '/includes/themes',
'template' => 'media-flash',
)
);
}
そして、私のフォーマッタ(ビュー)は私の要素を次のように返します:
$element = array(
'#theme' => 'media_flash_video',
'#uri' => $file->uri,
'#options' => array(),
);
return $element;
今、私はいくつかのjsを追加する前処理関数を持っています:
function media_flash_preprocess_media_flash_video(&$variables) {
$path = libraries_get_path('swfobject');
drupal_add_js($path . '/swfobject.js');
...
}
また、テンプレート ファイルに drupal add js を追加します。
/**
* @file media_flash/includes/themes/media-flash.tpl.php
*/
$javascript = '
(function ($) {
...
})(jQuery);
';
drupal_add_js($javascript, 'inline');
問題は奇妙です。ログインすると、すべてが常に正常に機能します。ただし、匿名ユーザーとして使用している場合、最初のロード (キャッシュのクリア後) はすべて正常に動作しますが、2 つの JavaScript が追加されなくなります。
前処理関数を変更しようとしたので、これにjavascriptが追加されました$variables['scripts'] = drupal_get_js();
が、これも同じ動作をします。
少しグーグルで検索していくつかの提案を見つけましたが、これまでのところ何も機能していません。どんな助けでも大歓迎です。
ありがとう、
編集:だから私はこれをもう少し調べて、コードはフィルターモジュールを介して実行されています。最初に実行されたときにキャッシュされ、その後は毎回キャッシュから受信されるように見えるため、drupal_add_js コードは再度実行されません。
このキャッシュを回避する方法はありますか、それともこの部分から js をまとめて削除する必要がありますか?