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