把blogengine当作cms作公司网站

我觉得blogengine程序跟可以用来作简单公司网站的cms的区别是,blogengine只有一个文章的列表,和展示文章的页面(post和page),cms需要有个多个分类下面一些的文章的列表的集合用来作首页,另外还要有侧边栏在不同的页面显示不同的内容。

考虑对程序有较小的改动,尽量用它提供的扩展点来实现,首页我用一个独立的page,page的内容写一些类别的“自定义标签”,输出的页面的时候用extension来动态替换,“自定义标签”类似这样:[CategoryPost  cate="新闻动态" type='list' count='5'],CategoryPost是标签名称,cate内容是分类的名称,type我定义了3种,一个是list,一个是标签页的样式,还有一种是单个的page,count为显示的个数。其实就是替换。

Extension代码如下:

[Extension("CategoryPost","0.1","dragon753")]
public class CategoryPost
{
    static CategoryPost()
	{
        BlogEngine.Core.Page.Serving += Publishable_Serving;
	}
    private static void Publishable_Serving(object sender, ServingEventArgs e)
    {
        int postCnt = Convert.ToInt32(ConfigurationManager.AppSettings["CategoryPostCount"]);
        if (e.Location == ServingLocation.SinglePage)
        {
            var page = (Page)sender;
            string pattern = @"\[CategoryPost(.|\n)" + "cate=[\'|\"](.+?)[\'|\"](.|\n)" + "type=[\'|\"](.+?)[\'|\"](.|\n)" + "count=[\'|\"](.+?)[\'|\"]" + @"+?\]";

            System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(e.Body, pattern,

            System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline);
            int tabCount = 0;
            while (m.Success)
            {
                string toReplace = m.Groups[0].Value;
                string categoryName = m.Groups[2].Value;

                string replacement = string.Empty;
                if (!string.IsNullOrEmpty(categoryName))
                {
                    string displayType = displayType = m.Groups[4].Value;
                    if (displayType.Equals("tab", StringComparison.OrdinalIgnoreCase))
                            replacement = GetTabReplacement(++tabCount, categoryName, postCnt);
                    else if (displayType.Equals("list", StringComparison.OrdinalIgnoreCase))
                            replacement = GetListReplacement(categoryName, postCnt);
                    else
                            replacement = GetSingleReplacement(categoryName, postCnt);
                }
                e.Body = e.Body.Replace(toReplace, replacement);
                m = System.Text.RegularExpressions.Regex.Match(e.Body, pattern,
                System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.Multiline);
            }
        }
    }
	
	///单个page的内容。
    private static string GetSingleReplacement(string categoryName, int length)
    {
        IPublishable p;
        p = BlogEngine.Core.Page.Pages.Where(n => n.Title.Equals(categoryName)).FirstOrDefault();
        var str = new StringBuilder();
        p.Content.Substring(0, length);
        str.AppendFormat("<div class='CategoryPost'><span class='CategoryPostTitle'>{0}</span>", p.Title);//标题,类别名称
        str.AppendFormat("<a href='{0}'>more<span>  </span></a>", p.RelativeLink);//到类别文章列表的链接
        str.AppendFormat("<div class='CategoryPostFooter'> </div>");//用于分割标题,我的网站上用了张背景图。
        str.Append("</div>");
        str.Append(p.Description);//显示内容,这里显示Description
        return str.ToString();
    }
    
	//显示一个列表
    static string GetListReplacement(string categoryName, int cnt)
    {
        Category category = BlogEngine.Core.Category.Categories.First(n => n.Title.Equals(categoryName));
        var newsList = category.Posts.FindAll(n => n.IsVisible == true).Take(cnt);
        var str = new StringBuilder();
        str.AppendFormat("<div class='CategoryPost'><span class='CategoryPostTitle'>{0}</span>", category.Title);
        str.AppendFormat("<a href='{0}'>more<span>  </span></a>", category.RelativeLink);
        str.AppendFormat("<div class='CategoryPostFooter'> </div>");
        str.Append("</div>");
        str.Append("<table class='CategoryPostTable'>");
        foreach (var post in newsList)
        {
            str.AppendFormat("<tr><td><a href='{0}'>{1}</a></td><td class='categorypostdate'>{2}</td></tr>", post.AbsoluteLink, post.Title, post.DateCreated.ToShortDateString());
        }
        str.Append("</table>");
        return str.ToString();
}

//显示为标签页的形式,用一个叫easytab的js标签页控件
    static string GetTabReplacement(int tabCount, string categoryName, int cnt)
    {
        Category category = BlogEngine.Core.Category.Categories.First(n => n.Title.Equals(categoryName));
        var newsList = category.Posts.FindAll(n => n.IsVisible == true).Take(cnt);
        var str = new StringBuilder();
        str.AppendFormat("<div class='CategoryPost'><span class='CategoryPostTitle'>{0}</span>", category.Title);
        str.AppendFormat("<div class='easytabmenu'><ul>");
        int i = 1;
        foreach (var n in newsList)
        {
            str.AppendFormat("<li><a href='#' onmouseover=\"easytabs('1', '{0}');\" onfocus=\"easytabs('1', '{1}');\" onclick=\"return false;\"  title=\"\" id=\"tablink{2}\">0{3}</a>|</li> ", i, i, i, i); i++;
        }
        str.AppendFormat("</ul></div><div class='CategoryPostFooter'> </div>");
        str.Append("</div>");
        i = 1;
        foreach (var post in newsList)
        {
            str.AppendFormat("<div id=\"tabcontent{0}\" class=\"easytabmenucontent\"><a href='{1}'>{2}</a><br>{3}</div>", i++,post.AbsoluteLink,post.Title, post.Description);
        }
        return str.ToString();
    }
}
侧边栏,blogengine代码里好多用url判断是显示列表,post,还是page的代码,我下了几个theme里面也有,我就想在WidgetBase中加一个显示位置的参数,
在WidgetEditBase中用个下拉列表作修改。这个比较简单,代码就不写了。
用了一个相册的插件叫BEgallery,有后台管理。效果不错。

说一下碰到的问题,本来在发布的在本机的时候没什么问题,但是放到服务器上的时候(godaddy share hosting),最开始碰到的问题是所有pics文件夹下面的图片都不能用了,
页面上所有类似这样的代码:/pics/image1.jpg都显示不出来。不知道啥原因,暂时把图片都放到上传文件的保存路径,用他的image.axd来处理。
要硬编码,丑就丑吧,能显示了就行。
 
第二个问题是登录以后乱码,这个在Codeplex论坛上找到答案了,把web.sitemap里带right的东西都删掉就行了。貌似.Net4不认right的那些东西。
 
第三个问题,timymce加载不上,直接访问tinymce.js的路径返回403错误,请教了blogyi.net的站长,他说大概是文件的权限的问题,
把editor文件夹删了,从新上传了一遍就好了。
第四个问题,BEgallery不弹出幻灯片,经查,在extension中有个AddConfigScriptToHeader方法,加载一段拼起来的js到页面上,大小引号变成了转义字符。
调试了一下,把要拼起来的js复制出来单独放了一个js文件,加载这个文件,问题解决。注意拼出来的js有个hs.graphicsDir = '/Blogengine.Net/BEgallery/graphics/';
到服务器上应把Blogengine.Net去掉。
还有几个很灵异的问题就不说了,估计是很傻的原因引起的,就不招人笑话了。 
posted @ 2011-05-12 09:51  1gehunzi  阅读(413)  评论(0编辑  收藏  举报