我有一个前端组件视图,我需要在头文件中包含一个.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的工作原理是否存在一些限制?
答案 0 :(得分:2)
您的代码看起来确实正确。也许尝试下面的另一种方法,第一行是包含JS,而另一种用于CSS(以防万一有人在将来偶然发现css包括这个)。
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');
答案 1 :(得分:0)
您发布的代码应该有效。您可以在实际呈现和发回页面之前的任何时刻操作JDocument,因此无论您是在模板文件中还是在控制器中执行它或查看文件(这实际上都是它)都不应该是一个问题应该从更好的MVC角度出发。)
检查以确保在模板index.php文件中包含以下标记:
可能是你的管理模板(可能是默认模板),但不是自定义模板..虽然它应该。
另一种简单的测试方法是暂时将模板更改为rhuk_milkyway,以查看代码是否在那里正确注入。