发布于 2015-05-14 12:54:50 | 265 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

Kooboo CMS系统

Kooboo是一个基于ASP.NET MVC的CMS系统,实现面向企业级的内容管理解决方案和快速开发。


下面是代码:

 public virtual IHtmlString Meta()
        {
            AggregateHtmlString htmlStrings = new AggregateHtmlString();
            var htmlMeta = this.PageContext.HtmlMeta;
            if (htmlMeta != null)
            {
                if (!string.IsNullOrEmpty(htmlMeta.Canonical))
                {
                    htmlStrings.Add(new HtmlString(string.Format("<link rel="canonical" href="{0}"/>", Kooboo.StringExtensions.StripAllTags(htmlMeta.Canonical))));
                }
                if (!string.IsNullOrEmpty(htmlMeta.Author))
                {
                    htmlStrings.Add(BuildMeta("author", htmlMeta.Author));
                }

                if (!string.IsNullOrEmpty(htmlMeta.Description))
                {
                    htmlStrings.Add(BuildMeta("description", htmlMeta.Description));
                }

                if (!string.IsNullOrEmpty(htmlMeta.Keywords))
                {
                    htmlStrings.Add(BuildMeta("keywords", htmlMeta.Keywords));
                }
                if (htmlMeta.Customs != null)
                {
                    foreach (var item in htmlMeta.Customs)
                    {
                        htmlStrings.Add(BuildMeta(item.Key, item.Value));
                    }
                }
                if (!string.IsNullOrEmpty(htmlMeta.HtmlMetaBlock))
                {
                    htmlStrings.Add(new HtmlString(htmlMeta.HtmlMetaBlock));
                }
            }
            return htmlStrings;
        }
        private static IHtmlString BuildMeta(string name, string value)
        {
            return new HtmlString(string.Format("<meta name="{0}" content="{1}" />", name, Kooboo.StringExtensions.StripAllTags(value)));
        }

其中的Aggregate的意思是聚合,是个生僻词。我还是觉得我们有必要了解一下AggregateHtmlString这个类吧。按F12进入定义,结果是DLL,搜索这个类名,得到如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace Kooboo.CMS.Common
{
    public class AggregateHtmlString : IHtmlString
    {
        List<IHtmlString> list;
        public AggregateHtmlString()
            : this(null)
        {
        }
        public AggregateHtmlString(IEnumerable<IHtmlString> htmlStrings)
        {
            if (htmlStrings != null)
            {
                list = new List<IHtmlString>(htmlStrings);
            }
            else
            {
                list = new List<IHtmlString>();
            }
        }
        public IEnumerable<IHtmlString> HtmlStrings
        {
            get
            {
                return list;
            }
        }
        public void Add(IHtmlString htmlString)
        {
            list.Add(htmlString);
        }
        #region IHtmlString Members

        public string ToHtmlString()
        {
            StringBuilder sb = new StringBuilder();
            foreach (var item in HtmlStrings)
            {
                if (item != null)
                {
                    sb.Append(item.ToHtmlString());
                }
            }
            return sb.ToString();
        }

        #endregion
        public override string ToString()
        {
            return ToHtmlString();
        }
    }
}
 

我们发现这个类其实是继承了IHtmlString接口,那边这个AggregateHtmlString是在这个方法内如何应用到的呢?

我们先注意到了这个东西: var htmlMeta = this.PageContext.HtmlMeta;

也就是说,HtmlMeta是一个类,我们来一探究竟:我们先按F12然后这里只有一个GET方法:

public HtmlMeta HtmlMeta
{
    get
    {
        return htmlMeta;
    }
}

然后我们再进入这个MODEL,具体的我已经注释了,当然除了看不懂意思的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;

namespace Kooboo.CMS.Sites.Models
{
    [DataContract]
    public class HtmlMeta
    {
        [DataMember(Order = 1)]
        //作者
        public string Author { get; set; }
        [DataMember(Order = 3)]
        //关键字
        public string Keywords { get; set; }
        [DataMember(Order = 5)]
        //描述
        public string Description { get; set; }

        [DataMember(Order = 7)]
        public Dictionary<string, string> Customs
        {
            get;
            set;
        }
        [DataMember(Order = 8)]
        //html标题
        public string HtmlTitle { get; set; }

        [DataMember(Order = 10)]
        public string Canonical { get; set; }
        [DataMember]
        //html meat块
        /// To allow write custom html meta block. for example: <meta http-equiv="charset" content="XXX"> <meta property="title" content="{title}">
        public string HtmlMetaBlock { get; set; }
    }
}
 

当某个“字段”不为空的时候,就调用BuildMeta方法,把IHtmlString添加到html的list当中去。其中第一个参数是键,表示是何种META(Keyword,description)。

private static IHtmlString BuildMeta(string name, string value)
{
    return new HtmlString(string.Format("<meta name="{0}" content="{1}" />", name, Kooboo.StringExtensions.StripAllTags(value)));
}


最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务