[项目过程中所遇到的各种问题记录]编辑器篇——使用FCKeditor生成静态分页HTML

简介:

  继续编辑篇的内容,本文是编辑器篇的最后一篇,前面2篇分别是FCKeditor相关知识及各种常见使用问题FCKeditor自定义上传路径配置,今天这篇文章主要是介绍如何使用fckeditor来生成静态分页HTML。

以下是本文所要介绍的内容:

1、生成静态化分页HTML分析

2、具体实现

 

一、生成静态化分页HTML分析

     在实际的网站开发过程中,我们总是想通过各种方式提高网站的性能,其中比较有效的方式就是:缓存、网页静态化、异步加载等等,今天这边主要讨论的是静态化页面的生成。

     在一般的资讯网站上使用静态化的页面比较多,因为像新闻等资讯时效性比较强,一般生成了一个静态页面就可以一直使用,而需要生成静态页面一般分为以下2个步骤:

1、制定好静态化页面的模板,在模板中需要将需要放内容的地方留好占位符,以方便将内容替换进去(制定模板的时候需要考虑好整体文章的样式、分页的样式等)。

2、在后台编辑器中将内容编辑好,然后将内容填充到模板当中并在指定目录下生成静态页面。

一般来说,生成静态化页面没什么难度,主要麻烦的就是静态化页面的分页,因为有时候一篇新闻或者文章过长不可能将内容都放在一个页面里呈现,这时就需要将页面进行分割,分成多个页面来展示,但是由于是静态页面无法像动态页面那样放个控件就实现分页,所以需要在生成页面的时候就将分页的链接生成在静态页面中。

 

二、具体实现

     根据上面的实现分析,我们首先来制定下模板页面,看下面的模板页面代码:

1
2
3
4
5
6
7
8
9
< body >
    < div >
         <!--正文 -->
         {0}
         < br  />
         <!--页码-->
         {1}
     </ div >
</ body >

可以看到我这边仅仅就是做了个简单的模板,就存放正文和页码,实际开发过程中,模板肯定比这个复杂多了,这边仅仅是给出个实现方法,具体的细节需要自己去完善。

接下来就是重要的后台发布页面了,具体可看源码中:news\template\Default.aspx页面。

其中有2点需要注意:

1、因为考虑到发布的内容可能需要分页,所以我这边的专门放了一个按钮是用来插入分页符的(分页符为<pager>,这样可以保证这个分页符是特殊的,不能和正常的HTML元素重复,否则分页会分错)

分页按钮JS代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function  AddPage() {
     //获取FCKeditor对象及其内容
     var  fck = FCKeditorAPI.GetInstance( "FCKeditor1" );
     var  content = fck.EditorDocument.body.innerHTML;
 
     //获取页面缓存的文章分页内容,同时需要将内容URI解码(由于内容中会有汉字)
     var  allContent = decodeURIComponent(document.getElementById( "<%=hfContent.ClientID %>" ).value);
     //判断分页内容是不是未定义或空
     if  (allContent != undefined || allContent != null ) {
         allContent += content + "<pager>" ;
     }
     //将分页内容放入缓存
     document.getElementById( "<%=hfContent.ClientID %>" ).value = encodeURIComponent(allContent);
     //清空FCKeditor中内容
     fck.EditorDocument.body.innerHTML = "" ;
     //清空分页按钮列表
     jQuery( "#pagelist" ).html( "" );
     //分隔获取每个分页内容
     var  contentList = allContent.split( "<pager>" );
     //根据分隔出来的列表进行生成相应的分页按钮列表,同时为按钮添加相关查看事件
     for  ( var  i = 0; i < contentList.length; i++) {
         var  pagebutton;
         if  (i != contentList.length - 1) {
             pagebutton = "<span class='pagelink' onclick='GetPage("  + i + ",this)'>"  + (i + 1).toString() + "</span>&nbsp;&nbsp;" ;
         } else  {
             pagebutton = "<span class='pagelinkselected' onclick='GetPage("  + i + ",this)'>"  + (i + 1).toString() + "</span>&nbsp;&nbsp;" ;
         }
         jQuery(pagebutton).appendTo( "#pagelist" );
     }
}

2、由于fckeditor主要承担着页面编辑的功能,而每次点击分页按钮我都会将fckeditor编辑的内容缓存到页面中的HiddenField中(以分页符分割),同时通过JS动态生成分页页码,并且可以通过点击页码在fckeditor中查看原来编辑的内容。

获取页面内容JS代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//根据页面ID获取该页面内容
function  GetPage(pageId, obj) {
     var  contentList = decodeURIComponent(document.getElementById( "<%=hfContent.ClientID %>" ).value).split( "<pager>" );
     var  fck = FCKeditorAPI.GetInstance( "FCKeditor1" );
     if  (contentList[pageId] == undefined) {
         fck.EditorDocument.body.innerHTML = "" ;
     } else  {
         fck.EditorDocument.body.innerHTML = contentList[pageId];
     }
 
     //更改按钮自身为选中样式,并将其他分页按钮样式更改为普通分页样式
     jQuery(obj).addClass( "pagelinkselected" );
     jQuery(obj).siblings().removeClass( "pagelinkselected" ).addClass( "pagelink" );
}

这边需要注意的是由于页面内容中可能会出现特殊的字符,所以我这边在缓存或获取文章内容的时候都会通过encodeURIComponent和decodeURIComponent这2个JS方法来对文章内容进行编码和解码。

具体页面截图如下:

pic88

我这边仅仅是做功能演示,所以界面上没有做过多的美化,而且最终确认按钮点击理论上应该是保存到数据库中,而我这边就简化了将内容放入session中,而发布按钮则是从session中获取内容然后生成静态页面。

在后台生成静态页面的代码中有块代码还是2个比较重要的:

1、就是根据需求选择模板,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private  string [] GetTemplateById( int  id)
{
     string [] srcTempStringAndextensionName = new  string [2]; //模板字符串和扩展名数组。
     string  templateFullPath = Server.MapPath( "~/news/template/Template2.html" ); //模板全路径
     if  (String.IsNullOrEmpty(templateFullPath) == false ) //是否为空
     {
         //返回一个以模板全路径的FileInfo对象。
         FileInfo fileInfo = new  FileInfo(templateFullPath);
 
         string  root = "http://"  + Request.ServerVariables[ "HTTP_HOST" ] +
             this .ResolveUrl( "~/news/template/Template2.html" );
         HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(root);
         HttpWebResponse response = (HttpWebResponse)myReq.GetResponse();
 
         Stream receiveStream = response.GetResponseStream();
         StreamReader readStream = new  StreamReader(receiveStream, System.Text.Encoding.UTF8);
 
         srcTempStringAndextensionName[0] = readStream.ReadToEnd();
 
         srcTempStringAndextensionName[1] = fileInfo.Extension.Trim();
     }
     else
     {
         srcTempStringAndextensionName = null ;
     }
 
     return  srcTempStringAndextensionName;
}

我这边是直接写死从指定目录下获取模板,实际开发的过程中当中这个模板可能从数据库中获取也可能是想我这样从指定目录获取。

2、在生成页面的过程中,需要判断下这个资讯文章到底有几页,如果只有一页可以就根据指定的命名生成页面,而如果有多页则还需指定特殊的规则生成页面,我这边生成的规则是第一页为指定名称,后面的页面则在指定名称后加上“_序号”这种形式,由于生成的代码较长本文中我就不贴出来了,可以直接下载源码查看。

到此编辑篇的内容就全部结束了,如果文章中有任何不对,欢迎指出,谢谢了!

 

源码下载:点我下载(直接浏览网站news\Template\Default.aspx既可)

 

话说,各位看过的朋友如果觉得本文对您还有点用,或者觉得本文还有价值的话,麻烦将鼠标移到【推荐】上,帮我点击下,非常非常的感谢!

 

项目过程中所遇到的各种问题记录

编辑器篇:

        FCKeditor相关知识及各种常见使用问题

        FCKeditor自定义上传路径配置

        使用FCKeditor生成静态分页HTML

图表篇:

        有关MSChart的一些小技巧

        asp.net上不错的图表选择—FunsionCharts

ORM篇:

        使用NHibernate配置对象实体的一些小问题

        有关NHibernate查询封装

部署篇:

        项目部署过程中那些纠结的问题-IIS

        项目部署过程中那些纠结的问题-SQLServer

工具篇:

        .NET开发时常用的工具类库



本文转自kyo-yo博客园博客,原文链接:http://www.cnblogs.com/kyo-yo/archive/2010/12/17/Problem-Record-Editor-Generate-Static-HTML-Pages-With-FCKeditor.html,如需转载请自行联系原作者


目录
相关文章
|
24天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
42 2
|
4月前
|
移动开发 前端开发 JavaScript
基于 HTML5 和 Canvas 开发的在线图片编辑器
基于 HTML5 和 Canvas 开发的在线图片编辑器
103 0
|
2月前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
47 6
|
2月前
|
JavaScript 前端开发 UED
让 HTML 向 Vue.js 华丽转身:如何把 `wangEditor` 仿腾讯文档项目整合进 Vue.js
让 HTML 向 Vue.js 华丽转身:如何把 `wangEditor` 仿腾讯文档项目整合进 Vue.js
|
3月前
|
JavaScript
基于Vue2.X对WangEditor 5富文本编辑器进行封装与使用,支持单个或多个图片点击、粘贴、拖拽上传,Vue3.X项目也可直接使用
这篇文章介绍了如何在Vue 2.X项目中封装和使用WangEditor 5富文本编辑器,支持图片的点击、粘贴和拖拽上传,同时提到封装的组件也适用于Vue 3.X项目,并提供了详细的使用示例和后端配置。
279 1
基于Vue2.X对WangEditor 5富文本编辑器进行封装与使用,支持单个或多个图片点击、粘贴、拖拽上传,Vue3.X项目也可直接使用
|
3月前
|
存储 JavaScript 前端开发
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
文章展示了在Vue项目中通过集成Quill富文本编辑器实现公告功能的完整开发过程,包括前端的公告发布、修改、删除操作以及后端的数据存储和处理逻辑。
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
|
3月前
Vue3项目引入 vue-quill 编辑器组件并封装使用
本文介绍了如何在Vue3项目中引入并封装使用`vue-quill`富文本编辑器组件,包括安装配置、父页面实现、子组件设计以及使用方法和效果展示。
981 0
Vue3项目引入 vue-quill 编辑器组件并封装使用
|
5月前
|
前端开发
HTML+CSS练习小项目——百叶窗
HTML+CSS练习小项目——百叶窗
|
4月前
|
前端开发 JavaScript Java
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
|
4月前
|
开发工具
vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
下一篇
无影云桌面