1.4. テンプレートファイルカタログ

Qiqは複数のディレクトリパスからテンプレートファイルを検索します。Template::new()paths の配列を渡すことができます...

$template = Template::new(
    paths: [
        '/path/to/custom/templates',
        '/path/to/default/templates',
    ],
);

または、Catalog に直接指示することもできます:

$template->getCatalog()->setPaths([
    '/path/to/custom/templates',
    '/path/to/default/templates',
]);

Catalog は最初のディレクトリパスから最後のディレクトリパスまでテンプレートファイルを検索します。

/*
まず最初に:  /path/to/custom/templates/foo.php を検索し、
次に: /path/to/default/templates/foo.php を検索します
*/
$output = $template('foo');

必要に応じて、Template のインスタンス化後にパスを変更して、Catalog にディレクトリパスを前置または後置することができます:

$template->getCatalog()->prependPath('/higher/precedence/templates');
$template->getCatalog()->appendPath('/lower/precedence/templates');

1.4. サブディレクトリ

任意の場所からテンプレートファイルをレンダリングするには、テンプレート名への絶対パスを使用します(先頭のスラッシュは不要です):

// "foo/bar/baz.php" テンプレートをレンダリングします
$output = $template('foo/bar/baz');

あるいは、テンプレートファイル内から、相対パスで他のテンプレートファイルを参照することもできます。./ は同じディレクトリにあるテンプレートファイルを、../ は現在のディレクトリの上のディレクトリにあるファイルを示します。

次のようなテンプレートファイル構造があるとします...

foo.php
foo/
    bar.php
    bar/
        baz.php
        dib.php

... foo/bar/baz.php テンプレートファイル内では:

// "foo/bar/dib.php" を参照します
echo $this->render('./dib');

// "foo/bar.php" を参照します
echo $this->render('../bar');

// "foo.php" を参照します
echo $this->render('../../foo');

1.4. ファイル名の拡張子

デフォルトでは、Catalog はテンプレートファイル名に .php を自動的に追加します。テンプレートファイルが異なる拡張子で終わる場合は、setExtension() メソッドを使用して変更します:

$catalog = $template->getCatalog();
$catalog->setExtension('.phtml');

または、Template 作成時に拡張子を設定することもできます:

$template = Template::new(
    extension: '.qiq.php'
);

1.4. コレクション

メールや管理ページなど、テンプレートのコレクションを識別することが有用な場合があります(他のテンプレートシステムではこれらを "グループ"、"フォルダ"、または "名前空間" と呼ぶことがあります)。 ディレクトリパスをコレクションに関連付けるには、パスの前にコレクション名とコロンを付けます:

$template = Template::new(
    paths: [
        'admin:/path/to/admin/templates',
        'email:/path/to/email/templates',
    ]
);

コレクションからテンプレートをレンダリングするには、テンプレート名の前にコレクション名を付けます。

$output = $template('email:notify/subscribed');

"main" または "default" のプレフィックスなしテンプレートパスのコレクションと同様に、コレクションパスを設定、追加、前置することができます。