1

メディアモジュールにフックしているカスタム 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 をまとめて削除する必要がありますか?

4

1 に答える 1