开发支持三级目录的导航菜单

【宜搭】低代码开发师中级证书选择题库 钉钉低代码开发师中级证书选择题答案 阅读详情

MOSS的导航菜单默认只支持两级,但是MOSS的导航API实际上是支持无限级的,比如可以用以下代码添加三级导航栏:

using (SPSite site = new SPSite("http://codeart:81"))

{

using (SPWeb web = site.RootWeb)

{

web.AllowUnsafeUpdates = true;

Microsoft.SharePoint.Navigation.SPNavigation sp = web.Navigation;

SPNavigationNode spn = new SPNavigationNode("Google", "www.google.com", true);

SPNavigationNode spn2 = new SPNavigationNode("Google1", "www.google.com", true);

SPNavigationNode spn3= new SPNavigationNode("Google2", "www.google.com", true);

sp.QuickLaunch.AddAsLast(spn);

spn.Children.AddAsLast(spn2);

spn2.Children.AddAsLast(spn3);

web.Update();

}

}

这样添加了三级导航菜单之后,系统默认的界面依然显示不出来。

我们只能通过自己开发导航控件的方式来实现这一点。代码如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web.UI.WebControls;

using Microsoft.SharePoint;

using Microsoft.SharePoint.Navigation;

namespace CodeArt.SharePoint.WebParts

{

public class NavigationMenu : Menu

{

protected override void CreateChildControls()

{

if (this.Items.Count > 0)

return;

base.CreateChildControls();

SPWeb web = SPContext.Current.Web;

Microsoft.SharePoint.Navigation.SPNavigation sp = web.Navigation;

BuildMenuItem(sp.QuickLaunch, this.Items);

}

 

void BuildMenuItem(SPNavigationNodeCollection navNodes, MenuItemCollection menuItems)

{

foreach (SPNavigationNode navNode in navNodes)

{

MenuItem menuItem = new MenuItem();

menuItem.Text = navNode.Title;

menuItem.NavigateUrl = navNode.Url;

menuItems.Add(menuItem);

BuildMenuItem(navNode.Children, menuItem.ChildItems);

}

}

}

}

以上控件继承于Menu,在CreateChildControl方法中调用导航API,递归生成菜单项。

将项目编译,将DLL部署到GAC中,然后可以修改母板页,添加NavigationMenu控件。

在母板页的头部添加注册指令:    

<%@ Register Tagprefix="CodeArt" Namespace="CodeArt.SharePoint.WebParts" Assembly="CodeArt.SharePoint, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd1ced297a124f81" %>

将QuickLaunchNavigationManager控件删掉,添加以下代码:

    <CodeArt:NavigationMenu runat="server" ID="navMenu" Width="100%" StaticDisplayLevels="3"/>

最终,NavigationMenu导航控件的效果下图所示。

MOSS的导航在WSS导航的基础上增加了访问群体的功能,利用访问群体,可以控制导航菜单上的一个节点只能被某个组中的用户看到,如果直接从SPWeb的Navigation属性中获取导航节点,是不能应用访问群体逻辑的,要使导航控件兼容访问群体的控制逻辑,可以调用PortalSiteMapProvider的相应方法来获取导航节点。PortalSiteMapProvider在程序集Microsoft.SharePoint.Publishing.dll中,首先添加对这个程序集的引用,调用PortalSiteMapProvider实现导航的控件代码如下:

using System;

using System.Web;

using System.Web.UI.WebControls;

using Microsoft.SharePoint;

using Microsoft.SharePoint.Navigation;

using Microsoft.SharePoint.Publishing.Navigation;

 

namespace CodeArt.SharePoint.WebParts

{

/// <summary>

/// 适合于MOSS的多级导航控件

/// </summary>

public class MOSSNavigationMenu : Menu

{

protected override void CreateChildControls()

{

if (this.Items.Count > 0)

return;

base.CreateChildControls();

PortalSiteMapProvider mossSiteMapProvider = new PortalSiteMapProvider();

SiteMapNodeCollection oneLevelNodes = mossSiteMapProvider.RootNode.ChildNodes ;

BuildMenuItem( oneLevelNodes , this.Items);

}

 

/// <summary>

/// 递归生成菜单项

/// </summary>

/// <param name="navNodes"></param>

/// <param name="menuItems"></param>

void BuildMenuItem(SiteMapNodeCollection navNodes, MenuItemCollection menuItems)

{

foreach (SiteMapNode navNode in navNodes)

{

MenuItem menuItem = new MenuItem();

menuItem.Text = navNode.Title;

menuItem.NavigateUrl = navNode.Url;

menuItems.Add(menuItem);

BuildMenuItem(navNode.ChildNodes, menuItem.ChildItems);

}

}

}

}

WordPress中自定义导航菜单 任务:已知菜单样式,把该菜单样式搬移到WordPress的主题中 比如,我需要使用WordPress制作一个网站,类似damienhirst.com。首先看一下该网站的样子:   本文的目标,就是制作该网站的导航菜单部分,并把它放到我们自定义的WordPress主题中,供该主题使用。 我们不能直接把该网站的HTML,CSS代码写到Wo 阅读详情

相关推荐

OneBottomNavigationBar 可以凸起的导航菜单

BottomView 使用说明 简介: BottomView 是自定义的一个实现App应用底部导航栏功能的View,可以实现底部 2-5 个导航菜单(一般不会有更多),可以实现某一个菜单凸起的效果,如,有5个菜单,可以选择让第三个菜单凸起(floating),这是很多App都有的功能; 可以根据编写的颜色变化的资源文件来更改图标和文字选中时和未选中时的颜色,可以自由控制是否需要选中(checkab...

一个人的旅行的博客 2910

php的foreach的方法生成三级目录

php利用foreach的方法遍历三维数组并生成三级目录导航: $array=array("meng"=>"梦","li"=>array("fd"=>"李","dda"=>array("fad"=>"发")),"ji"=>array("de"=>"的","ming"=>"名"));         foreach($array as $key=>$name){             $

Dangdangcyuyan的专栏 873

delphi导航菜单范例

一个简单的delphi导航菜单,赶快下载吧!

Delphi动态创建MainMenu和PopupMenu菜单的方法

procedure TForm1.Button1Click(Sender: TObject); var MainMenu:TMainMenu; MenuItem:TMenuItem; begin //创建主菜单对象,并设置主窗口的菜单为MainMenu对象 MainMenu:=TMainMenu.Create(Self); Self.Menu:=MainMenu; //创建Main

孤独剑的专栏 1万+

三级导航菜单网页特效

三级导航菜单网页特效 三级导航菜单网页特效 三级导航菜单网页特效 三级导航菜单网页特效

侧边栏菜单

侧边栏菜单 TCategoryButtons+TSplitView

Delphi菜单设计.4

4.菜单栏、工具栏和状态栏 在可视化程序设计中,每个应用程序都包含一个主窗体。主窗体并不仅仅是一个Form窗体,一个完整的应用程序窗体除了Form窗体外,还应包括菜单栏、工具栏和状态栏等相关组件。这三种组件是主程序窗体的重要组成部分,通过这些组件,可以方便地完成各项操作并了解当前程序的运行状态。本章将介绍如何创建菜单栏、工具栏、状态栏。 4.1 菜单栏 通常,菜单可以看作是命令的列表,使...

jandroid 402

折叠式三级导航

主要是实现折叠式点击滑动导航,主要时候企业级网站的后台开发中;涉及到slideToggle,slideUp等

利用jQuery实现三级侧边导航栏

侧边栏用一个含有三级目录的做法十分常见,记录自己用过的一种写法,主要用jQuery实现。 实现效果图: 具体代码如下: HTML布局 <div class="content"> <div class="content_left"> <div class="left_title"> LOGO </div> <!-- 每一个菜单项 --> <div class="menu"

qq_44782585的博客 2674

delphi左侧推拉式菜单实例代码

delphi左侧推拉式菜单实例代码; 包含简单软件基础界面; 适合新手; 成手勿喷,谢谢!

绝对旋转编码器学习笔记(基本原理,与PC通信等,不定期更新中)

前言 最近开始学习编码器相关内容,目的在于搞清楚编码器的原理,与上位机的联系等问题。笔记资料来源为网络,整理的同时也会有一些总结和感悟。由于研究方向需求,主要研究数字旋转编码器。 1.编码器的定义 编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。——摘自《百度百科》 通常来说,编码器可以将角度位移、直线位移、转速等物理量转换为电信号。这里的电信号根据不同原理的编码器输出脉冲、二进制数码等不同的类型,下面会提到。 2.编码器的分类 编.

黑化咸鱼的博客 1万+

MBA培训管理系统 (二十) ——菜单管理

在上一章中,我们完成了角色分配人员功能。本章将实现菜单管理功能,这是 RBAC 权限系统的核心组成部分。菜单管理的作用:左侧导航菜单- 控制用户能看到哪些菜单项按钮权限- 控制用户在页面内能操作哪些按钮(如新增、编辑、删除)权限标识- 通过menuCode实现细粒度的权限控制菜单类型:目录- 包含子菜单的文件夹(如"系统管理")菜单- 具体的页面(如"角色管理")按钮- 页面内的操作权限(如"新增角色"、“删除角色”)设计菜单数据模型(支持树形结构)实现菜单列表查询(树形表格展示)

低代码布道师的博客 425

TSEND_C指令错误代码解析与实战排错指南

本文详细解析西门子PLC中TSEND_C指令的常见错误代码,包括连接建立、参数配置、资源限制和网络通信等错误类型。针对错误代码80C4等典型问题提供实战排错指南,帮助工程师快速诊断和解决工业通信中的连接故障,提升系统可靠性。

backprop5master的博客 411

自定义MOSS导航菜单

开发支持三级目录的导航菜单 MOSS的导航菜单默认只支持两级,但是MOSS的导航API实际上是支持无限级的,比如可以用以下代码添加三级导航栏: using (SPSite site = new SPSite("http://codeart:81")) { using (SPWeb web = site.RootWeb) { web.AllowUnsafeUpdates = t

lance_lot1的专栏 818

保姆级教程:RK3588部署yolo目标检测模型

RK3588部署yolo目标检测模型非常详细的保姆级教程

ling913的专栏 5487

报错:subprocess.CalledProcessError: Command ‘[‘where‘, ‘cl‘]‘ returned non-zero exit status 1.

右键此电脑--属性--高级系统设置--环境变量--系统变量--找到Path。Enterprise是企业版,如果你是社区版就找Community。2.安装的时候,c++桌面那个需要勾选。

2301_77554343的博客 1507

nuxt 项目实战之顶部导航菜单组件开发

nuxt.js 项目开发 - 顶部导航菜单组件开发 导读 首先我们来分析下,最终案例的导航栏,这是一个移动端展示形式的顶部导航栏,这个导航菜单,采用的是bootstrapVue css ui 组件库 里面的navbar组件 我们需要单独创建一个菜单组件,并且把这个菜单组件放置在,公共的 layout 组件内部,接下来我们来制作菜单导航 我们需要在components目录中新建目录App...

小青蛙的博客 4546

X电容与Y电容,看这一篇就够了

本文详细介绍了X电容与Y电容的定义、作用、位置、分类,以及它们在实际应用中的容值选取和计算方法。通过汽车电子应用和X电容放电电路的实例,帮助读者深入理解这两种安规电容的重要性。文章还探讨了电容放电电阻的计算,确保符合安全规范。

让你爱上电路设计 7016

使用wheelnav.js构建酷炫的动态导航菜单

本文主要介绍一种基于SVG的web动态导航组件。通过这个组件可以实现很多丰富酷炫的效果。首先介绍这款wheelnav.js的相关知识,然后结合代码讲解如何在html页面中创建其对象,接着讲解wheelnav的一些属性和方法,最后给出基于wheelnav的实际成果。

夜郎King的博客 9350

1、世界级模拟电路设计指南

本文详细探讨了模拟电路设计的各个方面,从基础概念到实际应用,涵盖了元件选择、滤波器设计、反馈系统、噪声问题以及SPICE仿真的优缺点。文中还提供了设计实例和无计算机设计方法,旨在帮助工程师提升模拟电路设计的效率与可靠性。

s1t2u3的博客 97

STM32实战开发(110):基于STM32的智能地震监测系统开发

地震监测系统是自然灾害预警体系中至关重要的一部分。随着地震灾害的频发和对自然灾害预测精度要求的提高,智能地震监测系统逐渐成为研究的热点。STM32作为一款高性能的微控制器,凭借其强大的处理能力和丰富的外设接口,在地震监测领域中得到了广泛应用。本篇文章将详细介绍如何使用STM32实现一个智能地震监测系统的开发过程,涵盖硬件设计、软件编程、系统实现及相关代码。通过集成加速度传感器、地震数据采集、实时数据处理和无线数据传输功能,我们可以设计一个高效、稳定的智能地震监测系统。

2201_76125393的博客 710

AutocJS – 为你的文章自动创建目录导航菜单

灵感AnchorJS 是 AutocJS 的创作灵感。既然 AnchorJS 可创建标题的链接,为什么不直接给文章生成一个目录(Table of Contents)导航呢? 于是就有了 AutocJS。What is AutocJS?AutocJS 是一个专门用来生成文章目录(Table of Contents)导航的工具。AutocJS 会查找文章指定区域中的所有 h1~h6 的标签,并自动分析文

Dragon.G 2519

泰凌微8258入门教程 环境篇④——开发板+烧录器 8258mesh新手套件购买

工欲善其事,必先利其器。 淘宝链接:https://item.taobao.com/item.htm?

4128
上一篇: 如何使Layouts里的页面应用站点母板页
下一篇: 多域环境下people picker查找不到用户问题的解决
rickyll
博客等级 码龄19年 14粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值