• Tutorial CodeIgniter Dasar Part III – Page Template

    Level: Basic

    Karena banyak komentar dari temen2 tentang tutorial ini ada error, maka saya update postingan ini dengan menambahkan sedikit catatan ini. Perlu diperhatikan bahwa ini adalah tutorial CI untuk versi 1.7.x, bukan CI versi 2.x.. karena banyak perbedaan yang ada pada CI sekarang, maka mungkin nanti saya akan buat tutorial CI untuk versi 2.x.. Salah satu perbedaannya yaitu folder ‘applications’ yang ada di luar folder ‘system’ (CI 2.0), sedangkan CI versi 1.7.x masih di dalam folder system.. Jadi ketika mengalami error, silakan download versi 1.7.x (misal: 1.7.2/1.7.3).

    Oh iya, sekarang saya sudah buat situs tutorial pemrograman berbahasa Indonesia lengkap. Saya akan selalu mengupdate tutorial-tutorial saya di situs tersebut. Penasaran? jika kamu ingin semakin jago coding, kamu harus kunjungi situs Jagocoding.com :)

    Kali ini, Cheyuz akan ngebahas tentang Page Template, apa itu?

    Page Template adalah sebuah pola layout pada sebuah halaman web di mana kita akan selalu memakai pola tersebut sesuai kebutuhan kita untuk meload halaman lengkap beserta header, content, dan footernya.. dengan menggunakan page template, kita tidak harus meload header dan footer di setiap fungsi pada controller di CodeIgniter.

    Contoh misalnya ada kasus seperti ini:
    Pada sebuah halaman web, ketika diload harus selalu load header, sidebar, content, footer, dsb.. maka secara normal di program akan berbentuk seperti ini:

    <?php
    class Home extends Controller {
        function index() {
            $data['title'] = 'Webku';
            $this->load->view('header');
            $this->load->view('topmenu');
            $this->load->view('home_view', $data);
            $this->load->view('footer');
        }
    }
    ?>

    Di dalam function index, kode tersebut akan meload view header.php, sidebar.php, home_view.php, dan footer.php. Cara ini sebenarnya kurang efektif, walaupun yang dihasilkan adalah sama, yaitu nge-load lengkap sebuah halaman web (dari tag [html] sampai [/html]). Kenapa kurang efektif? karena di setiap function kita harus meload lagi semua elemen di atas… Ini baru satu function, bagaimana jika di dalam satu controller terdapat 50 function? tentu hal ini dapat merepotkan, dan sangat tidak efektif karena membuat redudansi kode.

    Menggunakan Page Template Helper

    Untuk mempermudah penggunaan code, kita akan membuat sebuah helper baru yang akan kita namakan Page Template Helper (page_template_helper.php) yang akan kita gunakan untuk merender layout yang sudah kita buat. Jadi layaknya seperti gabungan dari function $this->layout() dan $this->render() di Framework CakePHP.

    OK, pertama-tama buatlah layout untuk template kita, dan simpan di folder /system/application/view/layout/ (seperti biasa, base_url() website kita adalah ‘webku’) dengan nama default.php, kodenya adalah sebagai berikut:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Webku<?php echo isset ($title)?" | ".$title:'' ?></title>
        </head>
        <body>
            <div id="header">
                <?php $this->load->view('layout/element/header') ?>
            </div>
            <div id="topmenu">
                <?php $this->load->view('layout/element/topmenu') ?>
            </div>
            <div id="content">
                <?php $this->load->view($view) ?>
            </div>
            <div id="footer">
                <?php $this->load->view('layout/element/footer') ?>
            </div>
        </body>
    </html>

    Kode di atas adalah sebuah template default website kita, yang berarti setiap action/function yang akan kita panggil akan selalu meload tag html di atas, mulai dari title, kemudian load CSS atau JS misalnya, terus header-nya, topmenu, footer, dan sebagainya. Kita cukup menambahkan elemen di file tersebut.

    Contoh ini belum menggunakan CSS, pembahasan tentang CSS akan dijelaskan pada tutorial selanjutnya

    Setelah membuat file default.php, buatlah semua file ‘layout element’ (header, topmenu, dan footer) dan simpan di direktori /system/application/view/layout/element/. Berikut adalah isi dari masing-masing elemen:

    Isi dari file-file di bawah ini hanya pemisalan/contoh :)

    ../view/layout/element/header.php

    <img src="images/banner.jpg" /> Ini adalah HEADER

    ../view/layout/element/topmenu.php

    <a href="#">MENU 1</a> | <a href="#">MENU 2</a> | <a href="#">MENU 3</a>

    ../view/layout/element/footer.php

    Copyright &copy 2010 by Cheyuz

    Jadi ketika file default.php dirender, maka element/header.php, element/topmenu.php, dan element/footer.php akan selalu diload.

    Nah, untuk pemanggil template tersebut dan yang akan digunakan di controller adalah Page Template Helper… jadi rencananya kode kita yang sebelumnya:

    <?php
    class Home extends Controller {
        function index() {
            $data['title'] = 'Webku';
            $this->load->view('header');
            $this->load->view('topmenu');
            $this->load->view('home_view', $data);
            $this->load->view('footer');
        }
    }
    ?>

    menjadi seperti ini:

    <?php
    class Home extends Controller {
        function index() {
            $data['title'] = 'Webku';
            show('home_view',$data);
        }
    }
    ?>

    Singkatnya, kita tidak menggunakan function $this->load->view() lagi di Controller, tetapi kita menggunakan function show() yang berfungsi sama dan meload seluruh elemen yang kita tentukan.

    Sekarang, kita buat sebuah helper page_template_helper.php di /system/application/helper/ dengan kode seperti berikut:

    <?php
    if ( ! function_exists('element')) {
        function show($view, $data=array(), $template='default') {
            $ci = &get_instance();
            $data['view'] = $view;
            $data = $ci->load->view('layout/'.$template, $data);
        }
    }
     
    /* End of file page_template_helper.php */
    /* Location: ./system/helpers/page_template_helper.php */

    OK, akan Cheyuz jelaskan..
    Di kode itu terlihat bahwa $view yang ada di parameter 1 di function show() ini akan dimasukkan ke dalam variable array $data, yang kemudian akan diload view yang bernama $template (diubah sesuai nama layout, defaultnya adalah default.php) dengan $data tetap dari parameter ke-2.. dan parameter ke-3 ($default) adalah nama file template yang kita buat… secara default file template yang akan diload adalah ../layout/default.php.

    Nah, di controller Home tadi, kita dapat mengubahnya menjadi seperti ini:

    <?php
    class Home extends Controller {
        function index() {
            $data['title'] = 'Webku';
            show('home_view',$data);
        }
        function about(){
            $data['title'] = 'About';
            show('home_view',$data);
        }
        function other(){
            $data['title'] = 'Other (layout tanpa topmenu)';
            show('home_view',$data, 'other');
        }
    }
    ?>

    Ada function other(), yang akan memanggil halaman dengan template yang berbeda, yaitu menghilangkan topmenu.. karena kita sudah membuat helpernya, maka untuk membuat template baru untuk function other() tersebut, kita tinggal membuat file template bernama other.php di /system/application/view/layout/ dengan isi file seperti berikut:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Webku<?php echo isset ($title)?" | ".$title:'' ?></title>
        </head>
        <body>
            <div id="header">
                <?php $this->load->view('layout/header') ?>
            </div>
     
            <?php // menghilangkan topmenu untuk action tertentu ?>
     
            <div id="content">
                <?php $this->load->view($view) ?>
            </div>
            <div id="footer">
                <?php $this->load->view('layout/footer') ?>
            </div>
        </body>
    </html>

    Setelah semua langkah selesai, selanjutnya adalah meload helper tersebut. Karena kita akan selalu meload helper ini, maka kita atur konfigurasi autoloadnya di file /system/application/config/autoload.php

    Tambahkan ‘page_template’ pada bagian kode berikut:

    ..
    $autoload['helper'] = array('page_template');
    ..

    Tutorial selesai, selamat mencoba… :)
    bila ada pertanyaan, kritik saran, silakan comment/email…

    This entry was posted on Friday, May 21st, 2010 at 21:56 and is filed under Code Igniter, PHP, Tutorial, _other. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
  • 73 Comments

    Take a look at some of the responses we have had to this article.

    1. kadek
      May 28th

      mas, aku make template yg udh ad css’nya. tp begitu diload kok letaknya jadi berantakan dan images’nya gak mau keluar. aku ngletakin style css-nya di luar folder system…..

    2. Jun 8th

      untuk image nya biar keluar di simpen dimna ia ??

    3. Jun 19th

      @kadek: pake echo base_url() dulu mas.. :)

    4. Jun 20th

      @Jang743: image simpen di folder /image, trus nanti pake img(‘images/nama_file.jpg’);

    5. xiang
      Jun 28th

      maap gan ane nubie
      menyimak dr tutorial di atas
      ane mau tanya nih gan
      function other and about digunain buat apa?
      kapan bisa memanggil function other/about yg ada di controller home.php????
      caranya gimana nulis di addressbarx browser?
      klo localhost/webku kan keluar yg bagian function index()
      klo yg bagian function other sama about gimana caranya?
      thx sebelumnya gan

    6. Asep
      Jul 18th

      kang cheyuz…
      kalo misalkan template nya harus load dulu database gmana ya kang??
      misalkan untuk menu nya kita mau load dari database..
      mohon pencerahan kang pliss… :D

    7. Jul 23rd

      Kok saya Error di bagian (‘home_view’, $data);

      Home_view tu maksudnya apa ya????

    8. Aug 26th

      @xiang: maaf, saya baru buka blog lagi, udah lama ga update karena skripsi.. cara penulisan di address barnya yaitu home/about atau home/other.. jadi [controller]/[function]

    9. Aug 26th

      Kok saya Error di bagian (‘home_view’, $data);

      Home_view tu maksudnya apa ya????

      File home_view.php-nya udah dibuat belum? itu fungsinya untuk load file view bernama home_view.php..
      di situ disebutin hanya contoh aja..

    10. Deni
      Sep 11th

      kang cheyuz…
      kalo misalkan template nya harus load dulu database gmana ya kang??
      misalkan untuk menu nya kita mau load dari database..
      mohon pencerahan kang pliss… :D

    11. Sep 20th

      kang cheyuz…
      kalo misalkan template nya harus load dulu database gmana ya kang??
      misalkan untuk menu nya kita mau load dari database..
      mohon pencerahan kang pliss…

      Untuk menu, nanti dibuat tutorialnya.. :)

    12. sama nama
      Sep 26th

      kang ceyus
      ngomong2 fungsi ini buat apa ya
      $ci = &get_instance();

    13. Sep 27th

      agak membingungkan untuk isi script untuk home_view.php dan default.php, jadi untuk keduanya sama ato bagaimana? n untuk lokasi dan isi script home_view.php itu dimana dan apa??

    14. novelis
      Oct 27th

      mas ini nyobain di browsernya urlnya apa???
      saya udah nyoba2 tetep ga bisa.

    15. Oct 31st

      kang cheyuz…
      kalo misalkan template nya harus load dulu database gmana ya kang??
      misalkan untuk menu nya kita mau load dari database..
      mohon pencerahan kang pliss…

      @Deni: ya tinggal ambil datanya pake library DB di CI, trus fetch di viewnya, pasang di ul li.. (buat menu)

    16. Oct 31st

      kang ceyus
      ngomong2 fungsi ini buat apa ya
      $ci = &get_instance();

      @sama nama: fungsinya untuk membuat variable baru ($ci) sebagai component core CI.. misal: $this->db->get() jadi $ci->db->get().. biasanya digunakan di helper..

    17. Oct 31st

      agak membingungkan untuk isi script untuk home_view.php dan default.php, jadi untuk keduanya sama ato bagaimana? n untuk lokasi dan isi script home_view.php itu dimana dan apa??

      @novian: home_view itu adalah bagian dari layout dalam file default.php.. default.php itu layout, sedangkan home_view itu adalah view.. view2 disimpan di dalam sebuah layout..

    18. 4YoU
      Dec 23rd

      trimakasih sebelumnya,info2nya sangat bermanfaat..
      Mau tanya nih, page template yg pake css belum dibahas ya ?
      ^^

    19. Jan 13th

      kang….. kok yang saya ps dicoba error….
      katanya dya gga bisa nge-load file : home_view.php

      gmna ya kang??

    20. Jan 18th

      kang….. kok yang saya ps dicoba error….
      katanya dya gga bisa nge-load file : home_view.php

      gmna ya kang??

      @Yayan: itu hanya contoh aja Yan :)

    21. ryan
      Jan 29th

      fungsi diatas ko ga mau jalan mas, malah eror seperi ini :
      An Error Was Encountered
      Unable to load the requested file: home_view.php

    22. Mar 3rd

      mas,aku make template yg udh ad css’nya. tp pas ag jalani kok image nya gk keluar yo. apa yg harus saya setting.

    23. Mar 13th

      mas, gk jd image nya dh muncul. cuma saya blum bisa menampilkan menu dari database yang kita buat ke halalaman template mengunakan template yang sudah jadi atau template yg saya download.

  • Leave a Reply

    Let us know what you thought.

  • Name(required):

    Email(required):

    Website:

    Message:

    Spam Protection by WP-SpamFree