我们正在使用 Sitefinity 11 和 MVC。我们正在尝试仅对位于站点根目录下的主标题页面使用一个模板。在该模板上,我们打算使用位于页面左侧的垂直导航栏(使用包含的 Sitefinity 导航栏小部件设置为垂直视图,它的 Bootstrap 4)。
我们希望导航显示该部分的最顶部页面(我们通过将“ShowParentPage”设置为 True 来启用它,并显示最多 3 层深度的子页面(包括首页......所以子页面和大子页面) . 棘手的部分是我们希望它保持不变,即使用户导航到其中一个子页面并始终显示具有两个子级别的顶层。目前没有内置功能,最接近的选项是将小部件设置为始终显示当前页面和子页面。但同样,这会导致将当前页面设置为顶部。
主页下只有三四个这样的顶级页面,所以如果迫在眉睫,我们可以为网站的每个部分创建不同的模板,然后只需将导航小部件设置为始终默认为该部分的首页是导航小部件上的另一个内置选项,但这似乎会导致重复工作。
我一直在尝试修改 NavigationView.Vertical razor html 视图以达到我们想要的结果,但我没有运气。我的想法是,如果我可以检查父页面或父页面的父页面是否具有某个页面标题(随着时间的推移应该保持相当静态,尽管是的,我知道这可能会导致页面名称的风险是更改),然后将其设置为活动节点,然后让代码执行它已经在执行的操作,即循环遍历子页面并将它们写入导航菜单。
这是视图上的默认代码片段:
@model Telerik.Sitefinity.Frontend.Navigation.Mvc.Models.INavigationModel
<div class="@Model.CssClass">
<nav>
<ul class="nav flex-column navbar-child-custom">
@foreach (var node in Model.Nodes)
{
<li class="nav-item">
<a class="nav-link @GetClass(node)" href="@node.Url" target="@node.LinkTarget">@node.Title</a>
@RenderSubLevelsRecursive(node)
</li>
}
</ul>
</nav>
</div>
如果我能以某种方式将 for-each 循环中的那个节点设置为最顶层的父页面,那么我可以让它做它的事情并且它会工作,但我不知道这样做的正确方法。
非常感谢任何帮助或建议!
编辑:我附上了一些显示页面层次结构的图像(您可以看到成员、退休人员和雇主作为我所指的三个顶级页面)、模板中使用的选择以及结果当您在会员页面时在页面上,然后当您在会员下方的养老金页面上时左侧导航会发生什么。在这种情况下,我们希望导航保持不变,就像您在“成员”页面上一样。