템플릿과 에셋
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')로 특정 스크립트를 나중에 제거할 수 있습니다.