テンプレートとアセット
TemplateLoader
TemplateLoader::show('head', ['title' => 'Product List']); // 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 と JavaScript のアセットを収集し、任意の位置でまとめて出力します。キャッシュを無効化するために、バージョンのクエリ文字列を付加することもできます。
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://、//で始まる URL は変更されません。 - preload ヒントは
printPreloads()で個別に出力されます。これを<head>に配置し、script タグはprintScripts()の位置(通常は</body>の直前)に残しておくことで、ドキュメント本文の解析中にスクリプトを取得できるようになります。 - 絶対 URL には preload ヒントを付加しません。
crossoriginの設定が一致しないと、ブラウザーがリソースを二重にダウンロードする可能性があるためです。 - 各
print*()メソッドは 1 種類のアセットを出力し、配置場所はテンプレート側で制御します。printPreloads()とprintStyles()は<head>に、printScripts()は通常</body>の直前に配置します。 - 登録済みのスクリプトを削除するには
unsetJs('analytics.js')を使用します。