2013-05-07 47 views
1

我有一个自定义的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?

+0

drupal_add_library( '系统', 'ui.autocomplete'); ? – rix 2013-05-07 16:39:48

+0

以下链接可能会对您有所帮助:http://smenzo.id.au/content/rebuilding-drupal-7-theme-every-request – ankur140290 2013-05-30 05:34:19

回答

相关问题