Skip navigation


Di antara banyak kelebihan Yii, salah satu yang sangat menyenangkan adalah Yii dapat memiliki struktur model/view/controller yang seolah-olah terpisah. Struktur ini disebut Module. Dengan adanya struktur ini, aplikasi Yii dapat dibagi-bagi ke dalam sub-sub aplikasi yang nantinya memudahkan untuk pengembangan atau perawatan.

Contoh penggunaan modul ini adalah untuk memisahkan bagian administrasi aplikasi menjadi sebuah struktur tersendiri. Dengan demikian, sebagai contoh, halaman login untuk admin dengan pengguna biasa dapat lebih sederhana dibandingkan yang saya lakukan di tulisan sebelum ini.

Setelah kita menggenerate sebuah modul ‘administration’ dengan menggunakan Gii, kita akan mempunyai sebuah file “AdministrationModule.php” di folder “protected/modules/administration”. File ini akan selalu dieksekusi ketika kita mengakses controller yang ada di modul ini.

Untuk memisahkan controller untuk login antara tampilan untuk pengguna biasa dengan untuk admin, kita cukup memodifikasi properti returnUrl setiap controller modul diakses. Caranya adalah dengan memodifikasi method init() pada AdministrationModule.php

    public function init() {
        $this->setImport(array(
            'administration.models.*',
            'administration.components.*',
            'administration.controllers.*',
        ));
        Yii::app()->errorHandler->errorAction = 'administration/error';
        Yii::app()->user->loginUrl = array('/administration/login');
    }

Kita juga dapat memodifikasi tampilan error dengan memodifikasi properti errorAction.

Selanjutnya adalah bagaimana kita dapat membuat CSS, Javascript, atau gambar khusus untuk layout yang digunakan modul. Caranya adalah dengan menggunakan CAssetManager. AssetManager ini bertugas untuk mengatur filefile khusus (assets) dan membuatnya bisa diakses melalui web.

Kita pertama-tama meletakkan seluruh file CSS, Javascript, dan Images masing-masing ke direktori “protected/modules/administration/assets/css” , “protected/modules/administration/assets/js”, dan “protected/modules/administration/assets/images”. Kemudian kita menambahkan method di modul untuk mempublish aset-aset ini secara otomatis dan method untuk mengakses aset tersebut.

class AdministrationModule extends CWebModule {
    private $_assetsUrl;
    //.....
    public function getAssetsUrl() {
        if ($this->_assetsUrl === null)
            $this->_assetsUrl = Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('administration.assets'));
        return $this->_assetsUrl;
    }

    public function registerCssFile($file, $media='all') {
        $url = $this->getAssetsUrl() . '/css/' . $file;
        Yii::app()->clientScript->registerCssFile($url, $media);
    }

    public function getImage($file) {
        return $this->getAssetsUrl() . '/images/' . $file;
    }

    public function registerScriptFile($file, $position=0) {
        $url = $this->getAssetsUrl() . '/js/' . $file;
        Yii::app()->clientScript->registerScriptFile($url, $position);
    }
}

Nama method-method di atas sudah cukup menjelaskan. Selanjutnya untuk memanggil aset yang sudah dipublish pada layout maupun view lain adalah sebagai berikut

<?php Yii::app()->getModule('administration')->registerCssFile('layout.css'); ?>

ini bisa diakses pada semua aplikasi
atau

<?php Yii::app()->controller->module->registerCssFile('layout.css'); ?>

untuk pengaksesan di view internal modul.

11 Comments

  1. Gan ane masih baru belajar nih di yii. ane mau nayak kalok memisahkan halaman Administration dan halaman client tampa mengunakan directory modules .caranya gimana gan.

    • tinggal dimasukin ke direktori /protected/controllers/administrator aja🙂
      nanti di layoutnya ya tinggal /protected/views/layout/administrator.php
      terus di controllernya diset
      public $layout = ‘application.views.layout.administrator’;
      🙂

  2. ada secerip yang udah jadi g gan yang bisa di pelajari.

    • gak terlalu susah kok buat dibikin sebenernya🙂

  3. dengan contoh yang agan bilang tuh…

  4. gini kang,,,saya mau buat halaman login sperti backpanel,,,di site controller kan dia public layoutnya nyatu ama about,index,contact us,,nah gimana caranya biar public layout itu beda,,karena saya pengen buat full satu halaman buat login saja

  5. thanks gan untuk tutorialnya

  6. nice info. it works😀

  7. gan..begini..ogut mau tampilin image user yg dari table users(database), jadi saat user itu selesai proses login trus tampil deh di layout main-nya itu gimana ya gan..please

  8. ini kenapa ya gan?
    Fatal error: Call to a member function registerCssFile() on a non-object in C:\xampp\htdocs\IklanOnAir\protected\views\contract\jadwal.php on line 9


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: