2010-11-16 51 views
3

我有一个前端组件视图,我需要在头文件中包含一个.js文件(头文件由Joomla生成,而不是在default.php中进行硬编码)。前端组件文件是mysite.com/components/com_arrcard/views/tmpl/default.php;该javascript文件位于mysite.com/administrator/components/com_arrcard/js/CalendarPopup.js。

下面是我在尝试如default.php:

$document =& JFactory::getDocument(); 
$popUrl = JURI::root(true).'/website/documents/ccv.html'; 
$popImage = JURI::root(true).'/website/documents/cv_card.jpg'; 
$popPhone = JURI::root(true).'/website/documents/phone.html'; 

$document->addScript(JURI::root(true).'/administrator/components/com_arrcard/js/CalendarPopup.js'); 

的$ popImage和$ popPhone变量得到正确设置,但没有被添加脚本 - 当我在看呈现页面的源代码, CalendarPopup.js不在任何地方。

任何人都可以帮我吗?我在这里做错了什么?我也试过

$document->addScript('administrator/components/com_arrcard/js/CalendarPopup.js'); 

这也行不通。将管理员com_arrcard组件中的视图中包含完全相同的文件时,addScript代码可以正常工作。 addScript的工作方式有一些限制吗?

回答

2

您的代码看起来不错。也许可以尝试下面的另一种方法,第一行是包含JS,而另一个是CSS(以防有人在未来寻找css include时遇到此问题)。

JHTML::script('javascript.js', 'components' . DS . 'com_component' . DS . 'lib' . DS . 'js' . DS); 
JHTML::stylesheet('style.css', 'components' . DS . 'com_component' . DS . 'lib' . DS . 'css' . DS); 

确保您使用DS(目录分隔符),这样的Joomla可以根据该网站上运行的操作系统上正确的/或\填写。

所以你的情况,你将需要这行代码:

JHTML::script('CalendarPopup.js', 'administrator' . DS . 'components'. DS .'com_arrcard'. DS .'js'); 
+0

的JHTML ::脚本没有工作;我在joomla开发谷歌组得到了相同的答案。我很好奇为什么当addScript没有时它会工作;每种方法何时可用都存在某种限制吗? – EmmyS 2010-11-17 15:00:57

+0

我不确定。我以前成功使用过这两个。你有没有尝试把硬编码的网址,而不是使用JURI :: root()? – Martin 2010-11-17 15:20:23

+0

是的,同样的事情发生。我之前也使用过这两种方法,所以我不确定为什么一个人在另一个不在的地方工作。 – EmmyS 2010-11-17 17:46:39

0

您发布的代码应该工作。您可以在页面实际呈现并返回之前的任何时刻操作JDocument,因此无论您是在模板文件中还是在控制器或视图文件中执行该操作都不应该成为问题(实际上它在何处应该从更好的MVC角度出发)。

检查以确保在模板的index.php文件,下面的标签包括:

这可能是因为在你的管理模板(默认的,有可能的),而不是自定义模板..虽然这应该。

另一个简单的测试方法是暂时将您的模板更改为rhuk_milkyway,以查看代码是否在此处正确注入。