aboutsummaryrefslogtreecommitdiff
path: root/src/View/HeadBuilder.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/View/HeadBuilder.php')
-rw-r--r--src/View/HeadBuilder.php84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/View/HeadBuilder.php b/src/View/HeadBuilder.php
new file mode 100644
index 0000000..4d63457
--- /dev/null
+++ b/src/View/HeadBuilder.php
@@ -0,0 +1,84 @@
1<?php
2// src/View/HeadBuilder.php
3
4declare(strict_types=1);
5
6namespace App\View;
7
8use App\Entity\Asset;
9use App\Entity\Node;
10use App\Model\Model;
11
12class HeadBuilder extends AbstractBuilder
13{
14 public function __construct(Node $node)
15 {
16 $viewFile = self::VIEWS_PATH . $node->getName() . '.php';
17
18 if(file_exists($viewFile)){
19 // css et js
20 $page = Model::$page_path->getLast();
21
22 $css = '';
23 foreach($page->getCSS() as $name){
24 $css .= self::insertCSS($name);
25 }
26
27 $js = '';
28 foreach($page->getJS() as $name){
29 $js .= self::insertJS($name);
30 }
31
32 if(MainBuilder::$modif_mode){
33 $css .= self::insertCSS('modif_page');
34 $js .= self::insertJS('modif_page');
35 }
36
37 if(IS_ADMIN){
38 // édition éléments sur toutes les pages (header, footer et favicon)
39 $js .= self::insertJS('Input');
40
41 // sert partout?
42 $js .= self::insertJS('Fetcher');
43
44 // tinymce, nécéssite un script post-install et post-update dans composer.json
45 $css .= self::insertCSS('tinymce');
46 $js .= self::insertJS('tinymce/tinymce.min');
47 $js .= self::insertJS('tinymce');
48 }
49
50 $title = Model::$page_path->getLast()->getPageName();
51 $description = Model::$page_path->getLast()->getDescription();
52
53 // favicon
54 // ?-> est l'opérateur de navigation sécurisée => LOVE!
55 $favicon_name = ($favicon_object = $node->getNodeData()->getAssetByRole('head_favicon'))?->getFileName();
56 $favicon = $favicon_name ? Asset::USER_PATH . $favicon_name : '';
57 $favicon_type = $favicon_object?->getMimeType() ?? '';
58
59 ob_start();
60 require $viewFile;
61 $this->html .= ob_get_clean();
62 }
63 }
64
65 static function insertCSS(string $name): string
66 {
67 return '<link rel="stylesheet" href="' . self::versionedFileURL('css', $name) . '">' . "\n";
68 }
69 static function insertJS(string $name, bool $module = false): string
70 {
71 return '<script ' . ($module ? 'type="module"' : '') . ' src="' . self::versionedFileURL('js', $name) . '"></script>' . "\n";
72 }
73
74 static function versionedFileURL(string $type, string $filename): string
75 {
76 $path = $type . '/' . $filename . '.' . $type;
77
78 if(file_exists($path)){
79 $version = substr(md5_file($path), 0, 8);
80 return $path . '?v=' . $version;
81 }
82 return $path; // sécurité fichier absent
83 }
84}