Mercurial > defr > templates
comparison class.template.php @ 15:51645aad97a8
Simplification du code, impliquant un changement important de comportement.
Avant, les balises dans l'espace de nom template n'apparaissant pas
dans les paramètres d'applications étaient supprimés. Maintenant,
leur contenu passe dans le template de base.
author | Franck Deroche <webmaster@defr.org> |
---|---|
date | Mon, 22 Oct 2007 16:04:12 +0200 |
parents | a7ce1a423cbe |
children | 7a3ce31086b3 |
comparison
equal
deleted
inserted
replaced
14:54b0a41e5564 | 15:51645aad97a8 |
---|---|
8 function __construct($fileName, $shouldValidate = false) { | 8 function __construct($fileName, $shouldValidate = false) { |
9 $this->xmlDocument = new DOMDocument(); | 9 $this->xmlDocument = new DOMDocument(); |
10 $this->xmlDocument->validateOnParse = $shouldValidate; | 10 $this->xmlDocument->validateOnParse = $shouldValidate; |
11 $this->xmlDocument->preserveWhiteSpace = false; | 11 $this->xmlDocument->preserveWhiteSpace = false; |
12 $this->xmlDocument->loadXML(file_get_contents($fileName)); | 12 $this->xmlDocument->loadXML(file_get_contents($fileName)); |
13 $this->xmlDocument->preserveWhiteSpace = false; | |
13 $this->xmlXPath = new DOMXPath($this->xmlDocument); | 14 $this->xmlXPath = new DOMXPath($this->xmlDocument); |
14 $this->xmlXPath->registerNamespace('_t', Template::NS); | 15 $this->xmlXPath->registerNamespace('_t', Template::NS); |
15 } | 16 } |
16 | 17 |
17 function apply($selector, $obj, DOMElement $root = null) { | 18 function apply($selector, $obj, DOMElement $root = null) { |
21 if(is_array($obj)) | 22 if(is_array($obj)) |
22 $this->applyClone($rootSelector, $obj, $root); | 23 $this->applyClone($rootSelector, $obj, $root); |
23 else { | 24 else { |
24 foreach($rootSelector->nodes as $node) { | 25 foreach($rootSelector->nodes as $node) { |
25 $content = $this->parseReplacement($obj); | 26 $content = $this->parseReplacement($obj); |
26 if(isset($rootSelector->attribute)) { | 27 if(isset($rootSelector->attribute)) |
27 $node->setAttribute($rootSelector->attribute, $obj); | 28 $node->setAttribute($rootSelector->attribute, $obj); |
28 } else { | 29 else |
29 if($node->namespaceURI == Template::NS) | 30 $this->setNodeContent($node, $content); |
30 $this->replaceNode($node, $content); | |
31 else | |
32 $this->setNodeContent($node, $content); | |
33 } | |
34 } | 31 } |
35 } | 32 } |
36 } | 33 } |
37 | 34 |
38 function applyClone($rootSelector, $obj, $root) { | 35 function applyClone($rootSelector, $obj, $root) { |
47 if(isset($locSelector->attribute)) | 44 if(isset($locSelector->attribute)) |
48 $futureNode->setAttribute($locSelector->attribute, $test); | 45 $futureNode->setAttribute($locSelector->attribute, $test); |
49 else { | 46 else { |
50 $content = $this->parseReplacement($test); | 47 $content = $this->parseReplacement($test); |
51 $node->insertBefore($content, $tmp->orig); | 48 $node->insertBefore($content, $tmp->orig); |
52 if($futureNode->namespaceURI == Template::NS) | 49 $this->setNodeContent($futureNode, $content); |
53 $this->replaceNode($futureNode, $content); | |
54 else | |
55 $this->setNodeContent($futureNode, $content); | |
56 } | 50 } |
57 } | 51 } |
58 } | 52 } |
59 } | 53 } |
60 } | 54 } |
129 function clean() { | 123 function clean() { |
130 // Suppression des noeuds à cloner | 124 // Suppression des noeuds à cloner |
131 $nodes = $this->xmlXPath->query("//*[@_t:toClone]|//_t:*"); | 125 $nodes = $this->xmlXPath->query("//*[@_t:toClone]|//_t:*"); |
132 foreach($nodes as $node) { | 126 foreach($nodes as $node) { |
133 if($node->parentNode) { | 127 if($node->parentNode) { |
134 $node->parentNode->removeChild($node); | 128 $parent = $node->parentNode; |
129 if(!$node->hasAttributeNS(Template::NS, 'toClone')) { | |
130 while($node->hasChildNodes()) | |
131 $parent->insertBefore($node->firstChild, $node); | |
132 } | |
133 $parent->removeChild($node); | |
135 } | 134 } |
136 } | 135 } |
137 } | 136 } |
138 | 137 |
139 function __toString() { | 138 function __toString() { |
140 $this->clean(); | 139 $this->clean(); |
141 $this->xmlDocument->formatOutput = true; | 140 $this->xmlDocument->formatOutput = true; |
141 $this->xmlDocument->normalizeDocument(); | |
142 return $this->xmlDocument->saveXML(); | 142 return $this->xmlDocument->saveXML(); |
143 } | 143 } |
144 } | 144 } |