0

Umbraco と XSLT を初めて使用します。私は学校を卒業したわけではなく、そこで vb.net と asp.net を学びました。今、この地元の教会のために無料のウェブサイトを作っています。彼らはスタッフページが欲しいので、これが私の最初の解決策でした...

<?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:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" 

xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" xmlns:umbraco.contour="urn:umbraco.contour" xmlns:tagsLib="urn:tagsLib" xmlns:BlogLibrary="urn:BlogLibrary" 
  exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets umbraco.contour tagsLib BlogLibrary ">

<xsl:output method="xml" omit-xml-declaration="yes"/>

<xsl:param name="currentPage"/>

<xsl:template match="/">

<div class="staffList">
<xsl:for-each select="$currentPage/* [@isDoc and string(umbracoNaviHide) != '1']">

<img src="{staffPhoto}" width="210" height="280"/>  
<p class="introduction"><xsl:value-of select="umbraco.library:ReplaceLineBreaks(staffName)" disable-output-escaping="yes"/></p>     
<p class="introduction"><xsl:value-of select="umbraco.library:ReplaceLineBreaks(position)" disable-output-escaping="yes"/></p>

</xsl:for-each>
</div>

</xsl:template>

</xsl:stylesheet>

それが私がこれまでに何とか取り組んできたことですが、それはdivの下に一度に1つずつリストするだけです. そのページのスクロール量を減らし、表の行ごとに 2 つリストするスペースを確保したいと考えています。今日の仕事中にかなり見回した後でも、各子供の 3 つの情報を表のセルに入れるループを作成できませんでした。

私はそれがこのようなものであることを期待していますが、これはmod 5でエラーになっています

<div class="staffList">
<table>
<xsl:for-each select="$currentPage/*[position()mod5=1]">
<xsl:variable name = "current-pos" select="(position()-1) * 5+1"/>
<tr>
<xsl:for-each select="$currentPage/*[position()&gt;=$current-pos and position() &lt; $current-pos+5]" >
<td>
<xsl:value-of select="staffName"/>
</td>
</xsl:for-each>
</tr>           
</xsl:for-each>         
</table>
</div>

アリの方向が役立ちます。私が言ったように、この XSLT は私にとってまったく新しいものであり、同時に、私にとって新しい Umbraco の他のすべてに頭を悩ませようとしています。ここで試行錯誤による学習。

助けてくれてありがとう。ダン

4

1 に答える 1

0

「mod」という単語の前後にスペースを入れる必要があるため、このエラーが発生しているようです。一方、使用しているアプローチは少し手続き的であり、次のようにもう少しエレガントなアプローチがあります。

<div class="staffList">
  <table>
    <xsl:apply-templates select="$currentPage/*[position() mod 5 = 1]" mode="row" />
  </table>
</div>

<!-- Separate templates -->
<xsl:template match="*" mode="row">
  <tr>
    <xsl:apply-templates select=". | following-sibling::*[position() &lt; 5"
                         mode="cell" />
  </tr>           
</xsl:template> 

<xsl:template match="*" mode="cell">
  <td>
    <xsl:value-of select="staffName"/>
  </td>
</xsl:template>

$currentPageただし、これは、XML ソース ドキュメント内の単一の要素であると想定しています。そうでない場合でも、これを行うことができます:

<div class="staffList">
  <table>
    <xsl:for-each select="$currentPage/*[position() mod 5=1]">
      <xsl:variable name = "current-pos" select="(position()-1) * 5+1"/>
      <tr>
        <xsl:apply-templates 
           select="($currentPage/*)[position() &gt;= $currentPos and
                                    position() &lt; $current-pos + 5]"
           mode="cell"/>             
      </tr>
    </xsl:for-each>
  </table>
</div>

<xsl:template match="*" mode="cell">
  <td>
    <xsl:value-of select="staffName"/>
  </td>
</xsl:template>
于 2013-03-23T01:20:11.457 に答える