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

📄 pagelocation.cs

📁 基于.Net环境下c#实现的国人自己的Blog平台,基于.Text的核心技术,但做了汉化以及改写了一部分的核心代码,值得研究学习
💻 CS
字号:
#region Disclaimer/Info

///////////////////////////////////////////////////////////////////////////////////////////////////
// .Text WebLog
// 
// .Text is an open source weblog system started by Scott Watermasysk. 
// Blog: http://ScottWater.com/blog 
// RSS: http://scottwater.com/blog/rss.aspx
// Email: Dottext@ScottWater.com
//
// For updated news and information please visit http://scottwater.com/dottext and subscribe to 
// the Rss feed @ http://scottwater.com/dottext/rss.aspx
//
// On its release (on or about August 1, 2003) this application is licensed under the BSD. However, I reserve the 
// right to change or modify this at any time. The most recent and up to date license can always be fount at:
// http://ScottWater.com/License.txt
// 
// Please direct all code related questions to:
// GotDotNet Workspace: http://www.gotdotnet.com/Community/Workspaces/workspace.aspx?id=e99fccb3-1a8c-42b5-90ee-348f6b77c407
// Yahoo Group http://groups.yahoo.com/group/DotText/
// 
///////////////////////////////////////////////////////////////////////////////////////////////////

#endregion

using System;
using System.Collections;
using System.Xml.Serialization;

namespace Dottext.Web.Admin
{
	// TODO: target, defaults to none; change Name to Title or Description, what does what? Desc can be ALT
	[Serializable]
	[XmlRoot(ElementName = "RootPage", IsNullable=true)]
	public class PageLocation
	{
		private PageLocationCollection _childLocations;
		private string _description;
		private bool _isRoot;
		private string _title;
		private string _id;
		private PageLocation _parent;
		private string _url;
		private string _target = String.Empty;

		public PageLocation()
		{
			_childLocations = new PageLocationCollection();
		}

		public PageLocation(Type pageType, string title, string url) : this()
		{
			_id = pageType.BaseType.FullName;
			_title = title;
			_url = url;
		}

		public PageLocation(string id, string title, string url) : this()
		{
			_id = id;
			_title = title;
			_url = url;
		}

		public PageLocation(string id, string title, string url, string description) : this()
		{
			_id = id;
			_title = title;
			_url = url;
			_description = description;
		}

		#region Accessors

		[XmlElement(ElementName = "Page", IsNullable = true)]
		public PageLocationCollection ChildLocations
		{
			get { return _childLocations; }
			set { _childLocations = value; }
		}

		[XmlAttribute("description")]
		public string Description
		{
			get { return _description; }
			set { _description = value; }
		}

		public bool IsRoot
		{
			get { return _isRoot; }
		}

		[XmlAttribute("title")]
		public string Title
		{
			get { return _title; }
			set { _title = value; }
		}

		[XmlAttribute("id")]
		public string ID
		{
			get { return _id; }
			set { _id = value; }
		}

		public PageLocation Parent
		{
			get { return _parent; }
		}

		public bool HasChildren
		{
			get { return _childLocations.Count > 0; }
		}

		[XmlAttribute("url")]
		public string Url
		{
			get { return _url; }
			set { _url = value; }
		}

		[XmlAttribute("target")]
		public string Target
		{
			get { return _target; }
			set { _target = value; }
		}

		#endregion

		public static PageLocation GetRootPage()
		{
			PageLocation result = new PageLocation();
			result._isRoot = true;
			return result;
		}

		public static PageLocation GetRootPage(PageLocation root)
		{
			root._isRoot = true;
			return root;
		}

		public void AppendChild(PageLocation newChild)
		{
			// TODO: Q? test != self or not?

			newChild.SetParent(this);

			if (SiteMap.Instance.ContainsID(newChild.ID))
				SiteMap.Instance[newChild.ID] = newChild;
			else
				SiteMap.Instance.AddPage(newChild);

			_childLocations.Add(newChild);
		}

		internal void SetParent(PageLocation parentPage)
		{
			_parent = parentPage;
		}

		public PageLocation[] GetAncestors()
		{
			return GetAncestors(false);
		}

		public PageLocation[] GetAncestors(bool includeSelf)
		{
			ArrayList ancestors = new ArrayList();

			if (includeSelf)
				ancestors.Add(this);

			PageLocation currentAncestor = _parent;
			while (null != currentAncestor)
			{
				ancestors.Add(currentAncestor);
				if (currentAncestor.IsRoot)
					break;
				currentAncestor = currentAncestor.Parent;
			}

			PageLocation[] results = new PageLocation[ancestors.Count];
			ancestors.CopyTo(results);
			return results;
		}

		// RemoveChild

		// GetBreadCrumbLinks -- preloaded and formatted?
	}
}

⌨️ 快捷键说明

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