登录 注册

登录

问题 请教:editors 类型插件与配套 content 类型插件的安装问题

更多
2009年04月09日 22:41 #1 作者: Joomla之门
为了解决诸如 如何在后台编辑器中方便地使用中文字体如“宋体”、“隶书” 这样的问题,我决定自己打造一款比较好用的编辑器。

由于本人对编程一窍不通,因此采用了“照猫画虎”的办法,通过改造一款现有的开源 Joomla 编辑器插件来实现。

目前已经取得了喜人的进展。

现在遗留一个问题:为了实现其中一个功能,需要同时安装并启用一个配套的文章内容插件(content 类型)。该插件的功能就是给页面的 <head> 部分注入 (inject)几行 CSS 和 JavaScript 调用链接。

尽管让用户通过手动修改网站模板的 index.php 文件 <head> 部分也能实现同样的目标,但是我历来都提倡“自动化”,尽量避免让用户手动修改文件;同理,虽然可以让用户分别安装这个编辑器插件(editors 类型)和内容插件(content 类型),但是我仍然希望能够将两步操作变成一步操作:用户只需要安装一个 zip 格式的插件文件即可,无需关心这个安装包进行了哪些自动设置操作。

因此,我有两个打包方向:

1、合并两个插件的安装包,使得最终文件只有一个,以“编辑器插件”的面目出现,用户安装该 zip 文件时,能够自动安装配套的 content 类型插件。这样做的结果是:在后台“插件管理”中,新增两个插件。

2、合并两个插件的安装包,最终以“编辑器插件”面世,安装此 zip 文件时,能够自动向页面(任何一个有可能调用编辑器的页面) HTML 代码的 <head> 部分插入指定的几行代码。

似乎第一种方案容易一些。因为我见过某些组件,例如 JoomFish,以单个 zip 文件出现,但是一步安装就能自动安装组件及其多个配套模块、插件。

但是我是编程门外汉,因此即使这么简单的工作,我仍然不知道该怎么去改造安装程序。因此,请熟悉 Joomla 扩展开发的高手指点一下。谢谢!

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月09日 23:41 #2 作者: ufonba
举个例子
$script='<link href="'.JURI::base().'plugins/content/ji_votitaly/css/votitaly.css" rel="stylesheet" type="text/css" />';
if(!$addScriptVotitalyPlugin){
$addScriptVotitalyPlugin = 1;
JApplication::addCustomHeadTag($script);
}
添加就是这句JApplication::addCustomHeadTag($script);

这个 E-mail 受反垃圾邮件程序保护,您需要启用 JavaScript 才能查看。
文件附件:

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月10日 12:41 #3 作者: lhping
这样应该是一个 反向安装的方法, 就是 你先安装好 所有插件,然后在数据库导出插件数据,下面就把插件数据做成安装文件,所有文件全部写入XML安装文件里,同时卸载也是一样。说简单点就是多个插件当成一个看当成一个安装。

joomla,zen-cart,shopex,ecshop 模板原创设计,QQ:372982800,
文件附件:

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月10日 17:57 #4 作者: Joomla之门
不是反向安装。我手头有两个完整的插件安装包,但是我希望合并为一个插件。

ufonba 给出的代码似乎比较接近了,从 addCustomHeadTag 这个字面看,也能猜出是给 HTML 代码添加 <head> 部分 tag 代码。不过说的有点太简单,我还不知道这段代码应该添加到哪个文件里面去。希望 ufonba 能详细指点一下。

我这个周末抽时间摸索一下,如果还不能成功,就放出内测版,仅供站内开发高手测试,同时希望能得到诸位指点,共同把这个新编辑器打造出来。谢谢!

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月10日 19:02 #5 作者: ufonba
我再详细点说明吧
$script='<link href="'.JURI::base().'这里填写你的要添加的CSS相对路径" rel="stylesheet" type="text/css" />'; 
              JApplication::addCustomHeadTag($script);
这相就可以插入CSS文件进去
如果你想插入多个就
$script='<link href="'.JURI::base().'这里填写你的要添加的CSS相对路径" rel="stylesheet" type="text/css" />'.'<link href="'.JURI::base().'这里填写你的要添加的CSS相对路径" rel="stylesheet" type="text/css" />';
然后如果想插入JS也差不多,同里改就可以了

这个 E-mail 受反垃圾邮件程序保护,您需要启用 JavaScript 才能查看。
文件附件:

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月10日 20:00 #6 作者: jackyking
往head里边添加有很多种方法...比如joe常用的字符串替换法也行...不过不推荐:(

具体有两种
$css =  '/plugins/yoursplugin/scritpts/style.css';
$js =  '/plugins/yoursplugin/scritpts/yours.js';
$document =& JFactory::getDocument();
$document->addStyleSheet($css);
$document->addScript($js');
JHTML::stylesheet('style.css','/plugins/yoursplugin/scritpts/',false);
JHTML::script( 'yours.js','/plugins/yoursplugin/scritpts/',false);

另外我有一个建议就是如果要加载js或者css做一个判断,尽量不要再所有的页面尤其是首页加载,避免导致页面加载速度的变慢...

文件附件:

本站维护下列组件汉化
  • Community Builder 1.2RC4 Qcontacts
  • uddeIM 1.6  Custom Properties Alphauserpoints
  • JomComment JComments JFusion

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月12日 15:46 #7 作者: Joomla之门
jackyking 说的没错!我也考虑到了过多的 CSS 和 JS 调用会减慢页面速度。

这个新功能需要在模板的 <head> 部分插入大约7、8行代码,分别调用多个 CSS 和 JS,因此给页面体积还是增加了不少。我们可以安装 joeguo 开发的 CSS 和 JS 压缩插件 来减少这个影响。

目前我是想分两步走:首先实现自动插入 head 部分调用代码;然后实现自动判断页面是否需要载入这些代码。

今天利用休息日自己摸索了几个小时,还是无法成功。我今晚简单打包一下,明天就发布内测版,下载链接将通过 PM 或 QQ 或 e-mail 告知以上各位关注此编辑器插件的高手。请大家群策群力,共同攻克这个难题。谢谢!

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月13日 20:43 #8 作者: dghabc
我记得原来带的tinymce编辑器是比较好用的
好长时间 没看joomla了
原来改过的一个tinymce 3的插件,也不知道放那里去了

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月14日 01:11 #9 作者: Joomla之门
感谢 dghabc 也来关注这个问题。TinyMCE 我用过,觉得不如 FCKeditor 好用。因此这次就选择 FCKeditor 作为核心了。

问题已经有了新的进展:现在只需要安装一个插件,然后手动在前台模板的 index.php 文件中插入一些代码,就能顺利工作。

需要进一步改进的是:如何让编辑器插件在安装时自动插入这些代码,而不是要求用户去手动修改 index.php ?

新版本(4月14日1点修订版)我已经重新上传,只有一个压缩包(文件比较大,请使用“通过网址安装”),无需解压。内有说明文档。

下载链接不变,请收到内测版下载地址的朋友重新下载新版本,然后提出代码修订意见。可以在此回复,也可以用 email 联系我。谢谢!

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月14日 12:25 #10 作者: jackyking
个人的建议就是还是分成两个插件比较好...

可以写到一个安装文档中,但是合在一个插件里边并不是很合适

syntaxhighlighter是需要在content事件中触发的,在每个页面都会加载

而editor插件类不是在每个页面都会触发的...

强行合在一起不确定会不会正确触发

文件附件:

本站维护下列组件汉化
  • Community Builder 1.2RC4 Qcontacts
  • uddeIM 1.6  Custom Properties Alphauserpoints
  • JomComment JComments JFusion

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月14日 13:32 #11 作者: 果农

问题已经有了新的进展:现在只需要安装一个插件,然后手动在前台模板的 index.php 文件中插入一些代码,就能顺利工作。

需要进一步改进的是:如何让编辑器插件在安装时自动插入这些代码,而不是要求用户去手动修改 index.php ?

这个问题就好解决了,再做一个插件用来处理这件事情是比较容易地,附件就是用来处理该事务的一个插件。


另:根据老白的要求,PHP脚本中尽可能详细的写上了注释,嘿嘿,虽然没几行代码

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月14日 16:58 #12 作者: kolidon
晕,hoping兄好快。
我凌晨收到代码,刚才看了一下,发现俺以前似乎做过类似的,改了改正好拿过了。
不同的是,俺是直接改的jck.php

line 189-line 238为新增的
根据是否存在代码引用及是否已经有代码,确定是否需要额外附加代码。

请老白或者哪一位将js文件拼合压缩后再将这个文件简化一些。

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月14日 17:32 #13 作者: Joomla之门

个人的建议就是还是分成两个插件比较好...


如果从技术上无法实现一个插件解决,我可以很方便地退回“两个插件”的解决方案,因为这两个插件都是现成的,人家已经做得很好了。

但是,我宁可相信:凡事皆有可能。如果我们将两个插件合并,对于终端用户来说,将是非常方便的。所以,请大家放手一试,如果实在解决不了,再退回起点。

这个问题就好解决了,再做一个插件用来处理这件事情是比较容易地,附件就是用来处理该事务的一个插件。


汗!本来就是要将两个插件合并,现在 hoping 反倒拆分成两个插件了,呵呵。可能我没有给你解释清楚。在本帖下面我会再次解释一下我的创意。

俺是直接改的jck.php


虽然我还没有测试,但是我认为 kolidon 这个思路跟我差不多,一定要想方设法在 JCK 编辑器上修改代码,而不能借助于另一个内容插件。


OK,为了让各位高手有一个明确的目标,我重新梳理一下:

各位能够下载到的新版本已经是一个插件加上一段代码,这段代码如果能自动插入到模板的 index.php 就完成了初步合并。

接下来的问题是:用户可能会换模板;某个文章中可能没有插入程序代码,或者文章系统以外的页面上几乎不需要加载这些 JS,如何让插件自动判断?

我的想法是:最好不要修改 jck.php 文件,因为这个编辑器插入源代码的那个弹出对话框并不是 FCKeditor 本身的功能,而是一个插件。

参看: Code Syntax Highlight Plugin for FCKedito

也就是说,只有当用户在编辑器上点击那个按钮插入源代码时,才需要触发这种语法高亮系统。

因此,我建议大家在这个 syntaxhighlight 插件上动心思。

可否这样:

目前已知不管我们插入什么代码,都会在页面的 HTML 代码中生成 <pre name="code" ....> 这样的片段,不管其它参数怎样,前面这一段总是不变。因此我觉得这个可以作为一个探测对象。

能否让这个 syntaxhighlight 插件在用户按下“确定”按钮并插入代码之后,就自动给当前页面的 <head> 部分以及 </body> 之前插入我在 readme 中提到的那些代码?如果用户没有插入代码,比如说先插入后来又删除了,那么通过自动探测 <pre name="code" ...> 是否存在而决定是否插入这些代码。

另外,一篇文章中可能插入好几次程序代码,必须让这个插件智能一些,不能每次展示源代码它就插入一次 JS 调用,那就重复了。

除了文章系统,我们还应该考虑到,某些评论组件是允许调用系统编辑器的。因此,读者也可能会通过这个编辑器给评论内容中插入程序代码,这个插入动作仍然需要某个插件去动态探测。

所以说,这个插件的改造还是有一定难度的。如果大家觉得实现起来太困难 —— 我希望各位高手充分发挥自己的编程水平,不要轻易放弃 —— 如果最终还是不行,我们就退回起点,用两个插件来解决。

感谢各位的分享!静候佳音。

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月14日 17:41 #14 作者: 果农
哦,看来是我理解错了。
既然要这样,那么可将kolidon兄的那段代码加在jck的plugin:syntaxhighlight里面就得了
嘿嘿,不过,我倒是不怎么喜欢数据库里同时存放一些重复的东东

刚看了下那个plugin的代码,似乎不大可能实现,因为它不获取jck的编辑框的内容,哪位对fck有研究可以跟进

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月14日 18:00 #15 作者: 果农
刚才在尝试着修改这个JS的plugin,不保证会成功。
下面再提两点意见:
如果是在编辑器中处理:
1、无法处理SEO后的URL,可能会导致路径不对而无法获取JS及CSS文件(当然以绝对路径写入的就无谓了)
2、如果是以blog格式输出,而intro中恰好有代码的话,那么,同一页面将会有至少1个CSS及JS引用,导致页面内重复代码过多。

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月14日 18:18 - 2009年04月14日 18:24 #16 作者: 果农
我是按照下面的步骤测试地:
在code对应的窗体中点了OK以后,先检查一个预设值,当预设值不存在时,自动插入需要插入的代码。
这样,可以避免重复插入相同的代码。
但是这样产生的问题就是:
只有第一段code可以高亮,在插入的js以后的code不会再被此plugin处理到。
那么,换一句话说,就是必须将这段js保存在正文的最后。
这样,不修改jck似乎很难办到。

当然,如果熟悉fck的内部数据调用机制,使用此方法还是可以地。
最后修改: 2009年04月14日 18:24 由 .

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月14日 21:05 #17 作者: Joomla之门
OK,如果确实需要修改 jck.php 这个文件,那么我希望能增加几个参数。

因为,这个方案的初始版本:两个插件那个方法,其中那个内容插件( Joomler's SyntaxHighlighter Plugin )就能完成 JS 调用,并且支持同一个页面内多次展示源代码,同时它还有几个参数,例如:排除某个文章单元/类别。因为某些文章单元或类别根本不会发生展示源代码的情况,比方说新闻栏目,这样就能减少页面体积,加快载入速度。

而我现在的最终想法就是:将 JCK 编辑器与 Joomler's SyntaxHighLighter 插件融合为一个插件。如果做不到,我们可以回到同时安装这两个插件的方案去。

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月15日 08:12 #18 作者: 果农
这样做还会遇到一个问题,就是JCK每打开一篇文章都 得判断一下,上一次是否已经做了code处理,或者干脆点,每篇文章都加对code的引用。
分类的排除,也会有这种情况:每篇文章都加?还是每次打开时都判断?还是在保存时判断是否已经加了CODE的引用,本次是否需要加?
每篇都加的后果就是:如果BLOG引用的话,有可能CODE会没效果。因为CODE引用的代码需要加在至少是文章的最后。
个人的观点:不推荐。

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月15日 08:22 #19 作者: Joomla之门
听 hoping 一言,恍然大悟。

而且我回头看 Joomler's SyntaxHighLighter 插件,似乎他并没有在 </body> 中添加任何代码(或许我没看清楚?)。

请 hoping 抽空研究一下 Joomler's SyntaxHighLighter 插件 ,我们来决定一件事情:将这个插件与 JCK 编辑器合并为一个插件好,还是分别安装两个插件好?

如果能方便地合并,同时又完全不影响使用效果,我还是赞成合并,毕竟对用户来说少执行一次安装操作。

另外,今天再提出一个新命题:我发现 JCK 编辑器在卸载的时候,不能自动删除 plugins/editors/jck 这个目录。我在 JCK 的安装包里面也没有找到 install.php 或 uninstall.php ,是不是缺少 uninstall.php 文件造成的?能否给它添加一个“卸载时自动删除 plugins/editors/jck 目录”的功能?

我昨晚测试了 kolidon 修改的 jck.php ,似乎不能工作。不知道 kolidon 测试的结果如何?

付费下载 Joomla 3 扩展汉化版: 我要付费支持 Joomla 之门!

登录 或者   注册一个会员帐号 来参与讨论

更多
2009年04月15日 09:41 #20 作者: 果农

因为,这个方案的初始版本:两个插件那个方法,其中那个内容插件( Joomler's SyntaxHighlighter Plugin )就能完成 JS 调用

已经看过了,它也是通过content的plugin来实现地,当然可以插入代码,插入多次调用了。
顺便公开一下我站上使用的GeSHI,呵呵
对GeShi插件的一点修改

登录 或者   注册一个会员帐号 来参与讨论