diff options
author | polo-pc-greta <ordipolo@gmx.fr> | 2025-03-27 10:13:03 +0100 |
---|---|---|
committer | polo-pc-greta <ordipolo@gmx.fr> | 2025-03-27 10:13:03 +0100 |
commit | df3612ed7e6691530503f79483d2fdbc032d01b8 (patch) | |
tree | 56d1c68fdc8625f5dad1937a654299d45142c79a /src/view/AbstractBuilder.php | |
download | cms-df3612ed7e6691530503f79483d2fdbc032d01b8.zip |
mise en ligne github
Diffstat (limited to 'src/view/AbstractBuilder.php')
-rw-r--r-- | src/view/AbstractBuilder.php | 52 |
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 | |||
4 | use App\Entity\Node; | ||
5 | |||
6 | abstract 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 | ||