Dynamické ovlivnění vzhledu pomocí parametrů

Příklad 19. 11/katalog.php

<?php

// načtení dokumentu XML
$xml = new DomDocument();
$xml->load("katalog.xml");

// načtení stylu XSLT
$xsl = new DomDocument();
$xsl->load("katalog.xsl");

// vytvoření procesoru XSLT
$proc = new xsltprocessor();
$proc->importStylesheet($xsl);

if (IsSet($_GET["s"]))
  $proc->setParameter("", "raditPodle", $_GET["s"]);

if (IsSet($_GET["t"]))
  $proc->setParameter("", "typ", $_GET["t"]);
  
if (IsSet($_GET["o"]))
  $proc->setParameter("", "smer", $_GET["o"]);

// provedení transformace a vypsání výsledku
echo $proc->transformToXML($xml);

?>

Příklad 20. 11/katalog.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<!-- Podle jakého elementu se má výsledek seřadit -->
<xsl:param name="raditPodle">cena</xsl:param>

<!-- Datový typ položky, podle které se řadí -->
<xsl:param name="typ">number</xsl:param>

<!-- Směr řazení dat (vzestupně/sestupně) -->
<xsl:param name="smer">ascending</xsl:param>
  
<xsl:template match="/">
  <html>
    <head>
      <title>Katalog <xsl:value-of select="katalog/info/firma"/></title>
      <style type="text/css">
      th a { text-decoration: none; color: black; }
      </style>    </head>
    <body>
      <h1>Katalog <xsl:value-of select="katalog/info/firma"/></h1>
  
      <table width="100%" border="1">
        <tr bgcolor="#FF8000">
          <th><a href="katalog.php?s=nazev&amp;t=text&amp;o=ascending"
                 title="Seřadit vzestupně podle názvu">&#x25BC;</a>
              Název
              <a href="katalog.php?s=nazev&amp;t=text&amp;o=descending"
                 title="Seřadit sestupně podle názvu">&#x25B2;</a>
          </th>
          <th><a href="katalog.php?s=kategorie&amp;t=text&amp;o=ascending"
                 title="Seřadit vzestupně podle kategorie">&#x25BC;</a>
              Kategorie
              <a href="katalog.php?s=kategorie&amp;t=text&amp;o=descending"
                 title="Seřadit sestupně podle kategorie">&#x25B2;</a>
          </th>
          <th><a href="katalog.php?s=cena&amp;t=number&amp;o=ascending"
                 title="Seřadit vzestupně podle ceny">&#x25BC;</a>
              Cena
              <a href="katalog.php?s=cena&amp;t=number&amp;o=descending"
                 title="Seřadit sestupně podle ceny">&#x25B2;</a>
          </th>
        </tr>  
        <xsl:apply-templates select="//polozka">
          <xsl:sort select="*[local-name() = $raditPodle]" data-type="{$typ}" order="{$smer}"/>
        </xsl:apply-templates>
      </table>
    </body>
  </html>    
</xsl:template>

<xsl:template match="polozka">
  <tr>
    <xsl:apply-templates select="nazev"/>
    <xsl:apply-templates select="kategorie"/>
    <xsl:apply-templates select="cena"/>
  </tr>
</xsl:template>

<xsl:template match="nazev">
  <td align="center"><xsl:apply-templates/></td>
</xsl:template>

<xsl:template match="kategorie">
  <td align="center"><xsl:apply-templates/></td>
</xsl:template>

<xsl:template match="cena">
  <td align="right"><xsl:apply-templates/> Kč</td>
</xsl:template>

</xsl:stylesheet>