我有一个自定义的Drupal 7模块,它连接到media模块,我无法在其渲染中添加一些js。将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。
我试图改变我的预处理函数,所以它增加了与这个$variables['scripts'] = drupal_get_js();
的JavaScript,但这也具有相同的行为。
我搜索了一下,发现了一些建议,但到目前为止没有任何工作。任何帮助表示赞赏。
感谢,
编辑:所以,我看着这个多一点,代码正在通过滤波器模块执行。看起来好像它第一次被执行后会被缓存,然后每次都从缓存中收到,所以drupal_add_js代码不会再运行。
有没有办法解决这个缓存问题,还是我需要从这个部分一起删除我的js?
drupal_add_library( '系统', 'ui.autocomplete'); ? – rix 2013-05-07 16:39:48
以下链接可能会对您有所帮助:http://smenzo.id.au/content/rebuilding-drupal-7-theme-every-request – ankur140290 2013-05-30 05:34:19