最近遇到这样的一个问题。开发了一个验证码插件,为了实现点击图片进行验证码切换,需要进行Ajax调用。在joomla中使用ajax最直接的方 法就是当做组件的task使用,为此又开发了一个组件。现在所有的代码都可以用了,但是我发现为了让用户使用这个验证码,必须同时安装两个扩展。也就是说 用户需要执行两次标准的安装操作。这非常的不友好,那么有没有办法一个安装包同时安装多个扩展呢?通过分析kunuea论坛的实现,自己尝试了很久都没有 成功。后在群里的朋友的推荐下找到了一篇文章。原文的地址是:http://jeffchannell.com/Joomla/install- multiple-joomla-extensions-in-a-single-package.html。依据这篇文章的,自己来尝试实现一下。
通过阅读原文,大体理解了整个安装过程的安装原理了。
1,安装程序会在安装完成的时候执行一个文件,这个文件的名称为component.install.php(到底component.install.php还是componet_name.install.php这个还不确定)。可能是joomla版本的问题,两种方式都不能使用。在j25中可以使用<scriptfile>script.php</scriptfile>来指定一个安装时执行的脚本,这个已经测试成功。
2,我们可以调用系统的安装程序来进行一个自定义的安装。
为了实现这两个目标,我们首先得将需要安装的扩展的安装包放到组件的xml文件中,让他随着一起拷贝过去。然后就是new一个JInstaller对象,让他来执行安装。
大致的代码如下:
jimport('joomla.installer.helper'); $installer = new JInstaller(); $pk_path = JPATH_BASE.DS.'modules'.DS.'mod_login'.DS."extensions".DS; $pk_file = "zmcaptchav1.0.0-2014-09-12.zip"; $package = JInstallerHelper::unpack($pk_path.$pk_file); if($installer->install( $package['dir'])) ....... JInstallerHelper::cleanupInstall($pk_path.$pk_file ,$package['dir']);
先定位目标安装包,然后解压,最后安装,安装完成后进行清理。这就是基本的原理。在下一节中将就这个原理来制作一个安装包。
评论 (0)