テンプレートとアセット

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') を使用します。