zoukankan      html  css  js  c++  java
  • Kooboo 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();
            }
        }
    }
    View Code

      我们发现这个类其实是继承了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; }
        }
    }
    View Code

    当某个“字段”不为空的时候,就调用BuildMeta方法,把IHtmlString添加到html的list当中去。其中第一个参数是键,表示是何种META(Keyword,description),有关于有哪些meta标签可以看这里

            private static IHtmlString BuildMeta(string name, string value)
            {
                return new HtmlString(string.Format("<meta name="{0}" content="{1}" />", name, Kooboo.StringExtensions.StripAllTags(value)));
            }
  • 相关阅读:
    Lucene 全文检索
    Redis 集群
    Redis 初步接触
    Mybatis
    FastJson 介绍
    JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载
    持续集成与Devops关系
    GIT命令行统计代码提交行数
    一种简单的REST API接口加密实现,只允许自己的产品调用后台,防止接口被刷
    Beyond Compare 4.X 破解方法(亲测有效)
  • 原文地址:https://www.cnblogs.com/kmsfan/p/Kooboo-CMS-Html-FrontHtml-Meta.html
Copyright © 2011-2022 走看看