aboutsummaryrefslogtreecommitdiff
path: root/src/view/AbstractBuilder.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/AbstractBuilder.php')
-rw-r--r--src/view/AbstractBuilder.php52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/view/AbstractBuilder.php b/src/view/AbstractBuilder.php
new file mode 100644
index 0000000..cd2b361
--- /dev/null
+++ b/src/view/AbstractBuilder.php
@@ -0,0 +1,52 @@
1<?php
2// src/view/AbstractBuilder.php
3
4use App\Entity\Node;
5
6abstract class AbstractBuilder
7{
8 protected const VIEWS_PATH = '../src/view/templates/';
9 protected string $html = '';
10
11 protected function useChildrenBuilder(Node $node): void
12 {
13 foreach($node->getChildren() as $child_node)
14 {
15 $builder_name = $this->snakeToPascalCase($child_node->getName()) . 'Builder';
16 $builder = new $builder_name($child_node);
17 $this->html .= $builder->render();
18
19 // pages spéciales où on n'assemble pas tout
20 if($builder_name === 'HeadBuilder' && $builder->getStop())
21 {
22 foreach($node->getChildren() as $target_node){
23 if($target_node->getName() === 'main'){
24 $main_node = $target_node;
25 break;
26 }
27 }
28 // on construit <main> et on s'arrête! les autres noeuds sont ignorés
29 $builder_name = $this->snakeToPascalCase($main_node->getName()) . 'Builder';
30 $builder = new $builder_name($main_node);
31 $this->html .= "<body>\n";
32 $this->html .= $builder->render() . "\n";
33 $this->html .= "</body>\n</html>";
34 break;
35 }
36 }
37 }
38
39 protected function snakeToPascalCase(string $input): string
40 {
41 return str_replace('_', '', ucwords($input, '_'));
42 }
43
44 public function render(): string // = getHTML()
45 {
46 return $this->html;
47 }
48 public function addHTML(string $html): void
49 {
50 $this->html .= $html;
51 }
52} \ No newline at end of file