TClientScriptLoader

TClientScriptLoader mempublikasikan koleksi file javascript sebagai assets. Contohnya, anggap kita mempunyai direktori bernama "mylib" dalam direktori protected/pages pada aplikasi kita.

assets/ protected/ pages/ mylib/ file1.js file2.js file3.js file4.js packages.php

Properti PackagePath bisa berupa direktori asset yang sudah ada atau path namespace ke direktori yang berisi file javascript. Sebagai contoh, untuk mempublikasikan file javascript dalam direktori mylib, kita dapat menetapkan PackagePath sebagai berikut. Tag pertama TClientScriptLoader tergantung pada tag template asset dan menganggap bahwa template halaman berisi turunan tag TClientScriptLoader ada dalam direktori protected/pages. Tag kedua TClientScriptLoader menggunakan notasi namespace ke untuk menetapkan path.

<com:TClientScriptLoader PackagePath=<%~ mylib %> /> <com:TClientScriptLoader PackagePath="Application.pages.mylib" />

Ketika file dalam PackagePath dipublikasikan sebagai asset, pengambil naskah file php "clientscripts.php" secara otomatis di-copiy ke direktori asset tersebut. Pengambil naskah, menggabungkan file javascript dan bertindak sebagai gzip jika memungkinkan.

Mengelompokan File Javascript

Naskah yang dibolehkan dan naskah ketergantungan bisa dikelompokan dengan menggunakan file "packages.php" dengan format berikut. "packages.php" ini adalah opsional, jika tidak ada nama file tanpa ekstensi ".js" yang dipakai. "packages.php" harus berada dalam direktori yang diberikan oleh PackagePath.

<?php $packages = array( 'package1' => array('file1.js', 'file2.js'), 'package2' => array('file3.js', 'file4.js')); $deps = array( 'package1' => array('package1'), 'package2' => array('package1', 'package2')); //package2 memerlukan package1 pertama. return array($packages,$deps); //harus mengembalikan $packages dan $deps dalam array ?>

Elemen pertama dari array yang dihasilkan oleh packages.php harus berisi sebuah array file javascripts relatif ke packages.php yang mengaitkan pengelompokan tertentu. Sebagai contoh, dalam packages.php di atas, pengelompokan 'package1' menggabungkan dua file javascript, yaitu 'file1.js' dan 'file2.js'.

Elemen kedua dari array yang dihasilkan oleh packages.php harus berisi array pengelompokan ketergantungan yang diurut dalam cara di mana grup harus digabungkan. Sebagai contoh, mengelompokan 'package1' hanya bergantung pada file pengelompokan'package1' (misalnya 'file1.js' dan 'file2.js'). Sementara package2' tergantung pada pepngelompokan 'package1' dam 'package2'. Yakni 'package2' akan menggabung dengan urutan 'file1.js', 'file2.js', 'file3.js', dan 'file4.js'.

Mengambil Paket Javascript

Untuk mengambil file javascript atau paket tertentu, setel properti PackageScripts dengan nilai 'package1' guna mengambil naskah 'package1'. Maksimum 25 paket dipisahkan dengan koma yang dibolehkan. Ketergantungan paket secara otomatis dipecahkan oleh file php pengambil naskah.

<com:TClientScriptLoader PackagePath=<%~ mylib %> PackageScripts="package2" /> <script type="text/javascript"> //kode javascript memanfaatkan kode javascript yg diambil ke dalam 'package2' di atas </script>

Setiap <com:TClientScriptLoader> membuat elemen HTML <script> untuk mengambil file javascript yang diperlukan.

Menghapus Komentar Javascript

Properti DebugMode bila false menghapus komentar dan spasi dari file javascript yang dipublikasikan. Jika properti DebugMode tidak disetel, mode debug ditentukan dari mode aplikasi.

Catatan: Jika DebugMode adalah false baik secara eksplisit ataupun ketika mode aplikasi adalah non-debug, maka header cache juga dikirimkan untuk memberitahu browser dan proxy untuk melakukan cache file. Lebih lanjut, pasca proses (komentar dihapus dan di-zip) disimpan dalam direktori asset untuk permintaan berikutnya. Yaitu mode non-debug, naskah di-cache dalam direktori asset sampai ia dihapus.

Memadatkan Javascript dengan GZip

Properti EnableGzip (standarnya true) membolehkan javascripts yang dipublikasikan untuk dilayani sebagai zipped jika browser dan server php mengijinkannya.