分享
 
 
 

Liferay中整合tinyMCE详解

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

摘要:

最近在使用Liferay开发一个门户网站的过程中碰到默认的在线文章编辑器无法满足用户需求的问题。Liferay默认的文章编辑器功能比较简单,且可扩展性较差。经过再三权衡,决定采用tinyMCE作为Liferay的默认在线文章编辑器。但是,官方下载的tinyMCE的advimage插件不具有图片上传的功能,需要对该插件进行扩展。经过反复琢磨,终于解决了以上的问题。现在把解决方法写出来,希望能给有需要的网友一点帮助。

最近在使用Liferay开发一个门户网站的过程中碰到默认的在线文章编辑器无法满足用户需求的问题。Liferay默认的文章编辑器功能比较简单,且可扩展性较差。经过再三权衡,决定采用tinyMCE作为Liferay的默认在线文章编辑器。但是,官方下载的tinyMCE的advimage插件不具有图片上传的功能,需要对该插件进行扩展。经过反复琢磨,终于解决了以上的问题。现在把解决方法写出来,希望能给有需要的网友一点帮助。

需要注重的是早期的liferay-3.6.1集成tinyMCE存在问题,在IE浏览器环境下不能正确显示编辑器,显示“timyMCE为定义”错误。在Firefox浏览器下可以正确显示,但是页面初始化时非常慢。经过很多尝试这些问题忍让没有解决,估计问题与Liferay的页面缓存有关。另外在liferay-3.6.1环境下上传图片时会出现图片文件大小发生变化,且文件被破坏的问题。Liferay的更新版本已经发布,且以上存在的问题可能与Liferay本身的实现机制有关,解决这些问题可能比较棘手(呵呵,假如哪位大侠知道还望不吝赐教啊!),因此实现中使用的软件版本如下:

tinyMCE:tinymce_2_0_8

Liferay:liferay-portal-tomcat-4.1.2

在使用tinyMCE前先解决tinyMCE的中文化以及中文字体的使用问题。

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接

作者:李乐鑫

原文:http://www.matrix.org.cn/resource/article/2006-11-19/Liferay+tinyMCE_c6b2d4d0-7771-11db-bdce-bdc029e475a1.Html

要害字:Liferay;tinyMCE

(一)tinyMCE的中文化以及中文字体

中文化方法:

tinyMCE的中文化问题解决非常简单。首先到tinyMCE的官方下载中文语言包tinymce_lpackage_zh-cn.jar,并将其解压(假设解压后的路径为{$LANGUAGE_PATH})。然后将解压后的{$LANGUAGE_PATH}\tinymce\jscripts\tiny_mce目录下的所有文件复制到liferay安装路径(假设liferay的安装路径为{$LIFERAY_HOME})的/webapps/ROOT/html/js/editor/tinymce目录下,修改该路径下的timymce.jsp,在tynyMCE.init中增加配置项 language : "zh_cn"。

中文字体设置方法:

默认情况下,tinyMCE编辑工具栏的字体下拉框中没有中文字体,需要在下拉框中增加需要的中文字体。修改方法如下,分别修改{$LIFERAY_HOME}/webapps/ROOT /html/ js/editor/ tinymce/themes/ 目录下的两个子目录advanced和simple目录下的editor_template.js。在var iFonts='…'和var nFonts='…'中增加中文字体,如增加“宋体=宋体;方正姚体=方正姚体”等。

(二)集成Liferay和tinyMCE

1.下载tinymce_2_0_8.zip,并解压(假设解压目录为{$TINYMCE_PATH})。然后将解压后的文件夹{$TINYMCE_PATH}\tinymce\jscripts\tiny_mce复制到{$LIFERAY_HOME}\ \webapps\ROOT\html\js\editor下,并改名为tinymce;

2. 设置Liferay应用的默认html编辑器为tinymce;(可以修改配置文件system.properties或直接修改{$LIFERAY_HOME}\webapps\ROOT\html\js\editor\editor.jsp); 修改后的editor.jsp如下:

<%@ page import="com.liferay.portal.util.Constants" %>

<%@ page import="com.liferay.portal.util.PropsUtil" %>

<%@ page import="com.liferay.util.BrowserSniffer" %>

<%@ page import="com.liferay.util.ParamUtil" %>

<%

String editorImpl = "simple";

if (BrowserSniffer.is_rtf(request)) {

editorImpl = ParamUtil.get(request, "editorImpl", PropsUtil.get(EDITOR_WYSIWYG_IMPL_KEY));

}

//editorImpl = "fckeditor";

//editorImpl = "liferay";

//editorImpl = "simple";

editorImpl = "tinymce";

// Resin won't allow dynamic content inside the jsp:include tag

RequestDispatcher rd = application.getRequestDispatcher(Constants.TEXT_HTML_DIR +

"/js/editor/" + editorImpl + ".jsp");

rd.include(request, response);

%>

<%--<jsp:include page='<%= Constants.TEXT_HTML_DIR + "/js/editor/" + editorImpl + ".jsp" %>' />--%>

QQread.com 推出各大专业服务器评测 Linux服务器的安全性能 SUN服务器 HP服务器 DELL服务器 IBM服务器 联想服务器 浪潮服务器 曙光服务器 同方服务器 华硕服务器 宝德服务器

(三)为tinyMCE增加图片上传功能

本实现采用Struts实现图片的上传。 步骤如下:

1.编写文件上传类。代码清单如下:

FileUploadAction.Java代码清单如下:

package com.family.fileupload.web.action;

import java.util.Calendar;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.actions.DispatchAction;

import com.family.fileupload.web.form.FileUploadForm;

import com.family.fileupload.web.utils.FileUpload;

public class FileUploadAction extends DispatchAction {

public ActionForward uploadImage(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

FileUploadForm uploadForm = (FileUploadForm) form;

FileUpload fu = new FileUpload(uploadForm.getFile());

String realPath = this.getRealPath("/pictures");

String fileName = this.getFileKeyRule() + "." + fu.getExtendName().toLowerCase();

String filePath = realPath + "/" + fileName;

fu.saveToFile(filePath);

request.setAttribute("fileUrl", this.getRootUrl(request) + "/pictures/" + fileName);

return mapping.findForward("image.sUCcess");

}

private String getRootUrl(HttpServletRequest request) {

StringBuffer buf = request.getRequestURL();

int length = request.getRequestURI().length();

buf.delete(buf.length() - length, buf.length());

return buf.toString();

}

private String getRealPath(String floder) {

return this.getServlet().getServletConfig().getServletContext().getRealPath(floder);

}

private String getFileKeyRule() {

Calendar cal = Calendar.getInstance();

cal.setTime(new Date());

int iYear = cal.get(Calendar.YEAR);

int iMonth = cal.get(Calendar.MONDAY) + 1;

int iDay = cal.get(Calendar.DAY_OF_MONTH);

int iHour = cal.get(Calendar.HOUR_OF_DAY);

int iMinute = cal.get(Calendar.MINUTE);

int iSecond = cal.get(Calendar.SECOND);

StringBuffer strKey = new StringBuffer(15);

strKey.append(iYear);

if (iMonth < 10) {

strKey.insert(4, '0');

strKey.insert(5, iMonth);

} else {

strKey.insert(4, iMonth);

}

if (iDay < 10) {

strKey.insert(6, '0');

strKey.insert(7, iDay);

} else {

strKey.insert(6, iDay);

}

if (iHour < 10) {

strKey.insert(8, '0');

strKey.insert(9, iHour);

} else {

strKey.insert(8, iHour);

}

if (iMinute < 10) {

strKey.insert(10, '0');

strKey.insert(11, iMinute);

} else {

strKey.insert(10, iMinute);

}

if (iSecond < 10) {

strKey.insert(12, '0');

strKey.insert(13, iSecond);

} else {

strKey.insert(12, iSecond);

}

return strKey.toString();

}

}

FileUploadForm.java代码清单如下:

package com.family.fileupload.web.form;

import org.apache.struts.action.ActionForm;

import org.apache.struts.upload.FormFile;

public class FileUploadForm extends ActionForm {

private static final long serialVersionUID = 1L;

private FormFile file = null;

public FormFile getFile() {

return file;

}

public void setFile(FormFile file) {

this.file = file;

}

}

QQread.com 推出各大专业服务器评测 Linux服务器的安全性能 SUN服务器 HP服务器 DELL服务器 IBM服务器 联想服务器 浪潮服务器 曙光服务器 同方服务器 华硕服务器 宝德服务器

FileUpload.java代码清单如下:

package com.family.fileupload.web.utils;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import org.apache.struts.upload.FormFile;

public class FileUpload {

private FormFile file;

private int fileSize;

private String fileName;

private String extendName;

private String contentType;

public FileUpload (FormFile file) {

this.file = file;

fileName = this.file.getFileName();

fileSize = this.file.getFileSize();

contentType = this.file.getContentType();

int position = this.file.getFileName().indexOf(".");

extendName = this.file.getFileName().substring(position + 1,

this.file.getFileName().length());

}

public void saveToFile(String fileName) {

try {

InputStream is = this.file.getInputStream();

int bytesRead = 0;

byte[] buffer = new byte[8912];

OutputStream os = new FileOutputStream(fileName);

while ((bytesRead = is.read(buffer, 0, 8912)) != -1) {

os.write(buffer, 0, bytesRead);

}

is.close();

os.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

public String getContentType() {

return contentType;

}

public String getExtendName() {

return extendName;

}

public FormFile getFile() {

return file;

}

public String getFileName() {

return fileName;

}

public int getFileSize() {

return fileSize;

}}

2.将以上文件编译后打包成 upload.jar,并发布到Liferay应用的包路径下({$LIFERAY_HOME}/webapps/ROOT/WEB-INF/lib);

3.编写upload.jsp并复制到liferay应用的的{$LIFERAY_HOME}/webapps/ROOT\html\js\editor\ tinymce\ plugins\advimage\目录下;

Upload.jsp的代码清单如下:

<form action="/c/portal/fileUpload?method=uploadImage"

method="post" enctype="multipart/form-data">

<input type="file" name="file">

<input type="submit">

</form>

4.编写imagePath.jsp并复制到\webapps\ROOT\html下;

代码清单如下:

<script>

function insertImage() {

var imageUrl = '<%=(String) request.getAttribute("fileUrl")%>';

if (imageUrl != '') {

opener.document.all("src").value = imageUrl;

window.close();

}

}

</script>

5. 在tinymce.jsp中增加如下代码

*/

function fileBrowserCallBack(field_name, url, type, win) {

//打开文件上传窗口

win.open("upload.jsp");

}

6. 在liferay的配置文件struts-config.XML或struts-config-ext.xml文件中增加如下配置:

增加formbean配置:

<form-beans>

......

<form-bean name="fileUploadForm"

type="com.family.fileupload.web.form.FileUploadForm" />

</form-beans>

增加action配置:

<action-mappings>

……

<action

name="fileUploadForm"

path="/portal/fileUpload"

scope="request"

type="com.family.fileupload.web.action.FileUploadAction"

parameter="method">

<forward name="file.success" path="/filePath.jsp"/>

<forward name="image.success" path="/imagePath.jsp"/>

</action>

</action-mappings>

注:本实现中有关文件上传的组件与liferay集成在同一个web应用中,事实上也可以根据实际情况将文件上传的组件独立成一个单独的web应用。但是需要对tinymce.jsp代码做适当的修改。大家不妨试试:)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有