템플릿과 에셋

TemplateLoader

TemplateLoader::show('head', ['title' => '상품 목록']);   // public/_Template/head.php
TemplateLoader::content();                                // URL에 대응하는 페이지 실행
TemplateLoader::entryDir('_layout');                      // 현재 URL 디렉터리의 _layout.php
TemplateLoader::entryRoot('_footer');                     // public/_footer.php

전달한 배열은 extract()되어 템플릿 안에서 지역 변수로 쓰입니다.

<!-- public/_Template/head.php -->
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title><?= htmlspecialchars($title ?? _Global::$SITE_TITLE) ?></title>
    <?php \_Flexagon\Libs\AssetLoader::printPreloads('    ') ?>
    <?php \_Flexagon\Libs\AssetLoader::printStyles('    ') ?>
</head>
<body>

AssetLoader

CSS/JS를 수집했다가 원하는 위치에서 한 번에 출력합니다. 버전 쿼리스트링을 붙여 캐시를 무효화할 수 있습니다.

use _Flexagon\Libs\AssetLoader;

AssetLoader::setVersion('3.4.13');          // 모든 에셋 URL에 ?_=3.4.13
AssetLoader::setAssetRootPath('/assets/');

AssetLoader::setCss('main.css');                        // /assets/css/main.css (preload 포함)
AssetLoader::setJs('app.js', isModule: true);           // /assets/js/app.js
AssetLoader::setJs('https://cdn.example.com/lib.js');   // 외부 URL은 그대로

echo AssetLoader::getImageHtml('logo.png', 120, 40, 'Logo');
echo AssetLoader::getAssetUrl('fonts/pretendard.woff2');
  • 상대 경로는 assetRootPath + dirPath가 앞에 붙고, http://·https://·//로 시작하면 그대로 둡니다.
  • preload 힌트는 printPreloads()로 따로 출력합니다. <head>에 두면 스크립트 태그는 printScripts() 위치(보통 </body> 직전)에 남으므로, 본문을 파싱하는 동안 스크립트를 미리 받아둘 수 있습니다.
  • 절대 URL에는 preload를 붙이지 않습니다. crossorigin이 맞지 않으면 브라우저가 두 번 받아가기 때문입니다.
  • print*()는 태그 종류별로 하나씩이고, 배치는 템플릿이 정합니다 — printPreloads()·printStyles()는 <head>, printScripts()는 </body> 직전.
  • unsetJs('analytics.js')로 특정 스크립트를 나중에 제거할 수 있습니다.