Cara Publikasi Asset dengan Menggunakan CAssetManager
March 12th, 2012, Written by: | Categories: Programming, Tutorial, Yii Framework

Setelah paham apa kegunaan asset di dalam Yii, maka topik kali ini penulisan akan menjelaskan bagaimana caranya mempublikasikan Asset. Yang disebut Asset di Yii biasanya adalah file gambar (seperti png, jpg atau gif), file CSS atau file JavaScript. Biasanya kita perlu mempublikasikan Asset kalau kita sedang membuat extension di mana extension-nya membutuhkan gambar atau JavaScript tertentu, misalnya membuat widget Yii untuk gallery slideshow (efek slideshow biasanya membutuhkan JavaScript dan CSS).

Untuk memudahkan pemahaman bagaimana publikasi folder, maka penulis akan menggunakan contoh pembuatan sebuah extension berupa gallery slideshow. Penulis akan membuat sebuah extension bernama Gallery, jadi pertama-tama penulis membuat sebuah folder bernama “gallery” di dalam webroot/protected/extensions. Di dalam folder “gallery” inilah koding-koding PHP diletakkan. Kemudian untuk file-file CSS, JavaScript dan gambar-gambar yang ada, kita masukkan ke folder, misalnya, “myasset” (penamaan folder terserah) yang ada di folder “gallery”.

Gallery Extensions

Contoh struktur file extension Gallery. Kita buat sebuah folder "myasset" untuk menampung file CSS dan JS yang berhubungan dengan gallery-slideshow

Untuk mempublikasikan file maka kita menggunakan CAssetManager yang dapat diakses dengan sintaks Yii::app()->assetManager. Untuk lebih jelasnya silahkan lihat contoh cara menggunakannya:

class Gallery extends CWidget
{
	public function run()
	{
		...
		//kita publikasikan file yang terletak di webroot/protected/extensions/gallery/myasset ke folder webroot/asset.
		//Selain itu kita simpan url asset yang terpublikasi ke dalam $assetLink
		$assetPath = Yii::app()->assetManager->publish(Yii::getPathOfAlias('application.extensions.gallery.myasset'));
		...

		//render tampilan widget Gallery
		$this->render('index', array('assetLink'=>$assetPath));
	}
}

Pada koding di atas, kita memerintahkan Yii untuk meng-copy file-file yang ada di folder protected/extensions/gallery/myasset ke folder “asset” paling luar. Nantinya Yii akan mengecek di folder “asset” apakah sudah ada file tersebut atau belum (karena mungkin saja sudah pernah dipublikasikan sebelumnya, jadi Yii tidak akan copy lagi). Selain itu jika Anda perhatikan, hasil dari publish() ditampung ke variabel $assetPath. Tujuannya adalah menyimpan path menuju folder “asset”. Anda tentunya tahu, kalau folder-folder di dalam “asset” menggunakan nama-nama alfanumerik yang tidak bermakna. Jadi variabel $assetPath inilah yang berisi path menuju ke file Asset yang tepat.

Folder Assets Yii

Nama folder di dalam folder "asset" tidak bermakna, oleh karena itu kita butuh $assetPath untuk merujuk ke folder yang benar.

Setelah kita melakukan publikasi dan mendapatkan path-nya, maka kita bisa memakainya. Contoh pemakaian:

<?php
$cs = Yii::app()->clientScript;
$cs->registerCssFile($assetPath.'/style.css');
$cs->registerScriptFile($assetPath.'/image-gallery.js');

Koding di atas artinya kita ingin meng-include file style.css dan file image-gallery.js yang ada di folder “myasset”.

Perlu Diketahui: Yii Tidak Menimpa File Yang Kontennya Berubah

Seperti yang sudah disinggung tadi, sebelum meng-copy isi file ke folder webroot/asset, Yii akan mengecek terlebih dahulu apakah file-nya sudah ada atau belum. Pada contoh kita di atas, yang dipublikasikan adalah folder, yakni “myasset”, jadi Yii mengecek folder sudah ada atau belum. Yang harus kalian ketahui adalah Yii hanya mengecek apakah file ada atau tidak ada saja. Tidak mengecek file berubah atau tidak.

Jadi kalau misalnya Anda mengganti CSS di “myasset”, jangan heran mengapa tampilan widget-nya masih sama. Itu dikarenakan Yii tidak menimpa CSS ke folder “assets” sebab Yii tidak tahu kalau konten CSS-nya sudah berubah. Untuk membuat Yii meng-copy file CSS terbaru ke “assets”, maka Anda harus menghapus isi folder “assets” terlebih dahulu.

Tetapi ketika pada masa development (di mana harus utak-atik koding JavaScript atau CSS-nya), tentunya hal ini sangat melelahkan. Karena setiap kali ingin testing, kita harus hapus folder “assets”. Solusinya, dipakailah cara begini:

 Yii::app()->assetManager->publish(
                Yii::getPathOfAlias('application.extensions.gallery.myasset'),
                false, //ini nilai default
                -1, //ini nilai default
                true, //paksa Yii copy ulang, tidak peduli file ada ataupun tidak.
);

Dengan memberikan nilai true pada parameter terakhir, Yii akan tetap meng-copy file-file “myasset” ke folder “assets” tidak peduli sudah ada atau tidak. Dengan demikian kita tidak perlu capek-capek menghapus isi folder “assets” setiap kali testing, karena Yii pasti tetap akan meng-copy (atau menimpa) file baru. Tetapi jika sudah selesai development, harus ingat untuk mengubah kembali jadi false, karena membuat Yii setiap kali meng-copy file akan memberatkan server dan proses loading menjadi lama.

Cara lain yang populer adalah:

 Yii::app()->assetManager->publish(
                Yii::getPathOfAlias('application.extensions.gallery.myasset'),
                false, //ini nilai default
                -1, //ini nilai default
                YII_DEBUG, //pakai YII_DEBUG
);

YII_DEBUG dapat diatur di webroot/index.php. Biasanya ketika Web akan di-launching, maka programmer wajib mengubah nilai YII_DEBUG menjadi false. Pakai cara ini lebih gampang karena cukup ganti YII_DEBUG menjadi false, maka tidak perlu lagi mengedit koding publikasi aset satu per satu.

Bagaimana menurut pendapat Anda mengenai publikasi file aset di Yii? Sederhana bukan? Silahkan memberikan feedback mengenai tutorial ini kalau ada yang masih belum jelas.

More about: ,

Leave a Reply