生·生活

asp.net旅行

 

dotnetblogengine扩展之Tag匹配

在dotnetblogengine 1.4 release中我提到wordpress的日志正文可以匹配已存在的tag,并进行url转换
试着在dotnetblogengine上写了一个扩展进行实现
代码如下:
  1. using System;   
  2. using System.Data;   
  3. using System.Configuration;   
  4. using System.Web;   
  5. using System.Web.Security;   
  6. using System.Web.UI;   
  7. using System.Web.UI.WebControls;   
  8. using System.Web.UI.WebControls.WebParts;   
  9. using System.Web.UI.HtmlControls;   
  10. using BlogEngine.Core;   
  11. using System.Text.RegularExpressions;   
  12.   
  13. /// <summary>   
  14. /// KeyTransfor 的摘要说明   
  15. /// </summary>   
  16. [BlogEngine.Core.Web.Controls.Extension("链接粘合度,替换tag""1.0""jason")]   
  17. public class KeyTransfor   
  18. {   
  19.     private static StateList<LinkRelating> _sl = null;   
  20.     public static readonly object Syncobj = new object();   
  21.     static Regex reg = new Regex(@"^\d+$", RegexOptions.Compiled);  //这里我不想匹配纯数字的tag   
  22.     static KeyTransfor()   
  23.     {   
  24.         lock (Syncobj)   
  25.         {   
  26.             if (_sl == null)   
  27.             {   
  28.                 lock (Syncobj)   
  29.                 {   
  30.                     LoadTags();   
  31.                 }   
  32.             }   
  33.         }   
  34.     }   
  35.   
  36.     static void LoadTags()   
  37.     {   
  38.         _sl = new StateList<LinkRelating>();   
  39.         LinkRelating lnk;   
  40.   
  41.         foreach (Post p in Post.Posts.FindAll(delegate(Post post)   
  42.         {   
  43.             return post.IsPublished == true && post.IsVisible == true;   
  44.         }))   
  45.         {   
  46.             foreach (string tag in p.Tags)   
  47.             {   
  48.                 if (string.IsNullOrEmpty(tag)) continue;   
  49.                 if (reg.IsMatch(tag)) continue;   
  50.                 lnk = new LinkRelating(tag, string.Format(@"<a href=""{0}"" target=""_blank"">{1}</a>", Utils.RelativeWebRoot + "?tag=/" + HttpUtility.UrlEncode(tag), tag));   
  51.                 if (!_sl.Contains(lnk))   
  52.                     _sl.Add(lnk);   
  53.             }   
  54.             lnk = new LinkRelating(p.Title, string.Format(@"<a href=""{0}"" target=""_blank"">{1}</a>", p.AbsoluteLink, p.Title));   
  55.             if (!_sl.Contains(lnk)) _sl.Add(lnk);   
  56.         }   
  57.         _sl.TrimExcess();   
  58.     }   
  59.   
  60.     public KeyTransfor()   
  61.     {   
  62.         //   
  63.         // TODO: 在此处添加构造函数逻辑   
  64.         //   
  65.         Post.Serving += new EventHandler<ServingEventArgs>(Post_Serving);   
  66.         //当添加一篇新日志时引发Saved事件,从而将缓存进行重载   
  67.         Post.Saved += new EventHandler<SavedEventArgs>(Post_Saved);   
  68.     }   
  69.   
  70.     void Post_Saved(object sender, SavedEventArgs e)   
  71.     {   
  72.         LoadTags();   
  73.     }   
  74.   
  75.     void Post_Serving(object sender, ServingEventArgs e)   
  76.     {   
  77.         if (e.Location == ServingLocation.SinglePost)   
  78.         {   
  79.             string body = e.Body;   
  80.             foreach (LinkRelating lnk in _sl)   
  81.             {   
  82.                 if (reg.IsMatch(lnk.Key)) continue;   
  83.                 e.Body = e.Body.Replace(lnk.Key, lnk.Href);   
  84.             }   
  85.         }   
  86.     }   
  87. }   
  88.   
  89. public struct LinkRelating   
  90. {   
  91.     private string _key;   
  92.   
  93.     public string Key   
  94.     {   
  95.         get { return _key; }   
  96.         set { _key = value; }   
  97.     }   
  98.     private string _href;   
  99.     public string Href   
  100.     {   
  101.         get { return _href; }   
  102.         set { _href = value; }   
  103.     }   
  104.   
  105.     public LinkRelating(string key, string href)   
  106.     {   
  107.         _href = href;   
  108.         _key = key;   
  109.     }   
  110.   
  111. }  

今天发现dotnetblogengine的tag管理不大方便,有空写个东东:)

posted on 2008-08-29 12:35  厦门刀客  阅读(245)  评论(0)    收藏  举报

导航