整合Editlet到MT 首先将Editlet上传到MT所在的Web服务器,可以放在任意目录,我的目录结构如下:/index.html /archives/ /weblog/static/ /weblog/editlet/ /weblog/editlet/editlet.html /weblog/editlet/editor.html MT模板 MT的后台管理页面均使用了模板,存放在目录 /tmpl/cms/ 。有两个模板与Entries的新增与编辑相关,分别是:header.tmpl、edit_entry.tmpl 。 editlet.html 主要做了如下几件事: 在head 部装载editor.js...
整合Editlet到MT
首先将Editlet上传到MT所在的Web服务器,可以放在任意目录,我的目录结构如下:
/index.html
/archives/
/weblog/static/
/weblog/editlet/
/weblog/editlet/editlet.html
/weblog/editlet/editor.html
MT模板
MT的后台管理页面均使用了模板,存放在目录 /tmpl/cms/ 。有两个模板与Entries的新增与编辑相关,分别是:header.tmpl、edit_entry.tmpl 。
editlet.html 主要做了如下几件事:
- 在head 部装载editor.js 脚本,并定义Editlet程序文件的存放路径。
- 在body 标签中定义事件处理。
- 生成编辑工具条与文本区域。
- 为文本区域设定初始编辑内容。
- 保存文本区域的内容。
要实现整合,我们就需要把这几项功能实现在MT的以上两个模板中。
修改MT部分
我们把第1、2项功能放到header.tmpl 中实现。
打开header.tmpl 进行编辑,在<head>与</head>之间加入editlet.html 头部的脚本:
<script type="text/javascript" xsrc="/weblog/editlet/editor.js" mce_src="/weblog/editlet/editor.js"></script>
<script type="text/javascript">
var path="/weblog/editlet/";
</script>
其中变量path 指定为editlet目录的web绝对路径。
在<body>标签中加入editlet.html <body>标签中的script:
<body onafterprint="return window_onafterprint()" LANGUAGE="javascript">
保存header.tmpl ,注意修改文件之前先进行备份。
打开edit_entry.tmpl 进行编辑。先找到<form> 标签,在标签中加入:
onsubmit="return getContent();"
<form name="entry_form" method="post" onsubmit="return getContent();" action="<TMPL_VAR NAME=SCRIPT_URL>">
接着找到那个叫做Entry Body 的文本区域(textarea),将其注释掉:
<!--
<textarea class="full-width" name="text" id="text" tabindex="3" rows="<TMPL_IF NAME=DISP_PREFS_SHOW_EXTENDED>10<TMPL_ELSE>20</TMPL_IF>"><TMPL_VAR NAME=TEXT ESCAPE=HTML></textarea>
-->
在后面使用MT的<INCLUDE> 标签将editlet.html页面包含到这里,路径要写成editlet.html 在服务器上的文件系统绝对路径,写成web的绝对或相对路径都无法工作。
<INCLUDE TMPL="/var/www/html/weblog/editlet/editlet.html">
为了装载和保存编辑内容,添加一个隐含的文本框,id、name、value等属性与注释掉的<textarea> 相同:
<input name="text" id="text" type=hidden value="<TMPL_VAR NAME=TEXT ESCAPE=HTML>">
对MT的修改到此结束。
修改Editlet部分
打开Editlet.html 进行编辑。首先删除<table> 标签之前以及</table> 标签之后的所有代码,以上部分已经在MT模板中实现了。
接下来删除<form> 与</form> 标签之间的所有代码,保存的功能将通过在MT模板中定义的onsubmit 事件在editor.js中完成。
函数setContent() 用于设置文本区域的初始内容,我们将其改为:
//setContent('Your Content');
setContent(document.entry_form.text.value); text 在edit_entry.tmpl 中定义,打开一个Entry 时,MT将数据写入这个文本框,保存时,MT读取其内容并保存。
函数setEditlet(path) 用于生成工具条和文本区域,保留这个部分。
为了使文本区域的宽度适合MT,修改<table> 标签:
<!--
<table border="0" width="760" cellspacing="0" cellpadding="2" style="HEIGHT: 151px; WIDTH: 760px">
-->
<table border="0" width="580" cellspacing="0" cellpadding="0" style="HEIGHT: 151px; WIDTH: 580px">
打开editor.js 进行编辑。
函数getContent() 将会在编辑内容被提交时执行,我们只需将此函数获得的文本区域内容交给MT来处理,修改如下:
//document.form1.hid_out_content.value = content1;
//document.form1.submit();
document.entry_form.text.value = content1;
变量content1 是Editlet 获取的文本区域内容。
找到函数setEditlet() 的定义,将其中的函数调用replace() 注释掉,replace() 所处理的一些转换,MT已经做过了,否则会重复处理。修改后如下:
function setEditlet(path){
setEditor(path);
//replace();
} 接下来修改一些配置参数。
将编辑区域的宽度缩小,以适合MT:
//var editorwidth = 900 ;
var editorwidth = 580 ;
关闭一些不使用的按钮,以使工具条宽度不超过580,只需要设置哪些后缀为"_flag" 的参数,将值改为0 即可。
var table_flag = 0 ;
var help_flag = 0 ;
var clean_html_flag = 0 ;
var spellcheck_flag = 0 ;
var save_flag = 0 ;
var open_flag = 0 ;
var xhtml_flag = 0 ;
在编辑区域中按回车键,默认会产生一个<br> 标签,如下修改后,将产生<p> </p>标签,依个人编辑喜好而设定。
//var CarriageReturn = false;
var CarriageReturn = true;
Editlet 部分修改完毕。
测试
至此,基本功能整合完毕,进入MT后台管理,进行测试。
选择“NEW ENTRY”,应该可以看到新的编辑界面,测试一下各编辑按钮是否正常工作,测试保存功能。
选择“ENTRIES”,选择一篇已有文章打开编辑,测试原有内容是否正常装入,有无重复转换字符(比如空格、双引号"、连接符&)的问题,测试保存功能。
参考资源