在Joomla中只包含一次javascript文件

时间:2014-03-05 11:46:45

标签: javascript jquery joomla

现在,这个问题已被多次提出并成功回答,但我没有尝试过任何工作。

我试过head.js& require.js个库

我也试过了 if (!window.unique_name) { unique_name = true; //code here.. } 我无法开展任何工作(全局变量总是未定义)
我试图包含的脚本运行如下:
//clock.js clockyTick = function() { //my code here } setInterval(clockyTick, 1000); 调用此脚本的应用程序是独立的,工作正常 只有当两个应用程序都包含在同一页面上时(通过调用PHP require()),它们才会中断。

以下是问题的原因(我认为):
我正在(Joomla)网站上构建自定义网络应用程序,并要求在同一页面上显示我的两个应用程序。
这两个应用程序都需要相同的.js文件才能正常运行,它们在独立运行时工作正常,但只要两个应用程序在同一页面上运行(在管理部分),脚本就会发生冲突并相互阻止工作
(有问题的脚本是一个动态时钟脚本,它抓取div的专用内容并将其修改为其他内容)

我认为我无法让上述库工作的原因是它们也被包含在管理页面上两次。

是否有任何方式,或者我必须咬紧牙关并将库集成到主要的Joomla模板中? (意味着图书馆在每一页上都无用地加载,但仅在数百个中使用) 每个应用程序也需要单独使用jQuery ..但幸运的是我可以使用noConflict来避免问题(不理想)

2 个答案:

答案 0 :(得分:1)

joomla的方法是在你的模块中实例化文档,并且在加载模块的脚本之前,只在 之前解释冲突脚本{/ 3}}:

  

1)获取一个实例,如果是文档对象并删除js文件(你   可以在插件中执行此操作:

<?php 
         //get the array containing all the script declarations
         $document = JFactory::getDocument(); 
         $headData = $document->getHeadData();
         $scripts = $headData['scripts'];

         //remove your script, i.e. mootools
         unset($scripts['/media/system/js/mootools-core.js']);
         unset($scripts['/media/system/js/mootools-more.js']);
         $headData['scripts'] = $scripts;
         $document->setHeadData($headData);
?>

或者在您的情况下,我认为您可以在js文件中尝试下面的脏解决方案:

//1st module script

var unique_name;

if (unique_name == false || unique_name == null) { 
    unique_name = true; 
    //code here.. 
    alert("Included 1st script");
}else{
    //do nothing
    alert("Not included 1st script")
}

//2nd module script

var unique_name;

if (unique_name == false || unique_name == null) { 
    unique_name = true; 
    //code here.. 
    alert("Included 2nd script");
}else{
    //do nothing
    alert("Not included 2nd script")
}

这是here

答案 1 :(得分:0)

如果您与PHP require()有冲突,可以尝试require_once()。但是,如上所述,这不是Joomla的处理方式。