SharePoint开发 - 自定义导航菜单(三)附其他代码
博客地址 http://blog.csdn.net/foxdave
接上篇点击打开链接
LeftNavGroupTemplate.cs
internal class LeftNavGroupTemplate : ITemplate
{
// Fields
private int index;
private string xml; // Methods
public LeftNavGroupTemplate(string _navXml, int _groupIndex)
{
this.xml = _navXml;
this.index = _groupIndex;
} public void InstantiateIn(Control container)
{
HtmlGenericControl child = new HtmlGenericControl("div");
child.Style["width"] = "150px";
child.Style["overflow"] = "hidden";
DevExpress.Web.ASPxTreeView.ASPxTreeView view = new DevExpress.Web.ASPxTreeView.ASPxTreeView
{
ID = "tv" + this.index
};
view.Font.Name = "微软雅黑";
view.Font.Size = new FontUnit("12px");
view.TextField = "title";
view.ToolTipField = "title";
view.NavigateUrlField = "url";
view.ImageUrlField = "imgurl";
view.Width = new Unit("100%");
XmlDataSource source = new XmlDataSource
{
ID = Guid.NewGuid().ToString(),
Data = this.xml
};
source.XPath = "/SiteMap/SiteMapNode[" + ((this.index + 1)).ToString() + "]/*";
view.DataSource = source;
view.DataBind();
child.Controls.Add(view);
container.Controls.Add(child);
}
}
Item.cs
[Serializable]
public class Item
{
// Properties
[XmlAttribute]
public string Path { get; set; } [XmlAttribute]
public string Title { get; set; } [XmlAttribute]
public string Url { get; set; }
}
GlobalTab.cs
[Serializable]
public class GlobalTab
{
// Methods
public GlobalTab()
{
if (this.ItemCol == null)
{
this.ItemCol = new List<Item>();
}
} // Properties
[XmlElement("Item")]
public List<Item> ItemCol { get; set; }
}
Config.cs
internal class Config
{
// Methods
public static GlobalTab Deserialize(string xml)
{
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
{
XmlSerializer serializer = new XmlSerializer(typeof(GlobalTab));
return (GlobalTab)serializer.Deserialize(stream);
}
} public static XmlDataSource GetDataSource(SPWeb web, NavType navType)
{
XmlDataSource source = new XmlDataSource();
try
{
string innerXml = Load(web, navType);
if (string.IsNullOrEmpty(innerXml))
{
return source;
}
XmlDocument document = new XmlDocument();
document.LoadXml(innerXml);
if (!web.IsRootWeb && (document.DocumentElement.GetAttribute("Inherited").ToLower() == "true"))
{
innerXml = LoadParent(web.ParentWeb, navType);
document.LoadXml(innerXml);
}
if (!web.UserIsSiteAdmin)
{
XmlNodeList list = document.SelectNodes("//SiteMapNode[@SPGroups]");
for (int i = 0; i < list.Count; i++)
{
string[] strArray = list[i].Attributes["SPGroups"].Value.Split(new char[] { ';' });
bool flag = false;
foreach (string groupName in strArray)
{
if ((from g in web.Groups.Cast<SPGroup>() select g.Name).Contains<string>(groupName))
{
SPGroup group = web.Groups[groupName];
//flag = (from g in web.CurrentUser.Groups.Cast<SPGroup>() select g.Name).Contains<string>(group.Name);
flag = group.ContainsCurrentUser;
}
if (flag)
{
break;
}
}
if (!flag)
{
list[i].ParentNode.RemoveChild(list[i]);
}
}
}
foreach (XmlNode node in document.SelectNodes("//SiteMapNode[@url]"))
{
string url = node.Attributes["url"].Value;
node.Attributes["url"].Value = url.Replace("~site/", SPMIPUtility.GetRelative(web));
}
innerXml = document.InnerXml;
source.Data = innerXml;
source.XPath = "/SiteMap/*";
source.DataBind();
source.EnableCaching = false;
}
catch (Exception exception)
{
SPMIPTrace.WriteError("SPMIPNavigation", exception);
}
return source;
} public static string Load(SPWeb web, NavType navType)
{
string str = null;
try
{
StreamReader reader;
SPList settingList = SPMIPUtility.CheckSettingList("SPMIPSetting");
switch (navType)
{
case NavType.Top:
{
SPFile topNavSettingFile = settingList.RootFolder.Files["TopNav.xml"];
if (topNavSettingFile.Exists)
{
using (reader = new StreamReader(topNavSettingFile.OpenBinaryStream()))
{
str = reader.ReadToEnd();
}
}
break;
}
case NavType.Left:
{
SPFile leftNavSettingFile = settingList.RootFolder.Files["LeftNav.xml"];
if (leftNavSettingFile.Exists)
{
using (reader = new StreamReader(leftNavSettingFile.OpenBinaryStream()))
{
str = reader.ReadToEnd();
}
}
break;
}
}
return str;
}
catch (Exception exception)
{
SPMIPTrace.WriteError("SPMIPNavigation", exception);
return str;
}
} public static string LoadParent(SPWeb web, NavType navType)
{
if (web == null)
{
return null;
}
string str = null;
try
{
str = Load(web, navType);
if (!string.IsNullOrEmpty(str))
{
return str;
}
return LoadParent(web.ParentWeb, navType);
}
catch
{
return LoadParent(web.ParentWeb, navType);
}
} public static string Serialize(GlobalTab _class)
{
using (MemoryStream stream = new MemoryStream())
{
XmlSerializer serializer = new XmlSerializer(typeof(GlobalTab));
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
serializer.Serialize(stream, _class, namespaces);
stream.Position = 0;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
return Encoding.UTF8.GetString(buffer);
}
} // Nested Types
public enum NavType
{
Top,
Left
}
}
SharePoint开发 - 自定义导航菜单(三)附其他代码的更多相关文章
- SharePoint开发 - 自定义导航菜单(一)菜单声明与配置
博客地址 http://blog.csdn.net/foxdave 本篇描述自定义sharepoint菜单的一种方式,自定义菜单适用于一些门户等需求的网站 自定义的菜单有自己的数据源,可以是数据表,可 ...
- SharePoint开发 - 自定义导航菜单(二)母版页的菜单应用
博客地址 http://blog.csdn.net/foxdave 接上篇点击打开链接 本篇叙述在母版页中应用之前的配置信息生成菜单,主要涉及到母版页的自定义,并应用了第三方控件库DevExpress ...
- 为SharePoint网站创建自定义导航菜单
转:http://kaneboy.blog.51cto.com/1308893/397779 相信不少人都希望把SharePoint网站内置的那个顶部导航菜单,换成自己希望的样式.由于SharePoi ...
- SharePoint 2013 自定义扩展菜单
在对SharePoint进行开发或者功能扩展的时候,经常需要对一些默认的菜单进行扩展,以使我们开发的东西更适合SharePoint本身的样式.SharePoint的各种功能菜单,像网站设置.Ribbo ...
- SharePoint 2013 自定义扩展菜单(二)
接博文<SharePoint 2013 自定义扩展菜单>,多加了几个例子,方便大家理解. 例七 列表设置菜单扩展(listedit.aspx) 扩展效果 XML描述 <CustomA ...
- Winfrom 开发系统导航菜单
先上图看效果在说. 效果图如上,在Web中这个一点难度都没有,几行Css+JS就搞定了.但是在Winfrom中.本来就是半杯水的水准,想做这个个导航菜单,发现真难找,找了很多都不合胃口,只能自己写个了 ...
- jQuery弹性滑动导航菜单实现思路及代码
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8" /> <meta na ...
- SharePoint 2013:自定义ECB菜单项的添加
本文分别介绍了两种常用的添加ECB菜单项的方式. 声明式创建 这也是微软最佳实践推荐的方式.在VS中创建一个SharePoint空解决方案,并添加一个“空元素”类型的SPI. 在Elements.xm ...
- SharePoint开发 - 自定义页面(错误页、登出页)
博客地址 http://blog.csdn.net/foxdave 本文叙述如何自定义SharePoint的固有页面,比较简单,用一句话说就是"做个页面,写一句代码." 创建Sha ...
随机推荐
- hiho1093_spfa
题目 SPFA模板题,题目中数据可能有两个点之间有多条边直接相连,使用 unordered_map< int, unordered_map< int, int>>, 来存储图的 ...
- hiho_1057_performance_log
题目大意 给出一个函数调用日志,判断日志是否合法,且求出合法日志中函数调用的时间长度. 题目链接:performance log 题目分析 首先需要清除非法日志的几种情形: (1)日志的时间戳不是按照 ...
- Linux远程管理
若想要远程管理服务器,对于Windows系统,应该比较容易理解,通过window系统自带的远程桌面客户端即可登录远程服务器,从而实现在本地对远程服务器的管理.然而对于linux服务器来说这种方法就不行 ...
- css三级下拉的导航栏
#menu{ height: 65px; width:100%; background-color: rgba(0, 0, 0, 0.5);}#menu ul{ list-style: none;}# ...
- Java 创建xml文件和操作xml数据
java中的代码 import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; ...
- eclipse插件在线发布发布和版本更新(web site) 转
欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ...
- 创建和使用Windows静态链接库
首先明确这篇文章的目的,我希望大家能够通过这篇文章了解一下如何在实际工作中创建和使用Windows平台下的静态链接库.关于链接库的概念,希望大家参考维基百科"Library"词条( ...
- 你不知道的JavaScript-- 事件流与事件处理
转载:http://blog.csdn.net/i10630226/article/details/48970971 1. 事件处理 1.1. 绑定事件方式 (1)行内绑定 语法: //最常用的使用方 ...
- JDK1.7-LinkedList循环链表优化
最近在看jdk1.7的时候,发现LinkedList 和1.6中的变化. 首先,简单介绍一下LinkedList: LinkedList是List接口的双向链表实现.由于是链表结构,所以长度没有限制: ...
- 淘宝三角做法防CSS2D转换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...