Umbraco宏引用根,但现在被打破后重新定位



我在Umbraco中按照以下步骤在我的内容节点中添加文件夹结构。

步骤1

创建一个新的文档类型Content Folder。

进入设置>文档类型>单击3点>创建。给它的名称内容文件夹。作为图标选择文件夹图标添加一个新的属性重定向,别名为umbracoRedirect,类型为Content Picker内置属性umbracoRedirect用于重定向使用其id从一个节点到另一个节点。为每个文件夹设置这个属性到第一个子页。

步骤2

允许子节点类型在此文件夹中。

转到Content Folder属性的结构选项卡在此文件夹下允许的子类型保存更改

步骤3

允许这个文件夹在你的根Home节点下。

转到Home根属性的结构选项卡保存更改

步骤4

添加文件夹结构和添加页面。

在根节点下新建一个文件夹Content Folder(内容文件夹)命名为HQ,添加一个新页面a在您的HQ中,将重定向属性设置为您的对你所有的文件夹和页面都这样做发布

它工作,但是我有以下宏在我的页面显示我所在节点的子节点。因为我把这些放在根目录中,现在我已经把它们移动到子文件夹中,所有列表都比它们应该高1级(因为当前节点比它们低1级)。

在下面的结构中,我有2个单独的菜单,一个出现在你是否在一个章节或章节页面在一个给定的章节中,显示该章节的所有章节的列表。所以第一章会显示1.1和1.2。第二个菜单指向同一章节的章节和故事页面只显示章节中的故事所以如果我在章节1.1页面它会显示1.1.1 1.1.2和1.1.3的故事

My Structure Is Like This
    Root
    -Team 1 (Folders)
    --Level 1 (Chapters)
    ---Level 1.1 (Sections)
    ----Level 1.1.1 (Stories)
    ----Level 1.1.2 (Stories)
    ----Level 1.1.3 (Stories)
    ---Level 1.2 (Sections)
    ----Level 1.2.1 (Stories)
    ----Level 1.2.2 (Stories)
    ----Level 1.2.3 (Stories)
    --Level 2
    ---Level 2.1
    ----Level 2.1.1
    --Level 3
    --Level 4
    ---Level 4.1
    ----Level 4.1.1
    -Team 2 Folder
    -Team 3 Folder
<umbraco:Macro  runat="server" language="cshtml"> @inherits umbraco.MacroEngines.DynamicNodeContext
  @*
  Macro to display child pages below the root page of a standard website.
  Also highlights the current active page/section in the navigation with
  the css class "current". 
  *@
  @{ 
  @* Get the root of the website *@
  var root = Model.AncestorOrSelf(1);
  }
  <ul>
    <li>Chapter<br>
      Sections
      <ul>
        @foreach (var page in root.Children.Where("Visible"))
        {
        <li class="@page.IsAncestorOrSelf(Model, "current", "")"> <a href="@page.Url">@page.Name</a> </li>
        }
      </ul>
    </li>
  </ul>
</umbraco:Macro>

我想知道如何让我的宏再次工作并引用正确的节点。

编辑

我还使用以下代码来显示第二级节点

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxml="urn:schemas-microsoft-com:xslt" 
    xmlns:umbraco.library="urn:umbraco.library" xmlns:Examine="urn:Examine" 
    exclude-result-prefixes="msxml umbraco.library Examine ">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:param name="currentPage"/>
<!-- Input the documenttype you want here -->
<xsl:variable name="level" select="2"/>
        <xsl:variable name="startNode" select="$currentPage/ancestor-or-self::*[@level = $level]" />
<xsl:variable name="nodesToShow" select="$startNode/*[@isDoc][not(umbracoNaviHide = 1)]" />
<xsl:template match="/">
<!-- The fun starts here -->
<xsl:if test="$nodesToShow">
    <img src="/media/1133/actheader2.png" alt="Activities in this Section" class="acttitle" />
</xsl:if>
    <ul>
<xsl:for-each select="$currentPage/ancestor-or-self::* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']">
<li>
   <xsl:attribute name="class">
        <xsl:if test="contains(activityextras,'Video')">Video</xsl:if>
        <xsl:if test="contains(activityextras,'Scripted')">Scripted</xsl:if>
        </xsl:attribute>
   <a href="{umbraco.library:NiceUrl(@id)}">
      <xsl:value-of select="@nodeName" />
   </a>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>

这部分代码:

var root = Model.AncestorOrSelf(1);

获取级别1的页面,该页面始终是主页。如果文件夹现在总是在第二层,你应该可以把它改成:

var root = Model.AncestorOrSelf(2);

应该能找到文件夹,只要你在文件夹下面。如果您可能有嵌套文件夹,则需要进行进一步更改。

最新更新