【问题标题】:Kentico Navigation MenuKentico 导航菜单
【发布时间】:2018-02-14 03:09:42
【问题描述】:

我在 Kentico 7 中工作,我需要将某种类型的 CSS 样式应用于新的“下拉菜单”。母版页为其导航菜单显示某种 CSS 样式,但是,导航菜单由中继器(Web 部件)组成。这造成了一个问题,因为我现在必须在我的导航菜单中添加一些中继器不允许的复杂性。通过添加“下拉菜单”webpart,我能够获得所需的导航菜单特性,但是,CSS 样式看起来与使用中继器时不同。如何找到中继器上使用的 CSS 并将其应用于“下拉菜单”?谢谢!

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读stackoverflow.com/help/how-to-ask,了解如何提出我们可以回答的问题。您已经为这个问题提供了一些背景信息,但是我们如何在没有看到代码的情况下帮助您呢?请编辑问题以显示导致您遇到困难的代码部分。否则问题将被否决并最终被删除

标签: css content-management-system frontend web-deployment kentico


【解决方案1】:

要扩展有关根据 Kentico 最佳实践构建菜单的博客文章:

http://devnet.kentico.com/articles/best-practices-for-implementing-site-navigation-in-kentico

层次转换的标准结构如下所示:

标题转换:

<ul>

物品转换:

<li>
  <a href="{% GetDocumentUrl() %}" title="{% HTMLEncode(DocumentName) %}">{% HTMLEncode(DocumentName) %}</a>
  {^SubLevelPlaceHolder^}
</li>

页脚转换:

</ul>

这会生成一个这样的结构:

<ul>
 <li>
  <a href="/item-1.aspx" title="item 1">item 1</a>  
 </li>
 <li>
  <a href="/item-2.aspx" title="item 2">item 2</a>
  <ul>
   <li>
    <a href="/item-2/subitem-1.aspx" title="subitem 1">subitem 1</a> 
   </li>
  </ul>
 </li>
 <li>
  <a href="/item-3.aspx" title="item 3">item 3</a>
 </li>
</ul>

当您希望您的菜单反映页面的属性→导航部分的属性时,您需要对您的项目转换实施一些逻辑。 CMS_Document 数据库表中有以下列反映导航部分的属性:

[DocumentMenuCaption]
[DocumentMenuStyle]
[DocumentMenuItemImage]
[DocumentMenuItemLeftImage]
[DocumentMenuItemRightImage]
[DocumentMenuJavascript]
[DocumentMenuRedirectUrl]
[DocumentMenuClass]
[DocumentMenuStyleHighlighted]
[DocumentMenuClassHighlighted]
[DocumentMenuItemImageHighlighted]
[DocumentMenuItemLeftImageHighlighted]
[DocumentMenuItemRightImageHighlighted]
[DocumentMenuItemInactive]

让我们浏览一下导航部分的所有相关属性:

1) 菜单标题

您可以指定与页面名称不同的自定义菜单标题,因此您需要检查此属性是否为空,如果已填写,请改用标题。要确定某些属性是否为空,您可以在宏中使用String.IsNullOrEmpty(DocumentMenuCaption)DocumentMenuCaption.ToString()==""。在我的示例中,我使用第二个选项:

{% HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName) %}

宏检查是否指定了任何 DocumentMenuCaption,如果没有指定,则使用 DocumentName

2) 菜单操作

非活动菜单项重定向到 URL:

{% (DocumentMenuItemInactive && DocumentMenuRedirectUrl.ToString()=="")?"":"href='"+GetDocumentUrl()+"' ") %}

Javascript 命令:

{% (DocumentMenuJavascript.ToString()!=""?"onclick=\""+DocumentMenuJavascript+"\" ":"") %}

Kentico 已经原生支持重定向。

3) 菜单设计:

菜单项样式:

{% (DocumentMenuStyle.ToString()!=""?"style='"+DocumentMenuStyle+"' ":"") %}
Menu item CSS class:
class='{% (DocumentMenuClass.ToString()!=""?DocumentMenuClass:"DefaultClassOrNothing") %}'

菜单项左图:

{% (DocumentMenuItemLeftImage.ToString()!=""?"<img src='"+DocumentMenuItemLeftImage+"' alt='"+HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName)+"' />":"") %}

菜单项图片:

{% if (DocumentMenuItemImage.ToString()!="") { "<img src='"+DocumentMenuItemImage+"' alt='"+HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName)+"' />"; } %}

菜单项右图:

{% (DocumentMenuItemRightImage.ToString()!=""?"<img src='"+DocumentMenuItemRightImage+"' alt='"+HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName)+"' />":"") %}

- 突出显示: 所有以前的属性都有自己的 - 突出显示的版本。此类属性的代码名称附加了突出显示的后缀。要查看菜单项是否突出显示,可以调用以下宏方法:

IsCurrentDocument()

根据您的需要,您还可以使用以下方法来突出显示当前菜单项路径上的所有项目:

IsDocumentOnSelectedPath()

最终的 Item 转换如下所示:

<li {% if (IsCurrentDocument()) { return (DocumentMenuStyleHighlighted.ToString()!=""?"style='"+DocumentMenuStyleHighlighted+"' ":""); } else { return (DocumentMenuStyle.ToString()!=""?"style='"+DocumentMenuStyle+"' ":""); } #%}class='{% if (IsCurrentDocument()) { return (DocumentMenuClassHighlighted.ToString()!=""?DocumentMenuClassHighlighted:"DefaultClassOrNothing"); } else { return (DocumentMenuClass.ToString()!=""?DocumentMenuClass:"DefaultClassOrNothing"); } #%}'>
  {% if (IsCurrentDocument()) { DocumentMenuItemLeftImageHighlighted.ToString()!=""?"<img src='"+DocumentMenuItemLeftImageHighlighted+"' alt='"+HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName)+"' />":"" } else { DocumentMenuItemLeftImage.ToString()!=""?"<img src='"+DocumentMenuItemLeftImage+"' alt='"+HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName)+"' />":"" } %}
  <a {% (DocumentMenuJavascript.ToString()!=""?"onclick=\""+DocumentMenuJavascript+"\" ":"") #%}{% ((DocumentMenuItemInactive && DocumentMenuRedirectUrl.ToString()=="")?"":"href='"+GetDocumentUrl()+"' ") #%}title='{% HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName) #%}'>{% if (IsCurrentDocument()) { if (DocumentMenuItemImageHighlighted.ToString()!="") { "<img src='"+DocumentMenuItemImageHighlighted+"' alt='"+HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName)+"' />"; } else { HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName); } } else { if (DocumentMenuItemImage.ToString()!="") { "<img src='"+DocumentMenuItemImage+"' alt='"+HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName)+"' />"; } else { HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName); } } #%}</a>
  {% if (IsCurrentDocument()) { DocumentMenuItemRightImageHighlighted.ToString()!=""?"<img src='"+DocumentMenuItemRightImageHighlighted+"' alt='"+HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName)+"' />":"" } else { DocumentMenuItemRightImage.ToString()!=""?"<img src='"+DocumentMenuItemRightImage+"' alt='"+HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName)+"' />":"" } else { DocumentMenuItemRightImage.ToString()!=""?"<img src='"+DocumentMenuItemRightImage+"' alt='"+HTMLEncode(DocumentMenuCaption.ToString()!=""?DocumentMenuCaption:DocumentName)+"' />":"" } %}
  {^SubLevelPlaceHolder^}
</li>

【讨论】:

  • 我发现“下拉菜单”Web 部件正在做我需要它做的事情,但是,我似乎找不到它的 CSS 样式属性,我也找不到了解它如何自动使用 CMS 树中的某些元素,而不是使用所有元素。
  • 例如:主要元素可能包括Home、Visit、About、Announcements、Contact、Blog。当我从导航选择中添加“下拉菜单”webpart 时,它会自动插入一个导航菜单,其中仅包含访问、关于、公告和联系人。我在哪里可以找到它在哪里做这个,这个属性在哪里?
【解决方案2】:

对于 v7,take a look at this article 由 Kentico Support 提供,其中讨论了使用分层查看器和分层转换构建超级菜单。本质上,您将使用基于节点级别、文档类型和您可以添加到转换中的任何其他条件所需的 HTML 来构建导航。

在 v8 和更新版本中,可以选择在转换中放置一个占位符来说明子节点的去向;此功能在 v7 中不可用,我认为有足够的理由进行升级,因为它可以节省大量时间。

【讨论】:

  • 感谢您的资源!我会深入研究的!
【解决方案3】:

有一篇关于Best Practices for Implementing Site Navigation in Kentico的好文章

对于下拉菜单,使用分层菜单会更好

【讨论】:

  • 非常感谢。我会调查的。
  • 谨记@ChrisWestman 这个解决方案适用于 v8 和更新版本。分层查看器的某些功能在 v7 中不可用。
  • 对。我现在一直在看的是使用标准的“下拉菜单”,因为它在导航 webpart 中列出。现在唯一的问题是对其进行样式设置,使其与我需要替换的中继器相匹配。
  • 我会看一下我发布的文章,因为它是针对 v7 的,尽管它需要一些努力和大量的反复试验,但它会为您提供所需的内容。跨度>
猜你喜欢
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 2017-05-23
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多