CKEditor或者FCKEditor编辑器的分页处理

CKEditor就是FCKEditor的改名版本,呵呵。基于javascript的前端HTML编辑器,一般做内容管理系统的基本都用过这个编辑器,很强大很方便。

做内容管理某个内容可能文字会很多,分开发表的话不方便维护管理,一般就是直接使用CKEditor的分页功能,说白了这个无非就是类似下面的一段HTML代码:

 

如果要想在前台输出的时候分页是做不到的。我一般会有两种方式进行处理:

1.利用服务端在输出到页面前进行分页。

2.利用前端javascript直接进行分页。

习惯上我比较喜欢第一种,呵呵。第二种在目前的项目中准备要用到。

先说第一种方式,其实就是利用PHP将CKEditor的分页代码替换为某个标识符,然后进行下一步处理。

比如,利用正则将分页代码替换为“<!–/*page-breaker*/–>”

<?php
$content = preg_replace('/<div\s*style\s*=\s*"page-break-after\s*:\s*always\s*;\s*"[^<\/div>]*>\s*<span\s*style\s*=\s*"\s*display\s*:\s*none\s*;\s*"\s*[^<\/span>]*>(.+)<\/span>\s*<\/div>/iUs',"<!--/*page-breaker*/-->",$content);
?>

这样就将HTML的分页代码替换为一个常规的字符串。然后利用explode函数重组为数组进行分页处理。当然,如果喜欢可以每次都使用正则直接输出一个数组^_^

第二种方式,是参考别人利用jQuery写的:http://www.blogjava.net/haha1903/archive/2010/06/23/324223.html,暂时没使用过,记下来备用吧,呵呵。

$(function() {
 var top = "#content";
 var content = $(top);
 var all = content.find("*");
 var pages = [];
 function hideContent() {
 all.hide();
 }
 function showArray(arr) {
 $.each(arr, function(i) {
 this.show().parentsUntil(top).show();
 });
 }
 function initPages(pageBreaks) {
 pageBreaks.each(function(index) {
 $(this).attr("id", "pageBreak" + index);
 });
 var current = 0;
 pages[0] = [];
 all.each(function(i) {
 var id = $(this).attr("id");
 if(id == "pageBreak" + current) {
 current++;
 pages[current] = [];
 } else {
 pages[current].push($(this));
 }
 });
 }
 function showPage(i) {
 hideContent();
 showArray(pages[i]);
 }
 var pageBreaks = content.find("div[style]").filter(function() {
 return $(this).css("page-break-after") == "always";
 });
 if(pageBreaks.size() > 0) {
 initPages(pageBreaks);
 $("#pagingBar").pagination(pages.length, {
 callback: function(index) {
 showPage(index);
 },
 prev_text: '<',
 next_text: '>',
 items_per_page: 1,
 num_display_entries: 5,
 num_edge_entries: 2
 });
 showPage(0);
 }
 $("#content").show();
});
标签:CKEditor, FCKEditor, HTML, Javascript, jQuery, 开发, 正则

评论当前被关闭。

Deepseath Modified from Green Hope Theme · Proudly powered by WordPress · 津ICP备09005418号-1  津公网安备 12010302001005号