Sitecore XSL: выберите элемент по пути или идентификатору, получите детей, получите Droplink элемент ребенка - PullRequest
0 голосов
/ 14 мая 2018

У меня почти нет опыта работы с XSL, и мне нужна помощь.У меня есть компонент, который отображается в файле ASCX, но его необходимо переместить, чтобы он был внутри файла XSL, и я не уверен в синтаксисе.

У меня есть предмет Sitecore, /sitecore/content/Home/Social Media Link Group;Мне нужны все дети этого предмета, /sitecore/content/Home/Social Media Link Group/[Social Media Item].Этот элемент имеет два поля: Social Media Source Name, поле Droplink;и Social Media Link, ссылка (я знаю, что это слишком сложно, я не создавал это).

Элемент droplink имеет два поля: Social Media Source Name и Social Media Source Css Class

Итак, в XSL мне нужно получить все дочерние элементы определенного корневого элемента;для каждого элемента получите поле Link и элемент Droplink и получите два поля из элемента Droplink

Итак, я не уверен, как отобразить это в XSL.Вот где я начал, но выдает ошибку, и я не уверен, как отлаживать XSL.Вот что у меня есть:

<xsl:variable name="item" select="sc:item(sc:fld('__display name'), $socialShareLinks)" />
<xsl:for-each select="sc:CHILDREN??">
  <xsl:variable name="socialItem" select="sc:item(.,.)"/>
  <xsl:varible name="linkedItem" select="sc:field('Social Media Link Source', $socialItem)"/>
  <xsl:varible name="itemClass" select="sc:field('Social Media Source Css Class', $linkedItem"/>
  <li class="$itemClass">
    <sc:link field="Social Media Link"></sc:link>
  </li>
</xsl:for-each>

Может кто-нибудь помочь мне разобраться, как правильно написать это?1) Я не знаю, как получить ск: дети.2) Visual Studio говорит мне, что я не могу иметь переменную xsl: внутри xsl: for-each, но я не уверен, что должен делать вместо этого.3) Любые другие вещи, которые я ошибся.

РЕДАКТИРОВАТЬ: я обновил свой код следующим образом:

<xsl:for-each select="$socialShareRoot/item">
  <li class="float-left">

    <xsl:variable name="itemUrl" select="sc:fld('Social Media Link', ., 'Url')"/>

    <xsl:variable name="LinkedItemId" select="sc:fld('Social Media Link Source', ., 'id')" />
    <xsl:variable name="SocialShareItem" select="sc:item($LinkedItemId, . )" />

    <xsl:variable name="itemClass" select="sc:fld('Social Media Source Css Class', $SocialShareItem)"/>               
    <xsl:variable name="itemName" select="sc:fld('Social Media Source Name', $SocialShareItem)"/>

    <a target="_blank">
      <xsl:attribute name="class">
        <xsl:value-of select="$itemClass"/>
      </xsl:attribute>
      <xsl:attribute name="href">
        <xsl:value-of select="$itemUrl"/>
      </xsl:attribute>

      <xsl:value-of select="$LinkedItemId"/>
    </a>
  </li>
</xsl:for-each>    

Я получаю пустое значение для каждого существующего элемента в Sitecore, но не получаю никаких значений для класса, имени илиURL

...