快速开发技巧 – 移除Mootools
网页开发的一个事实是,没有两个人的工具完全相同 - 为什么JavaScript框架应该有所不同呢?无论您使用jQuery、Prototype、YUI、Dojo还是介于两者之间的任何东西,我们在开发工具的选择上都应该有自由。
让我澄清一下关于Joomla使用Mootools作为JavaScript框架的立场:我理解其必要性。不是Mootools本身的必要性,而是需要一个官方由核心CMS框架支持的单一JavaScript框架的必要性。好处是巨大的 - 它通过确保最终用户将从第三方开发者那里获得一致体验来标准化核心和扩展开发。
我个人是jQuery的超级粉丝。我几年前开始学习这个JavaScript框架,当我开始全职开发Joomla扩展时,我寻找了一种方法来使用我的jQuery技能,而不用担心Mootools会阻碍我。jQuery支持一种称为“无冲突”模式的东西,允许它在其他JavaScript框架运行时工作,但这可能会很麻烦,因为并非所有jQuery插件都编写来支持无冲突,使用两个独立的JavaScript框架可能会导致旧电脑速度显著减慢。无论如何,我更喜欢移除Mootools,按照自己的方式工作。
注意:遗憾的是,移除Mootools仅适用于内部开发人员和正在自己个人网站上工作的人。那些创建第三方扩展的人将不得不忍受Mootools,或者以避免与Mootools库冲突的方式加载他们的JavaScript框架。
那么,我们如何移除Mootools?仅仅从Joomla安装的media/system/js文件夹中删除它并不能正常工作 - 系统仍然会尝试包含该文件,但现在您在每次页面加载时都会有一个错误的HTTP请求。我们需要一次空袭,彻底从您的最终HTML中消除Mootools的存在。幸运的是,这可以通过使用插件轻松实现。
在文件目录 /plugins/system 中创建一个名为“removemootools.php”的新文件,并插入以下代码(您还需要在数据库中注册此插件)。
class plgSystemRemoveMooTools extends JPlugin
{
public function onAfterDispatch()
{
$app = JFactory::getApplication();
if($app->isSite()) //Only ever remove MooTools from the client-side, never the admin side
{
$mootools = JURI::root(true).DS.'media'.DS.'system'.DS.'js'.DS.'mootools.js';
$document = JFactory::getDocument();
unset($document->_scripts[$mootools]);
}
}
}
注意:这仅移除了核心 MooTools 框架。Joomla! 会自动加载许多其他使用 MooTools 的文件,但移除它们就像在您刚刚创建的插件中添加另一个 unset() 一样简单。
一旦您打开管理界面并启用插件,您会发现 MooTools 已从您的整个网站上消失。那么,代码是如何表现的?首先,我们检查确保我们正在处理 Joomla! 的客户端。Joomla! 的管理部分彻底集成了 MooTools,移除它将几乎禁用您的管理员面板。
好了!MooTools 已从网站上移除。现在您可以自由地在模板中包含您喜欢的任何 JavaScript 框架,无需担心 MooTools 的干扰!
挑战:尝试重新编写插件,使其根据您当前所在的组件有选择地移除 MooTools 或您的 JavaScript 框架。如果您需要为某个组件使用 MooTools 而为另一个组件使用 jQuery,您可以在插件中创建异常,以适应您网站不断变化的需求。这将防止冲突并消除浏览器同时加载两个框架的需求。
在 Joomla 社区杂志上发表的一些文章代表了作者对特定主题的个人意见或经验,可能并不代表 Joomla 项目官方立场。
通过接受,您将访问 https://magazine.joomla.net.cn/ 外部的第三方服务提供的服务
评论