Garnicht, XSLT ist ein Prozeduraler Transformator.
Etwas klarer ausgedrückt: Ein Leistungsfähiger XML Umwandler.
Wenn du dem XSLT Prozessor also nicht passend fütterst wird das nichts geben. Es gibt zwar etliche Extension wie z.B: date und string aber das sind reine Konverter Erweiterungen.
Du hast aber die möglichkeit deinen Kalender im XML mit einzubauen oder du ziehst es bei PHP mit den EXSLT Object Model rein.
Ein simples Beispiel (nicht getestet)
PHP-Code:
<?php
function thisMonth()
{
$dom = new DomDocument( '1.0', 'utf-8' );
$dom->formatOutput = true;
$month = $dom->createElement( "month" );
$dom->appendChild( $month );
$days = range( 1, date('t') );
foreach ( range( 0, 34 ) AS $d )
{
if ( $d % 7 == 0 )
$week = $dom->createElement( "week" );
$d = in_array( $d, $days ) ? $d : " ";
$week->appendChild( $dom->createElement( "day", $d ) );
if ( $d % 7 == 0 )
$month->appendChild( $week );
}
return $dom;
}
function Template()
{
global $connection;
$dom = new DomDocument( '1.0', 'utf-8' );
$dom->load( "index.xml" );
$stylesheet = new DomDocument( '1.0', 'utf-8' );
$stylesheet->load('index.xslt');
$xsl = new XSLTProcessor;
$xsl->registerPHPFunctions();
$xsl->importStyleSheet( $stylesheet );
return $xsl->transformToXML( $dom );
}
header( "Content-Type: text/html; charset=utf-8" );
echo Template();
?>
Achte bei dem Beispiel vor allem auf die Stylesheet Definition.
HTML-Code:
<?xml version = '1.0' encoding = 'utf-8' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:php="http://php.net/xsl"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="date php exsl">
<xsl:output version="1.0"
method="xml"
encoding="utf-8"
indent="yes"
media-type="application/xhtml+xml"
doctype-system = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
doctype-public = "-//W3C//DTD XHTML 1.0 Strict//EN"
/>
<xsl:key name="termine" match="termin" use="@datum" />
<xsl:template name="kalender">
<xsl:if test="exsl:object-type(php:function('thisMonth')) = 'node-set'">
<table summary="Cal" border="1">
<xsl:for-each select="exsl:node-set(php:function('thisMonth'))/month/week">
<tr>
<xsl:for-each select="./day">
<td>
<xsl:if test="date:day-of-week-in-month() = .">
<xsl:attribute name="style">
<xsl:text>color:red;</xsl:text>
</xsl:attribute>
</xsl:if>
<xsl:value-of select="." />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:if>
</xsl:template>
<xsl:template match="/">
<head>
<title><xsl:text>Kalender</xsl:text></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="index.css" media="all" />
</head>
<body>
<div>
<p>Kalender</p>
<xsl:call-template name="kalender" />
</div>
</body>
</xsl:template>
</xsl:stylesheet>
Lesezeichen