vendor/assetic/docs/ja/define.md
author cavaliet
Tue, 15 Nov 2011 12:27:02 +0100
changeset 31 f457dd0e7a1e
parent 0 7f95f8617b0b
permissions -rwxr-xr-x
First step to add context search to a page. Works fine but needs to be improved with several list of selectors.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
アセットの「オンザフライ」な定義
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
----------------------------------------
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
Asseticの使用方法二つ目は、独立したPHPファイルを使用する代わりに、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
テンプレートで「オンザフライ」にアセット定義をする方法です。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
このアプローチでは、PHPテンプレートは下記のようになります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
    <script src="<?php echo assetic_javascripts('js/*', 'yui_js') ?>"></script>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
`assetic_javascripts()`の呼び出しは2つの目的を兼ねています。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
まず、「フォーミュラローダー」により走査され、アセットの構築、ダンプ、及び出力を行うための「フォーミュラ(処方箋)」が抽出されます。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
また、テンプレートのレンダー時にも実行され、アセットの出力パスが出力されます。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
Asseticには下記のようなヘルパー関数があります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * `assetic_image()`
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * `assetic_javascripts()`
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 * `assetic_stylesheets()`
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
アセットをオンザフライに定義するということは、より高度なテクニックであり、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
そのため、重い仕事をするサービスに依存することになります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
そのうちの重要なものがアセットファクトリです。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
### アセットファクトリ
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
アセットファクトリは、アセットオブジェクトを、配列とスカラ値のみから、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
どのように作成するのか把握しています。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
`assetic_*`ヘルパー関数で使用する記法と同様のものとなります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    use Assetic\Factory\AssetFactory;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    $factory = new AssetFactory('/path/to/web');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    $js = $factory->createAsset(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        'js/jquery.js',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        'js/jquery.plugin.js',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        'js/application.js',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
### フィルタマネージャー
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
ファクトリによって作成されたアセットに対しても、フィルタを適用することができます。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
そのためには、`FilterManager`を設定して、名前を定義しフィルタを構成します。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    use Assetic\FilterManager;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    use Assetic\Filter\GoogleClosure\ApiFilter as ClosureFilter;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    $fm = new FilterManager();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
    $fm->set('closure', new ClosureFilter());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    $factory->setFilterManager($fm);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
    $js = $factory->createAsset('js/*', 'closure');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
上記の例では、Google Closure Compilerフィルタをインスタンス化し、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
フィルタマネージャーを通じて`closure`という名前をつけています。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
このフィルタマネージャーをアセットファクトリに渡すことで、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
アセット作成時には、`closure`という名前でフィルタを使用できるようになります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
### デバッグモード
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
アセットファクトリは、デバッグモードというコンセプトも取り入れており、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
デバッグモードの設定により、ファクトリが作成するアセットから、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
特定のフィルタを除外することができます。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
たとえば、YUI Compressorは大変素晴らしいのですが、圧縮されたJavascriptを
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
デバッグするのは大変難しく、プロダクション環境でのみの使用が適切でしょう。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    use Asset\Factory\AssetFactory;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    $factory = new AssetFactory('/path/to/web', true); // デバッグモードON
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    $factory->setFilterManager($fm);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    $js = $factory->createAsset('js/*', '?closure');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
フィルタ名`closure`の前にクエスチョンマークを記述すると、ファクトリに対して、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
このフィルタはオプションであり、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
デバッグモードがOFFの時にのみ適用するように通知することができます。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
### アセットマネージャーとアセットリファレンス
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
アセットファクトリにはもう一つ特別な記法があり、別の場所で定義した
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
アセットを参照することができるようになります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
これを「アセットリファレンス」と呼び、アセットマネージャーを通じて、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
フィルタマネージャーと同様の、名前によるアセットの構成が可能です。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    use Assetic\AssetManager;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    use Assetic\Asset\FileAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    use Assetic\Factory\AssetFactory;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
    $am = new AssetManager();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    $am->set('jquery', new FileAsset('/path/to/jquery.js'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    $factory = new AssetFactory('/path/to/web');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    $factory->setAssetManager($am);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    $js = $factory->createAsset(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        '@jquery',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
        'js/application.js',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
### テンプレートからのアセット抽出
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
テンプレート内でアセット群を定義したら、「フォーミュラローダー」サービスを使用して、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
アセットの定義を抽出します。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    use Assetic\Factory\Loader\FunctionCallsFormulaLoader;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    use Assetic\Factory\Resource\FileResource;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    $loader = new FunctionCallsFormulaLoader($factory);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
    $formulae = $loader->load(new FileResource('/path/to/template.php'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
これらのフォーミュラ自体は、それ自体で使途はあまりなく、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
アセットファクトリが目的のアセットオブジェクトを作成するに足る情報しか持っていません。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
`LazyAssetManager`でラップすることで有益なものとなります。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
### レイジーなアセットマネージャー
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
このサービスは、アセットファクトリと、1つ以上のフォーミュラローダーから成っており、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
裏方のサービス間のグルとして動作しますが、表面上では、通常のアセットマネージャーと同じように使用することができます。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    use Assetic\Asset\FileAsset;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
    use Assetic\Factory\LazyAssetManager;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
    use Assetic\Factory\Loader\FunctionCallsFormulaLoader;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
    use Assetic\Factory\Resource\DirectoryResource;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    $am = new LazyAssetManager($factory);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
    $am->set('jquery', new FileAsset('/path/to/jquery.js'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
    $am->setLoader('php', new FunctionCallsFormulaLoader($factory));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
    $am->addResource(new DirectoryResource('/path/to/templates', '/\.php$/'), 'php');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
### アセットライター
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
作成したアセットマネージャーが、テンプレート内で定義した全てのアセットを把握したら、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
アセットライターを使用して、テンプレートが参照することになる実際のファイルを作成します。
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
    use Assetic\AssetWriter;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
    $writer = new AssetWriter('/path/to/web');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    $writer->writeManagerAssets($am);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
上記のスクリプトを実行すると、アセットマネージャー内のすべてのアセットがメモリに読み込まれ、
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
指定したフィルタが適用された後、公開領域に静的ファイルとしてダンプされ、準備完了となります。