【问题标题】:Selection max items of specific aliases with XSLT and Umbraco使用 XSLT 和 Umbraco 选择特定别名的最大项目
【发布时间】:2015-01-09 00:12:07
【问题描述】:

我有一些 XSLT 和 Umbraco 的小挑战。

输出招聘广告是一个“功能”。

我必须从 X 节点中选择最多 3 个节点(招聘广告),并且对于这 3 个节点,我想选择两个 X 类型和一个 Y 类型。

我有一个名为jobAdType 的属性别名,我想选择两个具有jobAdType= Vikar 的节点和一个具有jobAdType= Fast job 的节点。广告类型是从 Umbraco 的下拉菜单中选择的。

广告的 XML 是:

<FrontPageAd id="1379" parentID="1246" level="3" creatorID="0" sortOrder="0" createDate="2014-11-07T11:40:14" updateDate="2014-11-12T09:09:55" nodeName="Annonce 1" urlName="annonce-1" path="-1,1058,1246,1379" isDoc="" nodeType="1245" creatorName="ITSecurity" writerName="ITSecurity" writerID="0" template="0" nodeTypeAlias="FrontPageAd">
  <adHeader>Headr</adHeader>
  <adBodyText>jkdjdk</adBodyText>
  <adCompany>Test firma</adCompany>
  <adPosition>Test stilling</adPosition>
  <adCompanyLogo>
   <MultiNodePicker type="media">
     <nodeId>1317</nodeId>
   </MultiNodePicker>
  </adCompanyLogo>
  <jobAdType>Vikar</jobAdType>
</FrontPageAd>

当前的 XSLT 是这样的:

<xsl:variable name="header" select="umbraco.library:GetDictionaryItem('Frontpage.Content.JobAdsHeader')" />

<xsl:if test="$adCount &gt; 0">

    <div class="jobAdsContainer">

        <strong class="header uc"><xsl:value-of select="$header" /></strong>

        <div class="container">

            <div class="adslider">

                <ul class="noList adList slideList">

                    <xsl:for-each select="$adIds [position() &lt; 4]">

                        <xsl:variable name="adItem" select="umbraco.library:GetXmlNodeById(.)" />

                        <xsl:call-template name="JobTypeItem">                      
                            <xsl:with-param name="item" select="$adItem" />
                        </xsl:call-template>

                    </xsl:for-each>

                </ul>

            </div>
        </div>
    </div>

</xsl:if>

<xsl:variable name="companyLabel" select="umbraco.library:GetDictionaryItem('Frontpage.AdList.Company')" />
<xsl:variable name="positionLabel" select="umbraco.library:GetDictionaryItem('Frontpage.AdList.Position')" />
<xsl:variable name="contactPersonLabel" select="umbraco.library:GetDictionaryItem('Frontpage.AdList.ContactPerson')" />

<xsl:variable name="adType" select="$item/jobAdType" />
<xsl:variable name="adTitle" select="$item/@nodeName" />
<xsl:variable name="adHeader" select="$item/adHeader" />
<xsl:variable name="adBodyText" select="$item/adBodyText" />
<xsl:variable name="adCompany" select="$item/adCompany" />
<xsl:variable name="adPosition" select="$item/adPosition" />
<xsl:variable name="adLogo" select="$item/adCompanyLogo/descendant::nodeId" />

<li>

    <xsl:if test="$adLogo != ''">

        <div class="table">

            <div class="adImage">                                                       
                <xsl:variable name="image" select="umbraco.library:GetMedia($adLogo, 0)" />

                    <img src="{Eksponent.CropUp:Url($image/umbracoFile, '175x-M')}" />          
            </div>

        </div>

    </xsl:if>

    <span class="header uc"><xsl:value-of select="$adHeader" /></span>                                      
    <span class="company"><strong><xsl:value-of select="$companyLabel" />:</strong> <xsl:value-of select="concat(' ', $adCompany)" /></span>
    <span class="position"><strong><xsl:value-of select="$positionLabel" />:</strong> <xsl:value-of select="concat(' ', $adPosition)" /></span> 

    <span class="description">
        <xsl:value-of select="$adBodyText" disable-output-escaping="yes" />
    </span>

</li>

【问题讨论】:

    标签: html xml xslt xpath umbraco


    【解决方案1】:

    你可以使用“apply-templates”代替这个for-each:

    <xsl:for-each select="$adIds [position() &lt; 4]">
    <!-- Is this .net call necessary? Is . another node other then the current one? -->
    <xsl:variable name="adItem" select="umbraco.library:GetXmlNodeById(.)" />
    <xsl:call-template name="JobTypeItem">                      
    <xsl:with-param name="item" select="$adItem" />
    </xsl:call-template>
    </xsl:for-each>
    

    然后限制select语句中的节点:

    <xsl:apply-templates select="FrontPageAd[position() &lt; 3][string(./jobAdType) = 'Vikar']"/>
    <xsl:apply-templates select="FrontPageAd[position() &lt; 2][string(./jobAdType) = 'Fast job']"/>
    

    然后添加一个匹配 FrontPageAd 的模板

    <xsl:template match="FrontPageAd">
    <!-- add code goes here. -->
    </xsl:template>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      相关资源
      最近更新 更多