⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 labelmass.cs

📁 最好用的站点内容管理系统 全部源代码都有
💻 CS
字号:
//======================================================
//==     (c)2008 aspxcms inc by NeTCMS v1.0              ==
//==          Forum:bbs.aspxcms.com                   ==
//==         Website:www.aspxcms.com                  ==
//======================================================
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using NetCMS.Config;

namespace NetCMS.Publish
{
    /// <summary>
    /// 标签中的语句块
    /// </summary>
    public partial class LabelMass
    {
        protected enum EnumLabelType
        {
            List, GroupMember, ConstrNews, NewUser, TopUser, UserLogin, OtherJS, statJS, surveyJS, adJS, sysJS,
            freeJS, LastComm, TopNews, RSS, SpeicalNaviRead, SpecialNavi, ClassNaviRead, ClassNavi, SiteNavi, Metakey, MetaDesc, Frindlink,
            History, CorrNews, Sitemap, NorFilt, FlashFilt, Stat, Search, Position, PageTitle, unRule, ReadNews, ClassList, TodayPic, TodayWord, HistoryIndex, HotTag, CopyRight,
            ChannelList, ChannelClassList, ChannelContent, ChannelSearch, ChannelRSS, ChannelFlashFilt
        };
        #region 标签参数
        /// <summary>
        /// Loop次数,Loop次数为0或者unLoop标签,为0
        /// </summary>
        protected int Param_Loop;
        /// <summary>
        /// 站群ID
        /// </summary>
        protected string Param_SiteID = "0";
        /// <summary>
        /// 频道ID
        /// </summary>
        protected int Param_ChID = 0;
        /// <summary>
        /// 当前的栏目ID
        /// </summary>
        protected string Param_CurrentClassID;
        /// <summary>
        /// 当前的专题ID
        /// </summary>
        protected string Param_CurrentSpecialID;
        /// <summary>
        /// 当前新闻ID
        /// </summary>
        protected string Param_CurrentNewsID;

        /// <summary>
        /// 当前的(频道)栏目ID
        /// </summary>
        protected int Param_CurrentCHClassID;
        /// <summary>
        /// 当前的(频道)专题ID
        /// </summary>
        protected int Param_CurrentCHSpecialID;
        /// <summary>
        /// 当前(频道)新闻ID
        /// </summary>
        protected int Param_CurrentCHNewsID;

        /// <summary>
        /// 标签类型
        /// </summary>
        protected EnumLabelType Param_LabelType;
        #endregion 标签参数
        /// <summary>
        /// 标签格式是否有效
        /// </summary>
        protected bool FormatValid = true;
        /// <summary>
        /// 格式非法的说明
        /// </summary>
        protected string InvalidInfo = string.Empty;
        /// <summary>
        /// 标签的主体部份
        /// </summary>
        protected string Mass_Primary = string.Empty;
        /// <summary>
        /// 标签中间插入代码部份
        /// </summary>
        protected string Mass_Inserted = string.Empty;
        /// <summary>
        /// 标签原始内容
        /// </summary>
        protected string Mass_Content = string.Empty;
        /// <summary>
        /// 标签所有参数
        /// </summary>
        protected LabelParameter[] _LblParams = null;
        /// <summary>
        /// 模板类型
        /// </summary>
        protected TempType _TemplateType;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="masscontent">标签的内容</param>
        /// <param name="connection">数据库连接</param>
        /// <param name="currentclassid">当前栏目ID,如果不设置,请赋为null</param>
        /// <param name="currentspecialid">当前专题ID,如果不设置,请赋为null</param>
        /// <param name="currentnewsid">当前新闻ID,如果不设置,请赋为null</param>
        public LabelMass(string masscontent, string currentclassid, string currentspecialid, string currentnewsid, int ChID, int currentchclassid, int currentchspecialid, int currentchnewsid)
        {
            Mass_Content = masscontent;
            Param_ChID = ChID;
            if (currentclassid == string.Empty || currentclassid==null){Param_CurrentClassID = null;}
            else{Param_CurrentClassID = currentclassid;}
            if (currentspecialid == string.Empty || currentspecialid == null){Param_CurrentSpecialID = null;}
            else{ Param_CurrentSpecialID = currentspecialid;}
            if (currentnewsid == string.Empty || currentnewsid == null){Param_CurrentNewsID = null;}
            else{Param_CurrentNewsID = currentnewsid;}
            Param_CurrentCHClassID = currentchclassid;
            Param_CurrentCHSpecialID = currentchspecialid;
            Param_CurrentCHNewsID = currentchnewsid;
        }
        /// <summary>
        /// 解析标签内容
        /// </summary>
        public void ParseContent()
        {
            int pos1 = Mass_Content.IndexOf(']');
            int pos2 = Mass_Content.LastIndexOf('[');
            if (pos2 < 1)
                throw new Exception("标签格式错误");
            Mass_Primary = Mass_Content.Substring(1, pos1 - 1);
            int n = pos2 - pos1 - 1;
            if (n > 0)
                Mass_Inserted = Mass_Content.Substring(pos1 + 1, n);
            ParsePrimary();
        }
        /// <summary>
        /// 分析标签参数,拆分为数组
        /// </summary>
        private void ParsePrimary()
        {
            if (Mass_Primary.IndexOf(",") > 0)
            {
                string[] _mass_p = Mass_Primary.Split(',');
                if (_mass_p[0].Equals("NT:Loop"))
                    Param_Loop = 1;
                else if (_mass_p[0].Equals("NT:unLoop"))
                    Param_Loop = 0;
                else
                {
                    FormatValid = false;
                    InvalidInfo = "标签内容不是以[NT:unLoop或[NT:Loop开始";
                }
                int n = _mass_p.Length;
                IList<LabelParameter> l = new List<LabelParameter>();
                l.Clear();
                for (int i = 1; i < n; i++)
                {
                    if (!FormatValid) break;
                    string s = _mass_p[i];
                    int pos = s.IndexOf('=');
                    if (pos < 0)
                        continue;
                    LabelParameter p;
                    p.LPName = s.Substring(0, pos).Trim();
                    p.LPValue = s.Substring(pos + 1).Trim();
                    #region 对标签的必要参数进行一些处理
                    switch (p.LPName)
                    {
                        case "NT:Number":
                            if (Param_Loop.Equals(1))
                            {
                                try
                                {
                                    Param_Loop = int.Parse(p.LPValue);
                                }
                                catch
                                {
                                    FormatValid = false;
                                    InvalidInfo = "NT:Number的值不是有效的数字";
                                }
                            }
                            break;
                        case "NT:SiteID":
                            Param_SiteID = p.LPValue;
                            break;
                        case "NT:LabelType":
                            try
                            {
                                Param_LabelType = (EnumLabelType)System.Enum.Parse(typeof(EnumLabelType), p.LPValue);
                            }
                            catch
                            {
                                FormatValid = false;
                                InvalidInfo = "NT:LabelType指定的类型不存在";
                            }
                            break;
                        case "NT:Root":
                            break;
                        default:
                            AddParameter(p, ref l);
                            break;
                    }
                    #endregion 对标签的必要参数进行一些处理
                }
                int ln = l.Count;
                if (FormatValid && ln > 0)
                {
                    _LblParams = new LabelParameter[ln];
                    l.CopyTo(_LblParams, 0);
                }
            }
        }
        /// <summary>
        /// 解析标签生成HTML
        /// </summary>
        /// <returns></returns>
        public string Parse()
        {
            if (!FormatValid)
                return Mass_Content;
            switch (this.Param_LabelType)
            {
                case EnumLabelType.List: return this.Analyse_List(null, null);
                case EnumLabelType.GroupMember: return this.Analyse_GroupMember();
                case EnumLabelType.ConstrNews: return this.Analyse_ConstrNews();
                case EnumLabelType.NewUser: return this.Analyse_NewUser();
                case EnumLabelType.TopUser: return this.Analyse_TopUser();
                case EnumLabelType.UserLogin: return this.Analyse_UserLogin();
                case EnumLabelType.OtherJS: return this.Analyse_OtherJS();
                case EnumLabelType.statJS: return this.Analyse_statJS();
                case EnumLabelType.surveyJS: return this.Analyse_surveyJS();
                case EnumLabelType.adJS: return this.Analyse_adJS();
                case EnumLabelType.sysJS: return this.Analyse_sysJS();
                case EnumLabelType.freeJS: return this.Analyse_freeJS();
                case EnumLabelType.LastComm: return this.Analyse_LastComm();
                case EnumLabelType.TopNews: return this.Analyse_TopNews();
                case EnumLabelType.RSS: return this.Analyse_RSS();
                case EnumLabelType.SpeicalNaviRead: return this.Analyse_SpeicalNaviRead();
                case EnumLabelType.SpecialNavi: return this.Analyse_SpecialNavi();
                case EnumLabelType.ClassNaviRead: return this.Analyse_ClassNaviRead();
                case EnumLabelType.ClassNavi: return this.Analyse_ClassNavi();
                case EnumLabelType.SiteNavi: return this.Analyse_SiteNavi();
                case EnumLabelType.History: return this.Analyse_History();
                case EnumLabelType.CorrNews: return this.Analyse_CorrNews();
                case EnumLabelType.Sitemap: return this.Analyse_Sitemap();
                case EnumLabelType.NorFilt: return this.Analyse_NorFilt();
                case EnumLabelType.FlashFilt: return this.Analyse_FlashFilt();
                case EnumLabelType.Stat: return this.Analyse_Stat();
                case EnumLabelType.Search: return this.Analyse_Search();
                case EnumLabelType.Position: return this.Analyse_Position(this.Param_ChID);
                case EnumLabelType.PageTitle: return this.Analyse_PageTitle(this.Param_ChID);
                case EnumLabelType.unRule: return this.Analyse_unRule();
                case EnumLabelType.ReadNews: return this.Analyse_ReadNews(0, 0, 0, 0, "", "", 0, 0, 1);
                case EnumLabelType.ClassList: return this.Analyse_ClassList();
                case EnumLabelType.TodayPic: return this.Analyse_TodayPic();
                case EnumLabelType.TodayWord: return this.Analyse_TodayWord();
                case EnumLabelType.Metakey: return this.Analyse_Meta(0,this.Param_ChID);
                case EnumLabelType.MetaDesc: return this.Analyse_Meta(1,this.Param_ChID);
                case EnumLabelType.HotTag: return this.Analyse_HotTag();
                case EnumLabelType.HistoryIndex: return this.Analyse_HistoryIndex();
                case EnumLabelType.CopyRight: return this.Analyse_CopyRight();
                case EnumLabelType.Frindlink: return this.Analyse_FrindList();
                default:
                    return string.Empty;
            }
        }

        /// <summary>
        /// 解析标签生成HTML
        /// </summary>
        /// <returns></returns>
        public string Parse(int ChID)
        {
            if (!FormatValid)
                return Mass_Content;
            switch (this.Param_LabelType)
            {
                case EnumLabelType.ChannelList: return this.Analyse_ChannellList("",ChID);
                case EnumLabelType.ChannelClassList: return this.Analyse_ChannelClassList(ChID);
                case EnumLabelType.ChannelContent: return this.Analyse_ChannelContent(ChID);
                case EnumLabelType.ChannelSearch: return this.Analyse_ChannelSearch(ChID);
                case EnumLabelType.ChannelRSS: return this.Analyse_ChannelRSS(ChID);
                case EnumLabelType.ChannelFlashFilt: return this.Analyse_ChannelFlash(ChID);
                default:
                    return string.Empty;
            }
        }

        /// <summary>
        /// 将一个参数加入参数队列
        /// </summary>
        /// <param name="lp">标签参数</param>
        /// <param name="list">列表</param>
        private void AddParameter(LabelParameter lp, ref IList<LabelParameter> list)
        {
            bool flag = true;
            foreach (LabelParameter p in list)
            {
                if (p.LPName.Equals(lp.LPName))
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
            {
                list.Add(lp);
            }
        }
        /// <summary>
        /// 标签的初始内容
        /// </summary>
        public string Content
        {
            get { return Mass_Content; }
        }
        /// <summary>
        /// 查找某一标签参数的值
        /// </summary>
        /// <param name="ParamName">标签参数的名称</param>
        /// <returns></returns>
        private string GetParamValue(string ParamName)
        {
            string result = string.Empty;
            if (_LblParams == null)
                return null;
            int n = _LblParams.Length;
            for (int i = 0; i < n; i++)
            {
                LabelParameter p = _LblParams[i];
                if (p.LPName.Equals(ParamName))
                {
                    result = p.LPValue;
                    break;
                }
            }
            return result.Equals(string.Empty) ? null : result;
        }
        /// <summary>
        /// 标签内容格式不正确的说明
        /// </summary>
        public string FormatInvalidMsg
        {
            get { return InvalidInfo; }
        }
        /// <summary>
        /// 设置或获取当前的模板类型
        /// </summary>
        public TempType TemplateType
        {
            set { _TemplateType = value; }
            get { return _TemplateType; }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -