array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 EntLib.com Forum / YAF 开源论坛集成 FCKEditor v2.6 编辑器 - 爱码网

EntLib.com Forum / YAF 开源论坛集成 FCKEditor v2.6 编辑器

 
YAF 开源论坛系统自带的编辑器BBCode Editor功能比较简单,界面如下:

EntLib.com Forum / YAF 开源论坛集成 FCKEditor v2.6 编辑器

因此,考虑集成功能强大的FCKEditor 免费开源编辑器,可以到官方网站下载该编辑器:

这个HTML文本编辑器可以让web程序拥有如MS Word这样强大的编辑功能.FCKeditor支持当前流行的浏览器。
 
如下是集成在 EntLib.com Forum / YAF 论坛系统的 FCKEditor 编辑器:
EntLib.com Forum / YAF 开源论坛集成 FCKEditor v2.6 编辑器
在EntLib.com Forum / YAF 开源论坛系统集成 FCKEditor v2.6(当前为最新版本)的基本步骤如下:
1. 下载FCKeditor 2.6 基本文件(Main Code)。
将解压缩的文件复制到EntLibForum/YAF项目的editors/FCKEditorV2 目录下。
2. 下载 FCKeditor.Net / ASP.NET 控件,复制FredCK.FCKeditorV2.dll 文件到 EntLibForum/YAF项目的bin目录。
 
这样就基本可以FCKEditor v2.6 超强的编辑器了,当然还需要在Host Settings中设置 EntLibForum/YAF 论坛默认的编辑器。
关于 FCKEditor 的一些基本配置信息,请参考如下的文章:
 

如需要使用文件上传功能,还需要修改代码FCKEditorV2/editor/filemanager/connectors/config.ascx(以ASPX代码为例)。这里限制只有登录的用户才可以使用文件上传功能,并且上传的文件只能上传到用户自己的目录。根据每个用户名自动创建对应的文件上传目录。

EntLib.com Forum / YAF 开源论坛集成 FCKEditor v2.6 编辑器

EntLib.com Forum / YAF 开源论坛集成 FCKEditor v2.6 编辑器

connectors/config.ascx 更新后的代码如下:

  1 <script runat="server">
  2 
  3     /**
  4      * This function must check the user session to be sure that he/she is
  5      * authorized to upload and access files in the File Browser.
  6      */
  7     private string m_userName;
  8     private int m_userID;
  9     private int m_boardID;
 10     private bool m_isAuthenticated;
 11     
 12     private bool CheckAuthentication()
 13     {
 14         // WARNING : DO NOT simply return "true". By doing so, you are allowing
 15         // "anyone" to upload and list the files in your server. You must implement
 16         // some kind of session validation here. Even something very simple asEntLib.com Forum / YAF 开源论坛集成 FCKEditor v2.6 编辑器
 17         //
 18         //        return ( Session[ "IsAuthorized" ] != null && (bool)Session[ "IsAuthorized" ] == true );
 19         //
 20         // EntLib.com Forum / YAF 开源论坛集成 FCKEditor v2.6 编辑器 where Session[ "IsAuthorized" ] is set to "true" as soon as the
 21         // user logs in your system.
 22 
 23         string userName = HttpContext.Current.User.Identity.Name;
 24 
 25         try
 26         {
 27             if (HttpContext.Current.User.Identity.IsAuthenticated)
 28             {
 29                 string[] parts = userName.Split(';');
 30                 if (parts.Length == 3)
 31                 {
 32                     m_userID = int.Parse(parts[0]);
 33                     m_boardID = int.Parse(parts[1]);
 34                     m_userName = parts[2];
 35                     m_isAuthenticated = true;
 36                 }
 37             }
 38         }
 39         catch (Exception)
 40         {
 41             m_userName = "";
 42             m_userID = 0;
 43             m_boardID = 0;
 44             m_isAuthenticated = false;
 45         }
 46 
 47         return m_isAuthenticated;
 48     }
 49 
 50     public override void SetConfig()
 51     {
 52         // SECURITY: You must explicitly enable this "connector". (Set it to "true").
 53         Enabled = CheckAuthentication();
 54         
 55         // URL path to user files.
 56         UserFilesPath = "/userfiles/";
 57 
 58         // The connector tries to resolve the above UserFilesPath automatically.
 59         // Use the following setting it you prefer to explicitely specify the
 60         // absolute path. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
 61         // Attention: The above 'UserFilesPath' URL must point to the same directory.
 62         UserFilesAbsolutePath = "";
 63 
 64         // Due to security issues with Apache modules, it is recommended to leave the
 65         // following setting enabled.
 66         ForceSingleExtension = true;
 67 
 68         // Allowed Resource Types
 69         AllowedTypes = new string[] { "File""Image""Flash""Media" };
 70 
 71         // For security, HTML is allowed in the first Kb of data for files having the
 72         // following extensions only.
 73         HtmlExtensions = new string[] { "html""htm""xml""xsd""txt""js" };
 74 
 75         TypeConfig[ "File" ].AllowedExtensions            = new string[] { "7z""aiff""asf""avi""bmp""csv""doc""fla""flv""gif""gz""gzip""jpeg""jpg""mid""mov""mp3""mp4""mpc""mpeg""mpg""ods""odt""pdf""png""ppt""pxd""qt""ram""rar""rm""rmi""rmvb""rtf""sdc""sitd""swf""sxc""sxw""tar""tgz""tif""tiff""txt""vsd""wav""wma""wmv""xls""xml""zip" };
 76         TypeConfig[ "File" ].DeniedExtensions            = new string[] { };
 77         string filepath = "%UserFilesPath%" + m_userName + "/file/";
 78         TypeConfig["File"].FilesPath = filepath;
 79         TypeConfig["File"].FilesAbsolutePath = (UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%file/");
 80         TypeConfig["File"].QuickUploadPath = filepath; // "%UserFilesPath%" + m_userName + "/";
 81         TypeConfig["File"].QuickUploadAbsolutePath = filepath; // (UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%");
 82 
 83         TypeConfig[ "Image" ].AllowedExtensions            = new string[] { "bmp""gif""jpeg""jpg""png" };
 84         TypeConfig[ "Image" ].DeniedExtensions            = new string[] { };
 85         string imagepath = "%UserFilesPath%" + m_userName + "/image/";
 86         TypeConfig["Image"].FilesPath = imagepath;
 87         TypeConfig["Image"].FilesAbsolutePath = (UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%image/");
 88         TypeConfig["Image"].QuickUploadPath = imagepath; // "%UserFilesPath%" + m_userName + "/";
 89         TypeConfig["Image"].QuickUploadAbsolutePath = (UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%");
 90 
 91         TypeConfig[ "Flash" ].AllowedExtensions            = new string[] { "swf""flv" };
 92         TypeConfig[ "Flash" ].DeniedExtensions            = new string[] { };
 93         TypeConfig[ "Flash" ].FilesPath                    = "%UserFilesPath%flash/";
 94         TypeConfig[ "Flash" ].FilesAbsolutePath            = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%flash/" );
 95         TypeConfig[ "Flash" ].QuickUploadPath            = "%UserFilesPath%";
 96         TypeConfig[ "Flash" ].QuickUploadAbsolutePath    = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
 97 
 98         TypeConfig[ "Media" ].AllowedExtensions            = new string[] { "aiff""asf""avi""bmp""fla""flv""gif""jpeg""jpg""mid""mov""mp3""mp4""mpc""mpeg""mpg""png""qt""ram""rm""rmi""rmvb""swf""tif""tiff""wav""wma""wmv" };
 99         TypeConfig[ "Media" ].DeniedExtensions            = new string[] { };
100         TypeConfig[ "Media" ].FilesPath                    = "%UserFilesPath%media/";
101         TypeConfig[ "Media" ].FilesAbsolutePath            = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%media/" );
102         TypeConfig[ "Media" ].QuickUploadPath            = "%UserFilesPath%";
103         TypeConfig[ "Media" ].QuickUploadAbsolutePath    = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
104     }
105 
106 </script>
107 

相关文章: