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 }