Я использую xml и xslt для создания желаемого HTML.В моем предыдущем посте я смог сгенерировать все записи, однако я немного запутался, как получить данные фильтра в соответствии со значениями параметров xslt.
У меня есть два элемента управления на моей странице: первый - для выбора, а второй -для отображения записей в соответствии со значениями, переданными из элемента управления выбором.
Ниже приведены xmls и xslt, которые используются для генерации второго пользовательского контроля (отображения всех записей).
1) Назначения.xml
<?xml version="1.0"?>
<list type="Destinations">
<resources location="include/xml/locations.xml">
<publication>481</publication>
</resources>
<destination id="594051" title="Sydney" url="/asiapacific/australia/sydney.aspx" >
<city id="192409" />
</destination>
<destination id="594088" title="Brisbane" url="/asiapacific/australia/brisbane.aspx" >
<city id="192397" />
</destination>
<destination id="594579" title="Dubai" url="/middleeast/uae/dubai.aspx" >
<city id="192855" />
</destination>
<destination id="594580" title="Abu Dhabi" url="/middleeast/uae/abudhabi.aspx" >
<city id="192851" />
</destination>
</list>
2) Locations.xml
<?xml version="1.0"?>
<list type="Locations">
<region id="192393" code="ASIA" name="Asia & the Pacific" shortname="Asia & the Pacific">
<country id="192395" code="AU" name="Australia" shortname="Australia">
<city id="192397" code="BNE" name="Brisbane" shortname="Brisbane">
<airport id="192399" code="BNE" name="Brisbane International Airport" shortname="Brisbane"></airport>
</city>
<city id="192409" code="SYD" name="Sydney" shortname="Sydney">
<airport id="192411" code="SYD" name="Kingsford Smith Airport" shortname="Sydney"></airport>
</city>
</country>
</region>
<region id="192847" code="MEAF" name="The Middle East & Africa" shortname="The Middle East & Africa">
<country id="192849" code="AE" name="United Arab Emirates" shortname="United Arab Emirates">
<city id="192851" code="AUH" name="Abu Dhabi" shortname="Abu Dhabi">
<airport id="192853" code="AUH" name="Abu Dhabi" shortname="Abu Dhabi"></airport>
</city>
<city id="192855" code="DXB" name="Dubai" shortname="Dubai">
<airport id="192857" code="DXB" name="Dubai International Airport" shortname="Dubai"></airport>
</city>
</country>
</region>
</list>
1) Veiwalldestination.xslt
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tlink="urn:TridionLinking" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:utils="urn:XSLTExtensions" exclude-result-prefixes="xsl xlink tlink msxsl utils">
<xsl:output method="xml" version="1.0" encoding="UTF-8" omit-xml-declaration="yes" />
<!--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Title: View All the Destinations XHTML
Description: Render view all the destinations control
Author: Manoj Singh
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<xsl:include href="dynamic_linking.xslt"/>
<!-- Translations are still loaded here because of XHTML content, research a way around that -->
<xsl:key name="kCityById" match="city" use="@id"/>
<xsl:variable name="vLocations" select="document(concat($publicationPath, /list/resources/@location))/list"/>
<xsl:variable name="destination" select="/list"/>
<xsl:param name="publicationPath"/>
<xsl:param name="pubURL"/>
<xsl:param name="pageURL"/>
<xsl:param name="region"/>
<xsl:param name="country"/>
<!-- root match -->
<xsl:template match="/list">
<!--<xsl:value-of select="$publicationPath"/>-->
<div class="brownBarContainer">
<div class="brownBar">
All Destinations
</div>
</div>
<table width="100%" cellspacing="0" cellpadding="0" border="0" class="displayTable">
<tbody>
<tr>
<th scope="col" class="first sortSelected">
<div class="thPadding">
<a class="iconDownSortArrow" href="#">Destination</a>
</div>
</th>
<th scope="col" class="sortHover">
<div class="thPadding">
<a class="iconSortArrowOff" href="#">Country</a>
</div>
</th>
<th scope="col" class="sortHover">
<div class="thPadding">
<a class="iconSortArrowOff" href="#">Region</a>
</div>
</th>
</tr>
<xsl:apply-templates select="destination"></xsl:apply-templates>
</tbody>
</table>
</xsl:template>
<xsl:template match="text()"/>
<xsl:template match="destination">
<xsl:variable name="vReverseURL">
<xsl:call-template name="reverse">
<xsl:with-param name="string" select="@url"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="vCountryURL">
<xsl:call-template name="reverse">
<xsl:with-param name="string" select="substring-after($vReverseURL,'/')"/>
</xsl:call-template>
<xsl:text>/index.aspx</xsl:text>
</xsl:variable>
<xsl:variable name="vRegionURL">
<xsl:call-template name="reverse">
<xsl:with-param name="string" select="substring-after(substring-after($vReverseURL,'/'),'/')"/>
</xsl:call-template>
<xsl:text>/index.aspx</xsl:text>
</xsl:variable>
<xsl:variable name="current" select="."/>
<xsl:for-each select="$vLocations">
<tr>
<td class="detail first">
<a class="arrowSmallFront" href="{$current/@url}">
<xsl:value-of select="$current/@title"/>
</a>
</td>
<td class="detail noLeftBorder">
<a class="arrowSmallFront" href="{$vCountryURL}">
<xsl:value-of select="key('kCityById',$current/city/@id)/../@name"/>
</a>
</td>
<td class="detail noLeftBorder">
<a class="arrowSmallFront" href="{$vRegionURL}">
<xsl:value-of select="key('kCityById',$current/city/@id)/../../@name"/>
</a>
</td>
</tr>
</xsl:for-each>
</xsl:template>
<xsl:template name="reverse">
<xsl:param name="string" select="''"/>
<xsl:if test="$string != ''">
<xsl:call-template name="reverse">
<xsl:with-param name="string" select="substring($string,2)"/>
</xsl:call-template>
<xsl:value-of select="substring($string,1,1)"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Если в xslt есть два параметра, эти идентификаторы поступают из верхнего usercontrol (выбор)
<xsl:param name="region"/>
<xsl:param name="country"/>
Теперь я хочу показать записи в соответствии с переданными идентификаторами регионов и стран, я могу получить все записи, когдаИдентификаторы региона и страны не передаются.Например, если в usercontrol выбран регион «Азия и Тихий океан», имеющий ID = 192393 , тогда будут доступны только все пункты назначения, связанные с этим регионом, и если пользователь выберет нужную страну в регионе, то он покажет только записиотносится только к этой стране. Например, если пользователь выбирает регион «Азия и Тихий океан» и страну как «Австралия», то xslt будет отображать только «Сидней» и «Брисбен» в соответствии с приведенными выше xmls.
Отношение между destination.xml и location.xmls с идентификаторами города
Вторичный, я хочу отсортировать пункт назначения, когда пользователь нажимает на заголовок пункта назначения,пожалуйста, посмотрите выше xslt с ниже htmls
<th scope="col" class="first sortSelected">
<div class="thPadding">
<a class="iconDownSortArrow" href="#">Destination</a>
</div>
</th>
Спасибо и извините за длинные вопросы. Пожалуйста, предложите!