XSLT : XML -> XHTML5
This commit is contained in:
parent
bdc1fc7016
commit
d4d827118c
|
@ -1,10 +1,3 @@
|
|||
- get() renvoie la valeur par défaut quand null dans la BDD (mais comment faire les tris ?).
|
||||
Donc, quand on crée une page, on met les valeurs par défaut. Et s'il y a besoin de pouvoir modifier les valeurs par défaut et que ça
|
||||
suive dans la BDD, on fait pour chaque table une table nom_table__defaut (ou pour chaque colonne une colonne nom_colonne__defaut), qui
|
||||
indique pour chaque cellule si elle est à la valeur par défaut (et en cas de changement de la valeur par défaut, on update les cellules
|
||||
correspondantes dans la table avec la nouvelle valeur par défaut).
|
||||
- reset : set avec la valeur par défaut.
|
||||
|
||||
- Debug : grouper les erreurs, améliorer l'affichage.
|
||||
|
||||
- Valeur de retour des res_t_xxx ?
|
||||
|
|
|
@ -49,7 +49,14 @@ class ElementDocument {
|
|||
$this->attr[$nom] = $valeur;
|
||||
}
|
||||
|
||||
public function to_XHTML_5($indent = "") {
|
||||
public function to_XHTML_5() {
|
||||
return applyXSLT($this->to_XML(), dirname(__FILE__) . "/xslt/xhtml5.xsl");
|
||||
}
|
||||
|
||||
public function to_XML($indent = "") {
|
||||
if ($this->type == "litteral") {
|
||||
return $this->attr['valeur'];
|
||||
}
|
||||
$ret = "";
|
||||
$ret .= "$indent<" . $this->type;
|
||||
foreach ($this->attr as $k => $v) {
|
||||
|
@ -60,7 +67,7 @@ class ElementDocument {
|
|||
} else {
|
||||
$ret .= ">\n";
|
||||
foreach ($this->enfants as $k => $v) {
|
||||
$ret .= $v->to_XHTML_5($indent . " ");
|
||||
$ret .= $v->to_XML($indent . " ");
|
||||
}
|
||||
$ret .= "$indent</" . $this->type . ">\n";
|
||||
}
|
||||
|
@ -105,7 +112,7 @@ class ElementDocument {
|
|||
$max = 0;
|
||||
foreach (self::$types[$type]["attributs_oblig"] as $i => $nom) {
|
||||
if (!isset($args[$i])) {
|
||||
Debug::error("Argument manquant : $nom pour " . $elem->type);
|
||||
Debug::erreur("Argument manquant : $nom pour " . $elem->type);
|
||||
}
|
||||
$elem->attr($nom, $args[$i]);
|
||||
$max = $i;
|
||||
|
@ -135,7 +142,7 @@ class ElementDocument {
|
|||
} elseif (self::has_widget($fn)) {
|
||||
return $this->créer_widget($fn, $args);
|
||||
} else {
|
||||
Debug::error("Impossible d'ajouter un élément $fn à " . $this->type);
|
||||
Debug::erreur("Impossible d'ajouter un élément $fn à " . $this->type);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -145,6 +152,7 @@ class Document extends ElementDocument {
|
|||
protected $singletons = array();
|
||||
public function __construct() {
|
||||
parent::__construct("document", $this);
|
||||
$this->erreurs();
|
||||
$this->header();
|
||||
$this->nav();
|
||||
$this->article();
|
||||
|
@ -153,9 +161,11 @@ class Document extends ElementDocument {
|
|||
}
|
||||
|
||||
$inline_elems = "span text a strong em img";
|
||||
ElementDocument::add_type("document", "header footer nav article script style");
|
||||
ElementDocument::add_type("document", "erreurs header footer nav article script style");
|
||||
ElementDocument::add_type(true, "header", "title");
|
||||
ElementDocument::add_type(true, "erreurs", "litteral");
|
||||
ElementDocument::add_type("title", "text");
|
||||
ElementDocument::add_type("litteral", "", "valeur");
|
||||
ElementDocument::add_type(true, "footer", "");
|
||||
ElementDocument::add_type(true, "nav", "ul");
|
||||
ElementDocument::add_type(true, "article", "ul hX table p form span"); // span ?
|
||||
|
|
|
@ -7,7 +7,6 @@ function verifications() {
|
|||
verifications();
|
||||
|
||||
function main() {
|
||||
echo "<pre>";
|
||||
initModules();
|
||||
|
||||
// Attention ! ne pas garder BDD::reset() en production !
|
||||
|
@ -21,14 +20,13 @@ function main() {
|
|||
}
|
||||
|
||||
$rendu = $page->rendu($res);
|
||||
$rendu = htmlspecialchars($rendu->to_XHTML_5());
|
||||
|
||||
BDD::close();
|
||||
|
||||
echo Debug::afficher();
|
||||
echo "<pre>";
|
||||
|
||||
$rendu->erreurs()->litteral(Debug::afficher());
|
||||
$rendu = $rendu->to_XHTML_5();
|
||||
|
||||
echo $rendu;
|
||||
echo "</pre>";
|
||||
// echo "<pre>" . htmlspecialchars($rendu) . "</pre>";
|
||||
}
|
||||
|
||||
?>
|
|
@ -70,7 +70,7 @@ function type_liens($groupe, $type = null) {
|
|||
mPage::$limitation_infos_module = $lim;
|
||||
} else {
|
||||
if ($type === null) {
|
||||
Debug::error('fonction type_liens() : le paramètres $type est obligatoire.');
|
||||
Debug::erreur('fonction type_liens() : le paramètres $type est obligatoire.');
|
||||
}
|
||||
// TODO : ... jusqu'ici (mPage::$modules[$m]['types_enfants'] peut être factorisé aussi (pas pour attribut)).
|
||||
mPage::$modules[$m]['type_liens'][$groupe] = $type;
|
||||
|
@ -90,10 +90,10 @@ function attribut($nom, $type = null, $defaut = null) {
|
|||
mPage::$limitation_infos_module = $lim;
|
||||
} else {
|
||||
if ($type === null || $defaut === null) {
|
||||
Debug::error('fonction attribut() : les paramètres $type et $defaut est obligatoire.');
|
||||
Debug::erreur('fonction attribut() : les paramètres $type et $defaut est obligatoire.');
|
||||
}
|
||||
if (!Document::has_widget("w_" . $type)) {
|
||||
Debug::error("L'attribut $nom a le type $type, mais aucun widget w_$type n'existe.");
|
||||
Debug::erreur("L'attribut $nom a le type $type, mais aucun widget w_$type n'existe.");
|
||||
}
|
||||
mPage::$modules[$m]['attributs'][$nom] = array("global" => false, "type" => $type, "defaut" => $defaut);
|
||||
}
|
||||
|
|
|
@ -23,6 +23,20 @@ function str_contains($str, $small) {
|
|||
return strpos($str, $small) !== false;
|
||||
}
|
||||
|
||||
function applyXSLT($xml, $xslt_file) {
|
||||
$dom = new DOMDocument();
|
||||
$dom->preserveWhiteSpace = false;
|
||||
$dom->loadXML($xml);
|
||||
|
||||
$xsl = new DOMDocument();
|
||||
$xsl->load($xslt_file); // LIBXML_NOCDATA ?
|
||||
|
||||
$xslt = new XSLTProcessor();
|
||||
$xslt->importStylesheet($xsl);
|
||||
|
||||
return $xslt->transformToXML($dom);
|
||||
}
|
||||
|
||||
/**** Début PATH ****/
|
||||
|
||||
// http://www.liranuna.com/php-path-resolution-class-relative-paths-made-easy/
|
||||
|
|
62
cms2/code/xslt/xhtml5.xsl
Normal file
62
cms2/code/xslt/xhtml5.xsl
Normal file
|
@ -0,0 +1,62 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||
<xsl:output method="xml" indent="no" encoding="utf-8"/>
|
||||
<xsl:template match="document">
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
<xsl:value-of select="header/title/text/@text"/>
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<xsl:apply-templates select="erreurs"/>
|
||||
<xsl:apply-templates select="article"/>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="article">
|
||||
<article>
|
||||
<xsl:apply-templates select="*"/>
|
||||
</article>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="hX">
|
||||
<h1>
|
||||
<xsl:apply-templates select="*"/>
|
||||
</h1>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="a">
|
||||
<a href="{@href}">
|
||||
<xsl:apply-templates select="*"/>
|
||||
</a>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="span">
|
||||
<!-- TODO : mettre le class="?" ssi c'est non vide. -->
|
||||
<span class="{@class}">
|
||||
<xsl:apply-templates select="*"/>
|
||||
</span>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="p|ul|li">
|
||||
<xsl:element name="{local-name()}">
|
||||
<xsl:apply-templates select="*"/>
|
||||
</xsl:element>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="text">
|
||||
<xsl:value-of select="@text"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="erreurs">
|
||||
<xsl:apply-templates select="*" mode="copy"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="@*|*|text()" mode="copy">
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@*|*|text()" mode="copy"/>
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
Loading…
Reference in New Issue
Block a user