WHAT'S NEW?



Ketika Anda melihat sebuah halaman web dalam web browser, anda akan diperlihatkan dengan informasi-informasi yang tersedia dalam kata, suara, gambar maupun video. Informasi tersebut biasanya memiliki karakteristik gaya (untuk memperindah tampilan), seperti perbedaan ukuran huruf dan warna. Dalam beberapa kasus, di dalam sebuah halaman web juga menampilkan gambar-gambar atau mungkin video. Kadang juga terdapat formulir dimana anda bisa memasukkan data (atau mencari) informasi, atau merubah penampilan web (warna, tampilan dll.) sesuai dengan keinginan Anda. Kadang dalam sebuah halaman juga terdapat konten bergerak dan konten yang berubah sedangkan yang lainnya tidak.

Berbagai macam teknologi website (seperti CSS, JavaScript, Flash, AJAX, JSON) dapat digunakan untuk mendefinisikan elemen dari sebuah halama web. Akan tetapi, pada level paling rendah, sebuah halaman web didefinisikan dengan menggunakan HTML (HyperText Markup Language). Tanpa HTML maka tidak akan ada halaman web.

Artikel ini berisi pengenalan terhadap HTML. Jika Anda penasaran akan apa yang terjadi dibalik layar browser Anda, maka artikel ini adalah tempat yang tepat untuk mulai mempelajarinya.

Sejarah singkat HTML



Di akhir tahun 1980an, Tim Berners-Lee bekerja sebagai seorang physicist di CERN (Sebuah Organisasi untuk research nuklir di eropa). Beliau merancang sebuah jalan bagi para scientis untuk berbagi dokumen melalui internet. Sebelum invensi ini, komunikasi melalui internet hanya terbatas pada dokumen teks biasa menggunakan beberapa teknologi seperti email, FTP (File Transfer Protocol), dan Panel diskusi berbasis Usenet. Invensi dari HTML memanfaatkan model dan konten yang disimpan dalam server pusat yang dapat ditransfer dan ditampilkan pada workstation lokal melalui browser. Invensi ini menyederhanakan akses terhadap konten dan memungkinkan untuk menampilkan konten yang "kaya" (seperti  pemformatan teks yang mutakhir dan menampilkan gambar).

Apa itu HTML?

HTML (Hypertext Markup Language) adalah bahasa untuk memarkup (memformat) yang digunakan pada dokumen web sebagai bahasa untuk pertukaran dokumen web. HTML memberitahu Web Browser bagaimana cara menampilkan konten. HTML memisahkan "konten" (kata-kata, gambar, audio, video dan lainnya) dari "Penampilan" (Definisi dari tipe konten dan instruksi bagaimana tipe konten tersebut harus ditampilkan). HTML menggunakan beberapa elemen yang telah didefinisikan untuk mengidentifikasi tipe-tipe konten. Element-elemen memiliki satu atau lebih "tag" yang memiliki atau mengekspresikan konten. Tag diawali dan diakhiri dengan  kurung siku, dan tag "penutup" (tag yang menandakan akhir dari konten) diawali dengan garis miring.

Sebagai contoh, elemen paragraf terdiri dari tag pembuka "<p>" dan tag penutup "</p>". Contoh berikit menampilkan sebuah paragraf yang terdapat dalam elemen paragraf HTML:

<p>My dog ate all the guacamole.</p>

Ketika konten tersebut ditampilkan dalam web browser, maka akan terlihat seperti berikut:

My dog ate all the guacamole.

Browser menggunakan tag sebagai indikator bagaimana konten yang terdapat di dalam tag ditampilkan. Elemen-element yang memiliki konten biasanya dapat memiliki elemen lainnya. Sebagai contoh, elemen underline ("<u>") dapat disertakan di dalam elemen paragraf:

<p>My dog ate <u>all</u> the guacamole.</p>

Ketika ditampilkan, akan terlihat seperti: 

My dog ate all the guacamole.

Seringkali sebuah garis miring dituliskan sebelum kurung tutup siku untuk mengindikasikan akhir dari tag. Hal ini bersifat opsional dalam HTML tapi harus dilakukan dalam XHTML (Yakni sebuah skema XML yang mengimplementasikan elemen-elemen HTML).

Sisa dari artikel ini menjelaskan lebih detail akan konsep yang telah diperkenalkan dalam bagian ini. Namun jika Anda ingin melihat aksi HTML, kunjungi Mozilla Thimble, Editor on-line interaktif yang mengajarkan anda bagaimana cara menulis markup HTML. Kunjungi juga  HTML Elements untuk daftar elemen-elemen yang tersedia beserta deskripsi penggunannya.

Elemen — dasar building blocks

HTML terdiri dari sekumpulan elemen-elemen. Elemen-elemen mendefinisikan arti semantik dari content yang bersangkutan. Elemen-elemen mengikutsertakan saja yang terdapat di dalam tag elemen yang berkesesuaian, termasuk tag mereka sendiri. Sebagai contoh, elemen "<p>" mengindikasikan sebuah paragraf; elemen "<img>" mengindikasikan sebuah gambar (image). Buka halaman HTML Elements untuk daftar selengkapnya.

Sebagian elemen memiliki makna yang sangat tepat, seperti dalam "ini adalah image", "ini adalah judul" atau "ini adalah daftar tak berurut." yang lainnya tidaklah spesifik, "ini adalah bagian dari halaman" atau "ini adalah sebagian dari text." Pun elemen-elemen lainnya digunakan untuk alasan teknis, seperti "bagian ini mengidentifikasi informasi untuk halaman yang tidak boleh ditampilkan." Bagaimanapun juga, dalam satu cara atau seluruh elemen-elemenn HTML lainnya memiliki nilai semantik.

Sebagian besar elemen dapat menampung elemen lainnya, membentuk sebuah struktur hierarki. Sebuah halaman web sederhana tapi sempurna akan terlihat seperti berikut:

 <html>
  <body>

    <p>My dog ate all the guacamole.</p>

  </body>
</html> 

Seperti yang anda lihat, elemen <html> menampung dokumen di dalamnya, dan elemen <body> menampung konten dari halaman web. Struktur ini sering diibaratkan sebagai pohon yang memiliki cabang-cabang (dalam kasus ini elemen <body> dan <p>) yang tumbuh dari batang (<html>). Struktur Hierarki ini disebut dengan DOM: Document Object Model.

Tag

Dokumen HTML ditulis dalam teks biasa, bisa juga ditulis menggunakan teks editor apapun yang memungkinkan isinya disimpan dalam teks biasa (Meski sebagian besar penulis HTML menganjurkan untuk menggunakan editor spesial yang memiliki syntax highligting dan menampilkan DOM). Nama tag bisa ditulis dengan huruf kecil atau huruf kapital. Akan tetapi, W3C (Konsorsium global yang mengurus standarisasi HTML) menganjurkan untuk menggunakan huruf kecil (dan XHTML mengharuskan menggunakan huruf kecil).

HTML menempelkan makna spesial terhadap apa saja yang diawali dengan tanda lebih kecil dari ("<") dan diakhiri dengan tanda lebih besar dari (">"). Markup tersebut disebut dengan tag. Pastikan untuk menutup tag, seperti halnya sebagian tag ditutup secara bawaan, dan yang lainnya mungkin menghasilkan error yang tidak diinginkan jika anda lupa menutup tag.

Berikut ini adalah contoh sederhananya:

<p>This is text within a paragraph.</p>
 
Dalam contoh di atas terdapat tag pembuka dan tag penutup. Tag penutup sama hanya dengan tag pembuka tapi memiliki tanda garis miring (forward slash /) sebelumnama tag atau sesudah tanda lebih kecil dari. Kebanyakan elemen-elemen HTML dituliskan menggunakan tag pembuka dan penutup. Tag pembuka dan penutup harus disarangkan secara benar, yaknik tag penutup harus dituliskan sebagai kebalikan dari tag pembuka. Hal ini merupakan suatu aturan yang harus dipatuhi untuk penulisan kode yang valid
Berikut ini adalah contoh kode yang valid:

<em>I <strong>really</strong> mean that</em>.
 
Dan berikut ini adalah contoh kode yang tidak valid:

Invalid: <em>I <strong>really</em> mean that</strong>.
 
Perhatikan bahwa dalam contoh yang valid, tag penutup yang bersarang dalam tag em ditempatkan sebelum tag yang menjadi tempat tag tersebut bersarang.


Sampai adopsi aturan parsing HTML5, browser tidak menerjemahkan kode yang tidak valid dengan cara yang sama dan menghasilkan hasil yang berbeda-beda ketika semuanya menangani kode tidak valid. Browser-browser telah "meminta maaf" kepada Penulis Web tapi sayangnya tidak semuanya dengan cara yang sama, yang menghasilkan hasil yang tidak dapat diprediksi jika terdapat kode HTML yang tidak valid. Sekarang, seiring dengan evolusi browser, seperti Internet Explorer 10, Firefox 4, Opera 11.60, Chrome 18 atau Safari 5, mereka mengimplementasikan aturan parsing kode invalid terbaru. Kode yang tidak valid dihasilkan dalam hierarki DOM dalam seluruh browser modern.

Sebagian elemen tidak memiliki konten atau elemen lainnya. Elemen-elemen tersebut adalah elemen kosong dan tidak membutuhkan tag penutup. Berikut contohnya:

<img src="smileyface.jpg">

Kebanyakan orang menuliskan markup elemen kosong ini dengan menambahkan garis miring (forward slash)(yang mana diperintahkan dalam XHTML).

<img src="smileyface.jpg" />
 
Dalam HTML, tanda slash ini tidak memiliki fungsi teknis dan penggunaan tanda ini murni pemilihan gaya penulisan kode.

Atribut

Tag pembukan dapat memiliki informasi tambahan, seperti halnya dalam contoh sebelumnya. Informasi tersebut disebut dengan atribut. Atribut biasanya terdiri dari 2 bagian:
  • Nama Atribut.
  • Nilai Atribut.
Sebagian kecil atribut hanya bisa menampung satu nilai. Atribut-atribut tersebut adalah atribut Boolean dan dapat disingkat dengan hanya menuliskan nama atribut atau membiarkan nilai atribut kosong. Ketiga contoh berikut memiliki arti yang sama:

<input required="required">

<input required="">

<input required>

Nilai atribut yang terdiri dari satu kata atau nomor dapat dituliskan langsung, tetapi jika terdari dari dua atau lebih maka harus dituliskan dalam tanda kutip. Baik tanda kutip satu (') atau dua (") diperbolehkan. Kebanyakan pengembang menganjurkan untuk selalu menggunakan tanda kutip agar kode yang ditulis tidak ambigu bagi mata dan untuk menghindari kesalahan-kesalahan. Berikut ini adalah contoh kesalahan:

<p class=foo bar> (Beware, this probably does not mean what you think it means.)

Dalam contoh ini, nilai atribut seharusnya ditulis "foo bar" namun karena dituliskan tanpa tanda kutip maka kode tersebut diterjemahkan seperti berikut :

<p class="foo" bar="">

Named character references

Named character references (Sering disebut juga entities) digunakan untuk mencetak karakter yang memiliki makna spesial dalam HTML. Sebagai contoh, HTML menerjemahkan tanda lebih kecil dari dan lebih besar dari sebagai pemisah tag. Ketika Anda ingin menampilkan simbol lebih besar dari dalam teks, Anda bisa menggunakan named character reference. Ada empat named character references yang harus anda ketahui:
  • &gt; menandakan lebih besar dari (>)
  • &lt; menandakan lebih kecil dari (<)
  • &amp; menandakan ampersand (&)
  • &quot; menandakan tanda kutip dua (")
Ada banyak many more entities, tapi keempat entiti tersebut adalah yang paling penting karena semuanya menandakan karakter yang memiliki arti spesial bagi HTML.

Doctype dan Komentar

Sebagai tambahan dari tag, konten teks dan entitas-entitas, sebuah dokumen HTML harus memiliki deklarasi doctype yang terdapat dibaris pertama. Deklarasi doctype bukanlah tag HTML; doctype ini adalah instruksi untuk web browser tentang versi keberapa dokumen HTML ditulis.
Dalam HTML 4.01, doctype mengaju kepada DTD (Document Type Definition) sebagaimana HTML ini berbasis SGML. Ada tiga deklarasi  doctype dalam HTML 4.01.

HTML 4.01 Strict
DTD ini berisi seluruh elemen dan atribut HTML, tetapi TIDAK MENYERTAKAN presentasional atau element-element usang (seperti font). Framesets tidak diizinkan.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

HTML 4.01 Transitional
DTD ini menampung seluruh elemen dan atribut HTML, TERMASUK element yang bersifat presentasi dan elemn yang usang. Framesets tidak diizinkan.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

HTML 4.01 Frameset
DTD ini sama halnya dengan HTML 4.01 Transitional, namun mengizinkan penggunakan Framesets.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

Dalam HTML 5, hanya terdapat satu deklarasi dan deklarasi ini ditulis seperti berikut:

<!DOCTYPE html>

Doctype memiliki sejarang yang panjang dan rumit, tapi untuk sekarang apa yang harus anda ketahui adalah doctype memberitahu browser untuk menerjemahkan kode HTML dan CSS sesuai dengan standar W3C dan tidak berpura-pura untuk berlaku sebagai Internet Explorer yang berasal dari tahun 90an. (Lihat quirks mode.)
HTML memiliki mekanisme untuk penyertaan komentar yang tidak ditampilkan ketika halaman diproses dalam browser. Komentar ini berguna untuk menjelaskan beberapa bagian dalam markup, atau meninggalkan catatan untuk orang lain yang mungkin juga bekerja dalam halaman tersebut atau meninggalkan pengingat untuk Anda sendiri. Komentar HTML dibuat dengan menyertakan simbol seperti berikut:

<!-- This is comment text -->

Dokumen singkat tapi Sempurna

Yang dituliskan dibawah ini adalah contoh dokumen HTML sederhana. Anda dapat meng-copy codenya ke dalam teks editor, simpan dengan nama file myfirstdoc.html dan bukalah dengan browser. Pastikan Anda menyimpannya dengan character encoding UTF-8. Karena dokumen ini tidak menggunakan style maka dokumen ini akan terlihat sangat polos, tapi ini hanyalah tahap awal.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <title>A tiny document</title>
</head>
<body>
  <h1>Main heading in my document</h1>
  <!-- Note that it is "h" + "1", not "h" + the letter "one" -->
  <p>Loook Ma, I am coding <abbr title="Hyper Text Markup Language">HTML</abbr>.</p>
</body>
</html> 
sumber :https://developer.mozilla.org/id/docs/Web/Guide/HTML/Pengenalan

Sebuah controller adalah kelas instan dari CController atau kelas turunan CController. Controller dibuat oleh aplikasi saat user melakukan permintaan. Ketika berjalan, controller melakukan aksi (action) yang diminta, biasanya memerlukan model dan membuat view yang sesuai. Sebuah aksi, dalam bentuk paling sederhana sebenarnya hanyalah metode kelas yang namanya dimulai dengan kata ACTION. Adapun hasil dari generator CRUD dari TblPegawai seperti pada penjelasan berikut:

1. Class ActiveRecord

class TblPegawaiController extends Controller

{

    public $layout='//layouts/column2';

Class TblPegawaiController extends Controller menciptakan kelas TblPegawaiController dengan mengacu kelas perluasan kelas controller pada CController yang telah disediakan Yii. public $layout =’//layout/column2′; variable $ layout menggunakan jenis layout tampilan dua kolom pada /view/layout/column2.

2. Function filters()

public function filters()

    {
        return array(
            'accessControl', // perform access control for CRUD operations
            'postOnly + delete', // we only allow deletion via POST request
        );
    }
Fungsi yang menerapan pembatasan akses dari operasional CRUD dan hanya mengizinkan perintah hapus lewat permintaan POST. Filter kontrol akses merupakan skema awal otorisasi yang memeriksa apakah pengguna saat ini dapat melakukan aksi controller yang diminta. Otorisasi didasarkan pada nama pengguna, alamat IP klien dan jenis permintaan. Ini disediakan sebagai filter bernama “accessControl”. Untuk mengontrol akses terhadap aksi dalam controller, kita menginstalasi filter kontrol akses dengan mengoverride CController::filters (lihat Filter untuk lebih jelasnya mengenai instalasi filter).

3. Function accessRules()

public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('index','view'),
                'users'=>array('*'),
            ),
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions'=>array('create','update'),
                'users'=>array('@'),
            ),
            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions'=>array('admin','delete'),
                'users'=>array('admin'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }
Yii memiliki dua cara untuk mengatur autorisasi. Yang pertama adalah dengan menggunakan Access Control Filter dan yang satu lagi dengan menggunakan Role-Based Access Control. Fungsi ini mengatur mengizinkan atau melarang user (autorisasi) menjalankan fungsi Access Control Filter atau aksi (action) yang ada pada controller tersebut. Adapun secara default Yii menyediakan akses ke actionIndex(), actionViews, actionCreate, actionDelete(), actionUpdate(), actionAdmin(). Sistem ini berbasis “allow” alias mengizinkan karena menulis siapa yang boleh mengakses.
  • action adalah nama action pada controller bersangkutan.
  • user adalah user siapa saja yang boleh akses, kita boleh langsung tulis username user (username yang dipakai ketika login). Selain nama juga bisa berupa simbol yang terdiri dari: * : semua jenis user, baik yang tidak login(guest) maupun yang sudah login(authenticated user). ? : hanya user yang tidak login @ : hanya user yang sudah login
  • expression, memungkinkan kita memasukkan coding PHP.

4. Function actionIndex()

    public function actionIndex()
    {
        $dataProvider=new CActiveDataProvider('TblPegawai');
        $this->render('index',array(
            'dataProvider'=>$dataProvider,
        ));
    }
Fungsi ini aksi yang menjalankan perintah me-render ke view file index.php dengan menyertakan parameter CActiveDataProvider. CActiveDataProvider menyediakan data dalam objek ActiveRecord dari kelas/model (dalam contoh TblPegawai.php) dan menggunakan metode findAll untuk mengambil data dari database.

5. Function actionIndex()

    public function actionView($id)
    {
        $this->render('view',array(
            'model'=>$this->loadModel($id),
        ));
    }
Aksi ini menjalankan yang perintah actionView dengan nilai parameter variable $id dalam fungsi ini me-render ke file view.php dengan mengirim parameter lewat perintah $this->render(‘view’,’model’=>loadModel($id)). Hasil tampilan adalah salah satu rekaman yang ditunjuk lewat variable $id, lewat file view.php.
       Fungsi actionView() menjalankan melalui fungsi render dengan memanggil file view.php, dengan parameter model berisi atribut yang di filter lewat fungsi loadModel($id). Kemudian fungsi loadModel($id) mengarah ke rekaman yang akan ditampilkan lewat view.php.

6. Function actionCreate()

    public function actionCreate()
    {
        $model=new TblPegawai;
        if(isset($_POST['TblPegawai']))
        {
            $model->attributes=$_POST['TblPegawai'];
            if($model->save())
                $this->redirect(array('view','id'=>$model->nip));
        }
        $this->render('create',array(
            'model'=>$model,
        ));
    }
  • $model = new TblPegawai : membuat instan kelas dari kelas TblPegawai
  • $this->performAjaxValidation($model) : memeriksa isian lewat fungsi performAjaxValidation()
  • if(isset($_POST[‘TblPegawai’])) : akan bernilai true, jika variabe kelas terbentuk semua isian benar. Jika hasilnya benar maka akan melanjutkan proses penyimpanan dengan perntah $model->save
  • $model->attributes=$_POST[‘TblPegawai’] : menyalin atribut dan isinnya kelas TblPegawai ke kelas $model.
  • if($model->save()) : proses menyimpan berhasil, akan dilanjutkan ke pernyataan selanjutnya
  • $this->redirect(array(‘view’,’id’=>$model->nip)); menjalankan view.php mengembalikan nilai dan menunjuk nip
  • $this->render(‘create’,array(‘model’=>$model,)), : memberikan ke file create.php dengan parameter model=>$model

7. Function actionAdmin()

    public function actionAdmin()
    {
        $model=new TblPegawai('search');
        $model->unsetAttributes();  // clear any default values
        if(isset($_GET['TblPegawai']))
            $model->attributes=$_GET['TblPegawai'];
        $this->render('admin',array(
            'model'=>$model,
        ));
    }
  • $model = new TblPegawai(‘search’); : menciptakan kelas instan $model turunandari kelas TblPegawai, ‘search’ adalah menyertakan nilai awal nilai search
  • $model->unsetAttributes();  : menjalankan fungsi mengosongkan isi atribut
  • if(isset($_GET[‘TblPegawai’])) : digunakan agar pembacaan atribut dan nilai dalam model TblPegawai sudah ada
  • $model->attributes=$_GET[‘TblPegawai’] : mengambil atribut dan nilai model TblPegawai ke variable $model

8. Function actionUpdate()

   public function actionUpdate($id)
    {
        $model=$this->loadModel($id);
        if(isset($_POST['TblPegawai']))
        {
            $model->attributes=$_POST['TblPegawai'];
            if($model->save())
                $this->redirect(array('view','id'=>$model->nip));
        }
        $this->render('update',array(
            'model'=>$model,
        ));
    }
Suatu aksi yang menjalankan proses memperbarui rekaman. Pertama biasanya scara default data ditampilkan dengan grid dan ditunjuk dengan icon lalu url akan mengarah ke Http://localhost/myweb/index.php?r=tblPegawai/update&id=10001. Secara proses sama dengan function actionCreate() bedanya sebelum disimpan, memanggil rekaman yang akan diubah dengan parameter $id , lewat fungsi loadModel($id). Kemudian fungsi loadModel ($id) akan menunjuk satu rekaman yang akan dirubah.
  • $this->performAjaxValidation($model); : melakukan validasi yang diambil dari isian formulir secara interaktif, dengan parameter $model;
  • if(isset($_POST[‘TblPegawai’]))  : melakukan pengujian variabel, akan bernilai true jika variable kelas terbentuk semua isian benar
  • $model->attributes=$_POST[‘TblPegawai’]; : menyalin atribut kelas TblPegawai ke variable $model dengan menggunakan properti atributes

9. Function actionAdmin()

    public function actionDelete($id)
    {
        $this->loadModel($id)->delete();
        if(!isset($_GET['ajax']))
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
    }
  • $this->loadModel($id)->delete(); : menjalankan method $this->loadModel($id) dengan parameter $id bernilai nomor pegawai yang dicari, kemudian fungsi loadModel($id) akan mengarah ke rekaman yang akan dihapus, dilanjutkan ke ->delete() untuk metode dalam menghapus record
  • $this->redirect(isset($_POST[‘returnUrl’])? $_POST [‘returnUrl’] : array(‘admin’)); : mengembalikan dan menjalankan ke url: http://localhost/myweb/index.php?r=tblPegawai/admin

10. Function actionUpdate()

    public function loadModel($id)
    {
        $model=TblPegawai::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }
Fungsi loadModel dignakan untuk memindakan salah satu rekaman berdasarkan pencarian dengan menggunakan parameter $id, setelah nilai $id ditemukan dalam tabel (dengan primary key), nilai atribut kelas pegawai akan disalin ke variabel $model. Fungsi ini digunakan untuk operasi pengubahan yang ada di actionUpdate($id), dan penghapusan daam actionDelete($id).
  • $model=TblPegawai::model()->findByPk($id); : menyalin satu rekaman ke variabel $model dengan menjalankan metode findByPk($id), untuk mencari rekaman berdasarkan kunci primer/utama dalam tabel.
  • throw new CHttpException(404, ‘The requested page does no exist.’); return $model; : Apabila data dari $model tidak ditemukan maka akan dimunculkan pesan kesalahan 404

11. Function performAjaxValidation($model)

    protected function performAjaxValidation($model)
    {
        if(isset($_POST['ajax']) && $_POST['ajax']==='tbl-pegawai-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
Fungsi ini secara interaktif untuk memvalidasi dari isian sebelum melakukan penyimpanan.
Sumber :
Badiyanto S.Kom, Buku Pintar framework Yii, 2013, Mediakom, Yogyakarta

Pada saat membuat MODEL lewat generator Gii maka akan tercipta kelas/model TblPegawai dan fungsi/metode yang terdapat di dalamnya. Adapun struktur yang tertulis kode dalam file TblPegawai.php terdiri dari :

1. Class ActiveRecord

//kelas yang dibentuk Gii

class TblPegawai extends CActiveRecord


       Untuk mengakses database, pertama perlu mendefinisikan kelas AR (Acive Record) dengan menurut CActivRecord. Sintaks diatas adalah deklarasi kelas dengan menurunkan kelas ekstensi CActiveRecord (kelas dari library Yii) dengan public $nilai sebagai pernyataan jika ingin menambahkan variable sendiri dalam kelas TblPegawai.

2. Function Model()

    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

       Meskipun Yii DAO secara virtual dapat menangani setiap tugas terkait database, kemungkinan kita akan menghabiskan 90% waktu kita dalam penulisan beberapa pernyataan SQL yang melakukan operasi umum CRUD (create, read, update dan delete) tetap ada. Pemeliharaan kode kita saat dicampur dengan pernyataan SQL juga akan menambah kesulitan. Untuk memecahkan masalah ini, kita dapat menggunakan Active Record. Active Record (AR) adalah teknik populer Pemetaan Relasional Objek / Object-Relational Mapping (ORM). Setiap kelas AR mewakili tabel database (atau view) yang atributnya diwakili oleh properti kelas AR, dan turunan AR mewakili baris pada tabel tersebut. Operasi umum CRUD diimplementasikan sebagai metode AR. Hasilnya, kita dapat mengakses data dengan cara lebih terorientasi-objek.

3. Function TableName()

public function tableName()
{
      return 'tbl_pegawai';
}
Setiap kelas Active Record mewakili satu tabel dalam database, dan instan AR mewakili sebuah record (baris) dalam tabel tersebut. Contoh di atas memperlihatkan kode minimal yang diperlukan untuk kelas AR yang mewakili tabel tbl_pegawai.

4. Function Rules()

   public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('nip, nama, alamat, jk, tgl_lhr, gol_id', 'required'),
            array('gol_id', 'numerical', 'integerOnly'=>true),
            array('nip', 'length', 'max'=>5),
            array('nama, alamat', 'length', 'max'=>40),
            array('jk', 'length', 'max'=>1),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('nip, nama, alamat, jk, tgl_lhr, gol_id', 'safe', 'on'=>'search'),
        );
    }

Fungsi rules untuk mengatur validasi masukan. Sebuah atribut dianggap aman jika ditulis dalam aturanvalidasi. Misalnya pernyataan: array array(‘nip, nama, alamat, jk, tgl_lhr, gol_id’, ‘required’), isian nip, nama, alamat, jk, tgl_lhr dan gol_id isian tidak boleh kosong. Pada array(‘gol_id’, ‘numerical’, ‘integerOnly’=>true), Isian harus berupa angka/integer. Kemudian array(‘nip’, ‘length’, ‘max’=>5),membatasi isian nip maksimal 5 karakter.

5. Function Relation()

    public function relation()
    {
         return array(
         'gol'=>array(self::BELONGS_TO, 'TblGolongan','gol_id'),
             );
     }

Fungsi ini digunakan untuk meletakkan relasi tabel yang diimplementasikan lewat kelas (model). Pada bagian ini membahas kelas TblPegawai relasi dengan kelas TblGolongan, kunci relasi foreign key ‘gol_id; di tabel tbl_pegawai, ke primary key ‘id’ di tbl_golongan.

6. Function AttributeLabel()

    public function attributeLabels()
    {
        return array(
            'nip' => 'Nip',
            'nama' => 'Nama',
            'alamat' => 'Alamat',
            'jk' => 'Jk',
            'tgl_lhr' => 'Tgl Lhr',
            'gol_id' => 'Gol',
        );
    }
Ketika mendesain sebuah FORMULIS isian, seringkali perlu menampilkan label untuk setiap field masukkan. Label memberi tahu user jenis informasi apa yang harus dimasukkan ke dalam field isian. Meskipun dapat memberi label secara langsung dalam sebuah tampilan, akan lebih fleksibel dan nyaman jika anda menetapkannya dalam model terkait. Secara default kelas CModel akan mengembalikan nama atribut yang terdapat tabel sebagai label. Sehingga mempercepat dalam pembuatan formulir masukan pada halaman web. Biasanya fungsi ini sering dipakai dalam pembuatan actionCreate pada Form di Controllers

7. Function Search()

    public function search()
    {
        $criteria=new CDbCriteria;
        $criteria->compare('nip',$this->nip,true);
        $criteria->compare('nama',$this->nama,true);
        $criteria->compare('alamat',$this->alamat,true);
        $criteria->compare('jk',$this->jk,true);
        $criteria->compare('tgl_lhr',$this->tgl_lhr,true);
        $criteria->compare('gol_id',$this->gol_id);
        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));
    }

Pada bagian yang digunakan untuk pencarian berdasarkan field yang terdapat pada tabel. Fungsi ini lewat kelas CDbCriteria dan menggunakan metode compare untuk perbandingan sebagai metode pencarian seperti halnya perintah LIKE dalam SQL. Biasanya fungsi ini dipakai dalam actionAdmin pada controllers.

8. Function Tambahan()

   public function JenisKelamin()
    {
        return array(
               'L'=>'L - Laki-laki',
               'P'=>'P - Perempuan',
        );
    }

Dalam model atau kelas adalam representasi dari tabel, dibagian ini dapat menambahkan variabel atau method/fungsi. Skrip dengan fungsi yang diberi nama jenisKelamin(), dan fungsi mengembalikan nilai array(‘L’=>’L – Laki-laki’, ‘P’=>’P – Perempuan’, );, untuk keperluan isian dalam bentuk kotak kombo DropDownList.
Cara memanggilnya TblPegawai::jenisKelamin(),TblPegawai adalah nama kelas Tabel Pegawai dan jenisKelamin() fungsi/methode.

Sumber :
Badiyanto S.Kom, Buku Pintar framework Yii, 2013, Mediakom, Yogyakarta

Generator Gii adalah perintah yang menjalankan skrip untuk menciptakan kelas yang berkaitan dengan tabel berbasis web. Gii (web generator kode berbasis web) untuk mengotomatisasi pembuatan kode untuk tugas-tugas tertentu, Anda bisa membuat MVC (model, controller, dan view) dengan perintah CRUD (Create, Read, Update, Delete) menggunakan modul gii. Sebelum menggunakan gii, terlebih dahulu harus membuat tabel yang diperlukan untuk digenerate menjadi fungsi CRUD maupun MVC. Buat tabel tbl_pegawai dan tabel tbl_golongan pada database myweb dengan sintaks berikut:



--Database myweb
CREATE DATABASE /*!32312 IF NOT EXISTS*/`myweb` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `myweb`;
CREATE TABLE `tbl_pegawai` (
  `nip` char(5) NOT NULL,
  `nama` varchar(40) DEFAULT NULL,
  `alamat` varchar(40) DEFAULT NULL,
  `jk` char(1) DEFAULT NULL,
  `tg_lhr` date DEFAULT NULL,
  `gol_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`nip`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert  into `tbl_pegawai`(nip,nama,alamat,jk,tg_lhr,gol_id)
values ('10001','Dwi Sutomo','Semarang','L','1981-10-11',12),
('10002','Bambang Irawan','Solo','L','1982-10-01',3),
('10003','Satro Subagayo ','Yogyakarta','L','1980-10-01',14),
('10004','Nuryanti','Magelang','P','2012-11-10',8),
('10005','Irawan','Yogyakarta','L','1993-12-03',9),
('10006','Nanang','Jakarta','L','1993-12-15',10),
('10007','Mustikawati','Tegal','P','1969-12-05',13),
('10009','Dewi Rachmawati','Bantul','P','2000-12-22',6);

CREATE TABLE `tbl_golongan` (
 `id` int(11) NOT NULL DEFAULT '0',
 `gol_ruang` varchar(10) NOT NULL DEFAULT '',
 `golongan` varchar(50) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert  into `tbl_golongan`(id,gol_ruang,golongan)
values (1,'00','Tanpa Golongan'),
(2,'1/a','Juru Muda'),
(3,'1/b','Juru Muda Tingkat I'),
(4,'1/c','Juru'),
(5,'1/d','Juru Tingkat I'),
(6,'2/a','Pengatur Muda'),
(7,'2/b','Pengatur Muda Tingkat I'),
(8,'2/c','Pengatur'),
(9,'2/d','Pengatur Tingkat I'),
(10,'3/a','Penata Muda'),
(11,'3/b','Penata Muda Tingkat I'),
(12,'3/c','Penata'),
(13,'3/d','Penata Tingkat I'),
(14,'4/a','Pembina'),
(15,'4/b','Pembina Tingkat I'),
(16,'4/c','Pembina Utama Muda'),
(17,'4/d','Pembina Utama Madya'),
(18,'4/e','Pembina Utama');


Untuk menggunakan gii anda perlu mengatur file /myweb/protected/config/main.php, di bagian modules seperti berikut:


 <?php
...
    'modules'=>array(
        // uncomment the following to enable the Gii tool
        /*
        'gii'=>array(
            'class'=>;'system.gii.GiiModule',
            'password'=>'1234',
            // If removed, Gii defaults to localhost only. Edit carefully to taste.
            'ipFilters'=>array('127.0.0.1','::1'),
        ),
        */
    )
...
?>

Ubah menjadi kode berikut :

 <?php
...
    'modules'=>array(
        // uncomment the following to enable the Gii tool
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'1234',
            // If removed, Gii defaults to localhost only. Edit carefully to taste.
            'ipFilters'=>array('127.0.0.1','::1'),
        ),
    )
...
?>

Untuk menjalankan modul gii, login dengan memasukkan kata kunci yang diatur pada config/main.php lewat perintah ‘password’=>’1234′. Langkah selanjutnya jalankan dengan memanggil URL  http://localhost/belajar_yii/myweb/index.php?r=gii (langkah ini tidak selalu seperti ini sesuai dengan direktori web yang anda simpan), seperti gambar berikut:


Masukan password sesuai dengan kata kunci yang kita buat di config/main.php




       Maka disini adalah fungsi untuk membuat keperluan pada aplikasi database, seperti MVC (Model, View, Controller) maupun CRUD (Create, Read, Update, Delete).
Buatlah satu model untuk keperluan data pada aplikasi dengan menggunakan Model Generator. Klik Model Generator, kemudian masukan tabel yang telah dibuat (case-sensitive sangat diperhatikan untuk program ke depannya). Lalu klik Preview untuk mengecek apakah tabel dapat dibentuk menjadi model.



Lalu klik Generate, maka file model akan terbentuk dalam file protected/model .

 
       Kemudian, Buatlah CRUD untuk keperluan create, read, update, delete pada aplikasi dengan menggunakan CRUD Generator. Klik CRUD Generator, kemudian masukan model yang telah dibuat (case-sensitive diperlukan). Lalu klik Preview untuk mengecek apakah tabel dapat dibentuk menjadi fungsi CRUD.

Maka otomatis, file akan terbentuk pada file : protected/controllers dan file : protected/view
Pada file controllers


Pada file View


       Akses web aplikasi yang telah dibuat dengan mengetikan URL http://localhost/belajar_yii/myweb/index.php?r=tblpegawai



Sumber :
Badiyanto S.Kom, Buku Pintar framework Yii, 2013, Mediakom, Yogyakarta

Agar aplikasi web yang dibangun dinamis, Yii menyediakan dukungan berkemampuan untuk pemrograman database. PHP Data Objects (PDO), Yii Data Access Objects (DAO) memungkinkan pengaksesan ke sistem manajemen database (DBMS). Active Record Yii, diimplementasikan sebagai pendekatan pemetaan relasi antar objek/Object-Relational Mapping (ORM) yang diadopsi secara luas, untuk mempermudah pemrograman dengan database. Tabel direpresentasikan dalam bentuk kelas dan baris (record) dalam bentuk instan,Yii AR mengeliminasi tugas berulang pada penulisan perintah SQL terutama yang berkaitan dengan operasi CRUD (create, read, update, dan delete). Setiap kelas AR mewakili tabel database (atau view) yang atributnya diwakili oleh properti kelas AR, dan turunan AR mewakili rekaman dalam tabel tersebut. Operasi umum CRUD diimplementasikan sebagai metode AR.

Sebelum masuk lebih dalam pada aplikasi, kita buat terlebih dahulu user dan database yang diperlukan untuk dapat diakses oleh aplikasi web Yii. Buat user pada mysql dengan menggunakan xampp.


Buat user dengan nama yang dan password yang diinginkan. Kemudian scroll ke bawah, klik Go.



      Setelah terbentuk user baru, buatlah database yang akan digunakan untuk aplikasi web yang akan dibangun, misal saya akan membuat,
database : myweb



      Setelah dibentuk user dan database yang baru, maka akan terlihat user baru pada list user. Untuk memberikan hak akses database yang baru dibuat, user harus diberikan grant agar dapat melakukan beberapa perintah dalam database tertentu. Klik Edit Privileges pada Users overview.


      Rubah kondisi database yang diakses menjadi database myweb.

       Berikan seluruh hak akses / yang diperlukan saja (sesuai kebutuhan) kepada user gia agar user dapat melakukan beberapa perintah ke dalam database myweb. Check All pada Database-specific privileges agar semua ter-centang.



       Setelah langkah diatas dilakukan, maka user serta database siap dipakai untuk keperluan aplikasi web. Langkah selanjutnya menghubungkan aplikasi yang dibuat untuk dikoneksikan ke database. Sebelumnya buat aplikasi web pertama YII dengan command seperti berikut :

C:\xampp\htdocs\yii\framework>yiic webapp c:\xampp\htdocs\belajar_yii\myweb
 
Jika ada pertanyaan,

Create a Web application under 'C:\xampp\htdocs\test'? (yes|no) [no]:
 
ketikan ‘yes’ atau ‘y’.
       Kemudian hubungkan aplikasi yang baru dibuat untuk dikoneksikan ke database myweb. Perintah koneksi ke database diletakan pada file config.php. Caranya buka dan ubah file /myweb/protected/main/config.php, kemudian cari bagian sintaks seperti pada kode berikut :
File config.php

  
<?php
   ...
        // hilangkan tanda petik-slash disini
        //atau gunakan / * sbg komentar yang tdk akan dibaca program
        /*
        'db'=>array(
            'connectionString' => 'sqlite:'.dirname(__FILE__).
            '/../data/testdrive.db',
        ),
        // uncomment the following to use a MySQL database
        /*
        'db'=>array(
            'connectionString' => 'mysql:host=localhost;
             dbname=testdrive',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ),
        */
        'errorHandler'=>array(
            // use 'site/error' action to display errors
            'errorAction'=>'site/error',
...
?>


      Pada sintaks di atas database yang pertama kali dipakai adalah database testdrive.db yang secara otomatis saat pembuatan aplikasi pertama terbentuk secara otomatis dengan generator yiic. Kemudian, hilangkan tanda petik atau buat database testdrive menjadi tidak terakses dengan cara menghapus tanda ‘*/’  dan taruh tanda ‘*/’ dibawah lokasi database testdrive.db agar sintaks tersebut tidak ikut diakses.
       Kemudian hilangkan tanda ‘*/’ untuk pengaksesan database pada lokasi database dengan merubah dbname menjadi database pada mysql yang kita buat sebelumnya. username dan password sesuai dengan user yang dapat mengakses database tersebut. Seperti contoh berikut :

 
<?php
   ...
        // hilangkan tanda petik-slash disini
        //atau gunakan / * sbg komentar yang tdk akan dibaca program
        /*
        'db'=>array(
            'connectionString' => 'sqlite:'.dirname(__FILE__).
            '/../data/testdrive.db',
        ),
        // uncomment the following to use a MySQL database
        */
        'db'=>array(
            'connectionString' => 'mysql:host=localhost;dbname=myweb',
            'emulatePrepare' => true,
            'username' => 'gia',
            'password' => '123',
            'charset' => 'utf8',
        ),
        'errorHandler'=>array(
            // use 'site/error' action to display errors
            'errorAction'=>'site/error',
...
?>


Penjelasan :
connectionString : nama elemen array untuk koneksi
mysql: jenis database yang digunakan adalah mysql
host=localhost: nama host yang digunakan untuk server database mysql
dbname=myweb: nama database yang akan digunakan
‘username’ => ‘gia: nama user pada mysql
‘password’ => ‘123: kata kunci dari user mysql

Maka aplikasi Yii sudah terhubung dengan database myweb yang kita telah buat. Selanjutnya adalah bagaimana membuat MVC dengan generator gii pada program myweb.

Sumber :
Badiyanto S.Kom, Buku Pintar framework Yii, 2013, Mediakom, Yogyakarta

Yii adalah sebuah source framework menggunakan bahasa pemrograman PHP yang dibuat oleh Qiang Xue tanggal 01 Januari 2008. Sebelumnya Qiang juga mengembangkan framework PRADO selama bertahun-tahun. YII secara resmi dirilis untuk maemenuhi kebutuhan para pengembang perangkat lunak berbasis web. Beberapa pengembang perangkat lunak merespon positif atas perkembangan framework PHP. 


Yii merupakan framework (kerangka kerja) PHP berbasis-komponen, berkinerja tinggi untuk pengembangan aplikasi Web berskala-besar. Yii menyediakan reusability maksimum dalam pemrograman Web dan mampu meningkatkan kecepatan pengembangan secara signifikan. Nama Yii (dieja sebagai /i:/) singkatan dari “Yes It Is!“. Aplikasi yang dibangun menggunakan framework YII membutuhkan beberapa file pustaka (lib) yang disediakan dalam framework YII, dan menggunakan metode pemrgoraman berorientasi objek, atau dalam bahasa inggris disebut OOP (Object Oriented Programming) . Membangun sebuah aplikasi dengan framework YII, pengembang cukup menggunakan kelas yang tersedia di PHP sendiri. Semua yang dibangun menggunakan YII menggunakan arsitektur Model-View-Controller (MVC). Framework YII memberlakukan dan mengatur cara penyimpanan kode program yang diletakkan dalam folder model dalam folder/models/, view dalam folder/view, dan controller dalam folder/controller/. Sehingga sangat terstruktur dan efisien dalam penulisan kode program. Berikut merupakan respon yang paling tepat dan akurat untuk yang baru dengan Yii: 

Apakah Yii cepat? … Apakah Yii aman? … Apakah Yii profesional? … Apakah Yii cocok untuk projek saya berikutnya? … Yes, it is!

1. Persyaratan

       Untuk menjalankan aplikasi Web berbasis Yii, Anda memerlukan server Web yang mendukung PHP 5.1.0. Bagi para pengembang yang ingin menggunakan Yii, mengerti pemrograman berorientasi-objek (OOP) akan sangat membantu, karena Yii merupakan framework OOP murni.

2. Yii Paling Cocok untuk Apa?

       Yii adalah framework pemrograman umum Web yang bisa dipakai untuk mengembangkan semua jenis aplikasi Web. Dikarenakan sangat ringan dan dilengkapi dengan mekanisme caching yang canggih, Yii sangat cocok untuk pengembangan aplikasi dengan lalu lintas-tinggi, seperti portal, forum, sistem manajemen konten (CMS), sistem e-commerce, dan lain-lain.

3. Bagaimana Yii Dibandingkan dengan Framework Lain?

       Seperti kebanyakan PHP framework, Yii adalah MVC framework. Yii melampaui framework PHP lain dalam hal efisiensi, kekayaan-fitur, dan kejelasan dokumentasi. Yii didesain dengan hati-hati dari awal agar sesuai untuk pengembangan aplikasi Web secara serius. Yii bukan berasal dari produk pada beberapa proyek maupun konglomerasi pekerjaan pihak-ketiga. Yii adalah hasil dari pengalaman kaya para pembuat pada pengembangan aplikasi Web dan investigasi framework pemrograman Web dan aplikasi yang paling populer.


4. Instalasi

Instalasi Yii mencakup dua langkah berikut:
1. Download Yii Framework dari yiiframework.com.


2. Keluarkan(unpack) file rilis Yii ke direktori yang dapat diakses Web kemudian ubah nama ke dalam folder  dengan nama “Yii” agar lebih singkat (nama bebas).

Tip: Yii tidak harus diinstalasi di bawah direktori yang bisa diakses Web. Aplikasi Yii memiliki satu skrip entri yang biasanya merupakan satu-satunya file yang perlu di perlihatkan kepada pengguna Web. Skrip PHP lainnya, termasuk yang dari Yii, harus dilindungi dari akses Web karena bisa dieksploitasi untuk di-hack.
3. Setelah menginstalasi Yii, Anda bisa memverifikasi apakah server Anda sesuai dengan semua persyaratan pemakaian Yii. Anda dapat melakukannya dengan mengakses skrip pemeriksa persyaratan di URL berikut dalam browser Web:

http://hostname/path/ke/yii/requirements/index.php
 
       Yii membutuhkan PHP 5.1 sehingga server Web Anda harus mendukung PHP 5.1.0 atau lebih tinggi. Yii sudah diuji dengan Apache HTTP server pada sistem operasi Windows dan Linux. Yii juga bisa berjalan pada server Web dan platform lain yang mendukung PHP 5.1

Requirement YII

       4. Buatlah sebuah aplikasi web lewat command line, buka command line dengan menggunakan perintah cmd kemudian masuk ke dalam direktori folder YII di extract sebelumnya.

C:\xampp\htdocs\yii\framework
 
untuk membuat aplikasi ketikkan

yiic webapp c:\xampp\htdocs\coba_yii
 
yiic : Program generator untuk membuat aplikasi web dengan YII
webapp : parameter web aplikasi
C:\xampp\htdocs\coba_yii : tempat untuk meletakkan aplikasi di dalam folder mencoba menjalankan dnengan memanggil http://localhost/coba_yii


seperti  contoh berikut :



Lalu jika ada pertanyaan,
 
Create a Web application under 'C:\xampp\htdocs\coba_yii'? (yes|no)
 
Ketikan ‘yes’ atau ‘y’ ketika program meminta persetujuan untuk membuat sebuah folder baru dalam direktori yang kita arahkan sebelumnya. Maka Aplikasi otomatis terbuat. Untuk melihat hasilnya dengan memanggil url: http://localhost/coba_yii/, hasilnya akan terlihat seperti gambar dibawah.


Allhamdulillah, aplikasi pertama YII telah dibuat. :)


Sumber :
http://www.yiiframework.com/doc/guide/1.1/id/quickstart.what-is-yii
Badiyanto S.Kom, Buku Pintar framework Yii, 2013, Mediakom, Yogyakarta