سؤال

لدي مجموعة من العقد Sitecore:

<item>
  <item>
    <item />    
  </item>
  <item /> <!-- (1) -->
  <item />
</item>
<item>
  <item />
  <item />
</item>

يمكنني الحصول على مسار هذه العناصر باستخدام دالة sc:path(.)، والتي تُرجع شيئًا مثل "/item/item" للنقطة المميزة (1).

ما أريد أن أكون قادرًا على فعله هو تجميع العنصر بناءً على مساره.

لذا فإن مخرجاتي ستكون مثل:

<ul>
  <li>in item
    <ul>
...
    </ul>
  </li>
  <li>in item/item
    <ul>
...
    </ul>
  </li>
</ul>

أنا ألعب بالمحاور السابقة في الوقت الحالي، كما في الكود التالي:

<xsl:for-each select="exsl:node-set($processedResult)/item">
  <xsl:sort 
    select="substring-before(substring-after(sc:path(.),'/sitecore/media library/'),'.aspx')"
    data-type="text"
    order="ascending" />
  <xsl:variable 
    name="path" 
    select="search:GetFriendlyPath('/sitecore/media library/',sc:path(.))" />
    <!-- returns: item/item from /sitecore/media library/item/item/item.aspx -->                    
  <xsl:variable name="lastPath">
    <xsl:choose>
      <xsl:when test="sc:path(preceding)">
        <xsl:value-of 
          select="search:GetFriendlyPath('sitecore/media library',sc:path(preceding))" />
      </xsl:when>
      <xsl:otherwise>none</xsl:otherwise>
    </xsl:choose>
  </xsl:variable>               
  <xsl:if test="$path != $lastPath"> <!-- grouping test -->
    <li>
      <strong>in <xsl:value-of select="$path" /></strong>
    </li>
  </xsl:if>
  <li>
  <!-- render detail -->
  </li>
</xsl:for-each>

...لكن sc:path(preceding) لا يُرجع شيئًا.ومن ثم فإن الشيك الخاص بي لا يعمل.

ما الخطأ الذي افعله؟

هل كانت مفيدة؟

المحلول

لست متأكدًا مما تنوي فعله به

<xsl:when test="sc:path(preceding)">

يقرأ هذا "إطعام الأطفال المذكورين". <preceding> باعتبارها عقدة تعيين ل sc:path() وظيفة".

بالنظر إلى مدخلاتك، لا توجد عناصر فرعية بهذا الاسم.

هل يمكن أن تقصد شيئًا مثل

<xsl:when test="sc:path(preceding-sibling::item[1])">

?

لا أعرف شيئًا عن Sitecore، سأجربه مع:

<xsl:for-each select="exsl:node-set($processedResult)/item">
  <xsl:sort select="
    substring-before(
      substring-after(sc:path(.), '/sitecore/media library/'),
      '.aspx'
    )"
    data-type="text"
    order="ascending"
  />
  <xsl:variable name="path" select="
    search:GetFriendlyPath(
      '/sitecore/media library/', sc:path(.)
    )
  " />
  <xsl:variable name="lastPath">
    <xsl:choose>
      <xsl:when test="preceding-sibling::item[1]">
        <xsl:value-of select="
          search:GetFriendlyPath(
            'sitecore/media library', sc:path(preceding-sibling::item[1])
          )"
        />
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>none</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>

  <!-- grouping test -->
  <xsl:if test="$path != $lastPath">
    <li>
      <strong>
        <xsl:text>in </xsl:text>
        <xsl:value-of select="$path" />
      </strong>
    </li>
  </xsl:if>

  <li>
    <!-- render detail -->
  </li>
</xsl:for-each>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top