我有一个自定义的 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 添加 js:
/**
* @file media_flash/includes/themes/media-flash.tpl.php
*/
$javascript = '
(function ($) {
...
})(jQuery);
';
drupal_add_js($javascript, 'inline');
这个问题很奇怪。当我登录时,一切正常,一直。但是,当我将它用作匿名用户时,它在第一次加载(缓存清除后)时一切正常,但随后不再添加两个 javascript。
我试图改变我的预处理函数,所以它添加了javascript,$variables['scripts'] = drupal_get_js();
但这也有相同的行为。
我在谷歌上搜索了一下,发现了一些建议,但到目前为止没有任何效果。任何帮助表示赞赏。
谢谢,
编辑:所以我对此进行了更多研究,并且代码正在通过过滤器模块执行。似乎它第一次执行时被缓存,然后每次都从缓存中接收,所以 drupal_add_js 代码不会再次运行。
有没有办法解决这个缓存或者我需要从这部分中删除我的js?