[项目过程中所遇到的各种问题记录]编辑器篇——使用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,如需转载请自行联系原作者


目录
相关文章
|
6月前
|
XML JSON JavaScript
【前端】Vue项目中 JSON 编辑器的使用
【前端】Vue项目中 JSON 编辑器的使用
557 0
|
6天前
|
移动开发 HTML5
代码编辑器特效爆炸html5
代码编辑器特效爆炸html5,代码高亮显示,输入代码爆炸动态效果显示。非常的帅气,爱不释手~
10 0
代码编辑器特效爆炸html5
|
18天前
|
移动开发 HTML5
唯美首页纯静态html源码
唯美首页纯静态html5引导页源码,格子化win8风格官方引导页面源码
12 0
唯美首页纯静态html源码
|
1月前
|
XML Java 数据格式
springboot 微服务项目如何集成 html 页面
springboot 微服务项目如何集成 html 页面
29 0
|
4月前
|
JavaScript 应用服务中间件 nginx
docker安装的nginx放在html文件下的vue项目404解决
docker安装的nginx放在html文件下的vue项目404解决
|
9月前
|
资源调度 JavaScript
vue项目:集成富文本编辑器 - 百度ueditor(vue-ueditor-wrap)
vue项目:集成富文本编辑器 - 百度ueditor(vue-ueditor-wrap)
275 0
|
4月前
|
存储 搜索推荐 前端开发
SpringBoot框架+原生HTML云端SaaS服务方式的电子病历编辑器源码
一体化电子病历系统基于云端SaaS服务的方式,采用B/S(Browser/Server)架构提供,覆盖了医疗机构电子病历模板制作到管理使用的整个流程。除实现在线制作内容丰富、图文并茂、功能完善的电子病历模板外,还可按照医疗机构的特色,根据不同业务的需求,使用该系统定制个性化、实用化、特色化电子病历模板。 该系统能对电子病历模板进行统一集中管理,通用的电子病历模板能直接提供给不同的医疗机构直接使用,避免重复制作;提供了功能齐备的控件元素,实现电子病历在业务使用中数据的自动获取功能,简化了人工的大量填报。
|
4月前
|
存储 前端开发 JavaScript
基于前端技术原生HTML、JS、CSS 电子病历编辑器源码
基于前端技术原生HTML、JS、CSS 电子病历编辑器源码
74 0
|
4月前
|
XML 前端开发 JavaScript
【原生HTML+SpringBoot】电子病历编辑器源码
【原生HTML+SpringBoot】电子病历编辑器源码
105 0
|
4月前
|
应用服务中间件 网络安全 nginx
nginx 配置 静态html
nginx 配置 静态html
102 0