Asset クラス

Asset クラスは、アセット (js 、css 、img 、カスタムタイプ) を収集し、グループ化し、表示するために役立つメソッドをまとめたクラスです。

複数のアセットインスタンス

Asset クラスは複数インスタンスでの利用をサポートしています。 あなたが独自のアセット群を持つテーマを使っている場合や、 モジュール型のアプリケーションを開発していて、そのモジュールがそれぞれアセットを持っているような場合に、これは役に立つかもしれません。

このようなケースでは、ただ 1 つのインスタンスが検索パスを持つことにより、 同じ名前を持つアセットをアプリケーションが間違って読み込むことになる危険性が高くなるのは、ちょっと利口とはいえません。

静的なメソッドと同じメソッド名を、Asset のインスタンスに対しても使用することができます。 それぞれのメソッドの定義については 使用法 ページを見て下さい。

forge($config = array())

forge メソッドは、Asset クラスのインスタンスを手動で生成します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$name
null
インスタンスの名前。もしその名前のインスタンスが存在しなければ、新たにフォージ(生成)されます。 名前が渡されなかったときは、デフォルトインスタンスが返されます。
$config
array()
新しく Asset インスタンスを生成する際に、カスタム設定を渡すことができます。 設定を意味する配列は、asset 設定ファイルと同様の構造を持っています。 渡された設定内容は、ここで解説されているデフォルトの設定と asset 設定ファイルにマージされますので、 変更したい設定値だけを渡せばよいです。
返り値 object - 生成された Asset オブジェクト。
// 独自の検索パスを使って Asset オブジェクトを生成します
$asset = Asset::forge('custom', array('paths' => array('custom/assets/'));

// css ファイルをいくつか定義します
$asset->css(array('header.css', 'footer.css'), array(), 'layout', false);

instance($name = null)

instance メソッドは、名前のついた Asset クラスのインスタンスを返します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$name
null
インスタンスの名前を渡します。もしその名前のインスタンスがなかった場合は false が返されます。 名前が指定されなかったときはデフォルトのインスタンスが返されます
返り値 mixed - その名前の Asset インスタンス。存在しなければ false が返ります。
// 独自の検索パスを使った名前がついた Asset インスタンスを生成します
Asset::forge('custom', array('paths' => array('custom/assets/')));

// その Asset インスタンスを用いて css ファイルをいくつか定義します
Asset::instance('custom')->css(array('header.css', 'footer.css'), array(), 'layout', false);

Asset クラスの静的メソッドは、デフォルトインスタンスを使用します。 デフォルトインスタンスに対して、例えば検索パスの変更などを行った場合はこのことを忘れないで下さい!


カスタムアセットタイプの追加

Asset インスタンスには、カスタムタイプを追加でき、 CSS 、JS 、IMG タグ以外のレンダラを使うことができます。

add_type($type, $path = null, $renderer = null)

add_type メソッドは Asset クラスにランタイムで カスタムタイプを追加します。

静的 いいえ
パラメータ
パラメータ デフォルト 説明
$type
null
ビュー出力の一部としてレンダリングできるようにするタイプの名前。 例えば、'youtube' タイプを定義し、Asset に YouTube の動画を埋め込むための HTML をレンダリングさせることができます。
$path
null
タイプに関連した、アセットがロードされるパス。 'youtube' の例では、アセットはインターネットの URL からロードされるため、 必要ありません。
$renderer
null
タイプをレンダリングするクロージャ。 クロージャは 3 つのパラメータを受けとります: レンダリングするファイルの名前、属性の配列、インラインでの表示が必要かどうかのブール値。 これらすべてがそのタイプに関連するわけではないことに注意して下さい。 例えば、JavaScript はファイルからロードすることもインラインで script タグの中に レンダリングすることもできますが、画像は "img" タグを使って レンダリングすることはできますが、インラインで HTML に含めることはできません。
返り値 string - レンダリングされた HTML。
// デフォルトの Asset インスタンスに YouTube のレンダラを作成する
Asset::instance()->add_type(
    'youtube',
    null,
    function ($file, $attr, $inline) {
		// シンプルな例、iframe をレンダリング
		return '<iframe width="420" height="315" src="http://www.youtube.com/embed/'.$file.'?autoplay=1"></iframe>';
	}
);

// YouTube の動画をレンダリング
echo Asset::instance()->youtube('XGSy3_Czz8k');