Umbraco Macro引用Root但现在在重新定位后被破坏

时间:2015-07-23 21:58:52

标签: javascript node.js xslt macros umbraco

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

  

第1步

     

创建一个名为“内容文件夹”的新文档类型。

     

转到设置>文件类型>点击3点>创建。给   它的名称是Content Folder。作为图标选择文件夹图标添加新的   property使用类型Content Picker的别名umbracoRedirect重定向   保存更改内置属性umbracoRedirect用于重定向   一个节点使用其id到另一个节点。因此,为每个文件夹设置此属性   到第一个子页面。

     

第2步

     

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

     

转到“内容文件夹”属性的结构选项卡检查   您要在此文件夹下保留的子类型保存更改

     

第3步

     

在根目录主节点下允许此文件夹。

     

转到Home root属性的结构选项卡检查   ContentFoldertype允许作为子节点保存更改

     

第4步

     

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

     

转到您的内容在类型的根节点下添加新文件夹   内容文件夹为其命名HQ添加一个名为A的新页面   允许在您的文件夹下在您的HQ中将Redirect属性设置为您的   第一页为所有文件夹和页面执行此操作保存更改和   发布

但是我的页面中有以下宏,它显示了我所在节点的子节点。由于我将它们放在根目录中,因为我已将它们移动到子文件夹中,所有列表都比它们应该高1级be(因为当前节点低1级。

在结构中下面我有2个单独的菜单,无论您是在章节还是章节页面上,都会出现一个菜单,该章节显示该章节中所有部分的列表。所以对于第1章,它将显示1.1和1.2。第二个菜单在同一章中的Section和story Pages上显示,并在该部分中显示故事,因此,如果我在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>

1 个答案:

答案 0 :(得分:1)

这里的代码部分是:

var root = Model.AncestorOrSelf(1);

获取级别1的页面,该页面始终是homePage。如果文件夹现在始终处于第二级,您应该只能将其更改为:

var root = Model.AncestorOrSelf(2);

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