• 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. May 22nd

      Boz.. TQ tutorialnya..
      BTW.. lanjut terus dunk ..
      Jangan berhenti mpe disini..
      Ane nyimak terus niy.. itung2 kursus gratis..

    2. May 22nd

      hehehe thankz gan….
      pasti diupdate trus… :)

    3. May 22nd

      Ditunggu materi CI lg boz:
      bikin menu yg model dropdown ama
      nampilin data model Grid yg klo mau ngedit record, diklik recordnya bisa tampil popup editannya.. xixixi

      Sori boz.. maunya banyak yax.. soalnya cuma tutorial ente doank yg original pencerahannya mangstab n muda dimengerti..

      hehehe.. NGAREP.COM

    4. May 22nd

      hehe thankz… ok sip, nanti dibikin tutorial menu dropdown, tapi di bagian CSS, bukan Code Igniter…
      kalo yang ngedit record popup, itu ada di bagian JQuery gan :)
      nanti dibikin tutorialnya kalo tutorial CI udah beres… :)

    5. May 22nd

      iye gan.. reguest: klo bisa dipaket dalam framework CI
      jadinya nubi2 kayak ane ga bingung..
      trusin aja gan modul mahasiswa yg kmarin ente buat..

      Tp btw Wedew.. nice gan..
      ente cocok jadi dosen gan..
      ane cm bisa ngasi doa aja gan.. sukses selalu..
      Biar yg diatas yg membalas ilmu yg ente kasi..

    6. May 25th

      brow, klo file “home_view” nya yang mana, koq pas diload error uy….dia request file home_view….

    7. May 25th

      siipp… nanti ane update…
      ane lagi banyak tugas nih gan…
      jadi blm update lagi hehe

    8. Jun 10th

      Bagaimana cara penggunaan template other?

    9. Jun 10th

      Thx bro…tau caranya buat grafik ga?

    10. Jun 12th

      @Andri: pake show(‘view’, $data, ‘nama_template_other’);

    11. Jun 12th

      @candra: pake plug in jquery gan..

    12. Jun 29th

      coba dong pake web buatan sendiri biar kita percaya klo mas2 ini bisa buat web…tunjukkan kreasimu….

    13. Jul 3rd

      @indra: silakan diliat web saya, full CodeIgniter +ajax: http://www.cheyuz.com di sana ada banyak portofolio saya

    14. Sep 5th

      Tutorial yang singkat, padat, jelas dan bermanfaat, good job..
      btw utk menjalankan contoh pada tutorial part III ini apa tidak diperlukan view: home_view.php Gan?

      Ditunggu tutorial CI dan CSS selanjutnya… trims

    15. Sep 17th

      @maknyus: diperlukan, buat home nya… ya maksud di sini kan dgn pake fungsi itu jadi lebih fleksibel, bisa load halaman apa aja yg berupa konten, begitu..

    16. Sep 21st

      Mantabs….. lanjutkan….!!!!

    17. Sep 21st

      @jmlord: thankz gan :)

    18. Oct 3rd

      Good,Triple kill ^.^
      mhantap gan..btw bgmn klo tmplatenya udah dengan CSS nya..gmn membedahnya di CI ?

      keppPostng
      thanks a Lot

    19. Oct 3rd

      bagaimana cara meload function other.php itu bro (template tanpa top menu)?

      klo bisa contoh penggunaannya dalam action,misal sebuah link yg memanggil function tsb..

      thanks be4

    20. Oct 3rd

      @awi: hehe,,, chain killer gan :P CSS disimpen di file /style aja.. diload dulu di template defaultnya…

    21. Oct 3rd

      @awi: “bagaimana cara meload function other.php itu bro (template tanpa top menu)?” maksudnya gimana ya gan?

    22. Oct 5th

      akhirnya gw selesai juga di tingkat 3 ini, dengan segala kesulitan dan susah payahnya…. :)

      Thanks banget bos tutorialnya, sangat membantu,
      semoga amal Ibadahnya dibalas oleh Tuhan YME.

      btw request pagination dong..
      gw udah muter2 – semuanya gak step by step seperti disini…

      Thanks bos..

    23. Oct 7th

      @ferdi: alhamdulillah kalo udah ngikutin tutorialnya dgn baik ;) amiin … iya boleh juga tuh, pagination belum saya tulis tutorialnya… ok segera saya buat ya…

    24. Nov 4th

      Nanya donk gan…
      Ane lagi nyoba bikin aplikasi yang berbasis module di CI, jadi file2 controller nggak berada di dalam folder system/application/controller tapi dah ane kasih diluar sejajr dengan folder system :
      baganya kurang lebih kaya gini :

      - system
      - modules
      – home
      – controllers
      – models
      – views
      - theme

      nah yang mo ane tayain, secara default kalo ane pake aplikasi itu, viewsnya diload id folder views yang ada di folder modules home

      nah ane kan pengein buat apliaksi yag mltiple theme, jadi ane pengein di fodler theme tu ada nama theme yang didalamnya ada file2 yang diload di contiroller
      ex : $this->load->view(‘home’);

      nah file home.php tu pengenya ane taruh didalam folder themes/nama_template/home.php

      tolongin dunk gan :D

    25. Nov 5th

      gan tanggung neh…. dari Framework Codeigniter masa loncat ke chakephp…..template buat Framework Codeigniter gmn neh aduhhhh kentang…heheee

    26. Nov 5th

      @haries: oh, itu namanya HMVC… jadi basis module… iya saya juga suka pake cara itu.. tapi alangkah baiknya stelah folder modules dibuat, folder controllers dan views di luar folder modules dihapus aja… karena udah disimpen di dalam folder modules di masing2 module…. Nah, kalo agan pengen theme di luar modules… berarti folder views di luar modules jangan dihapus, biarlah itu untuk template themes… nah kalo yg di dalam modules untuk view masing2 modul….
      Kalo ngeliat kasus agan, agan tinggal buat file themes di: /application/views/themes/nama_themes/home.php gitu aja gan :) biar view yg di dalam modules bukan buat template… ;)

    27. Nov 5th

      @hang2303: mending fokus ke satu framework. Untuk tutorial layouting, baca aja: http://harian.cheyuz.com/_other/tutorial-codeigniter-dasar-part-iii-page-template

    28. agos april
      Nov 15th

      tx tut nya………..tambah lagi CI yang lebih kompleks

    29. Nov 16th

      @agos: ok gan… gampang itu mah ;)

    30. Dec 12th

      gokil mantapp tutorialnya…

    31. Dec 14th

      @diaz: sip, thankz ya… :)

    32. agus
      Mar 10th

      pertanyaan saya sama dengan LEVIE, home_view.php nya mana ya? ini request home_view.php

    33. lucky
      Mar 17th

      mas gimana cara bikin hyperlink nya kok saya coba css nya ngak jalan yach

    34. Apr 2nd

      @agus: oh di situ hanya contoh aja… home_view.php nya belum dibuat gan..

    35. Apr 2nd

      @lucky: file CSSnya punya mas ditaro di mana?? pake function anchor($path, $caption);

    36. lucky
      Apr 4th

      css nya saya taro di folder

      application
      system
      asset——> js
      ——> css
      jadi kayak gini struktur foldernya

    37. Apr 15th

      gan, file homeview mana ??

    38. kiki
      Apr 15th

      kang cheyuz, cara ngeload CSS nya gmn ya ?
      aku uda buat file.css di dalam folder css letaknya di web rootnya. uda di coba ga b isa ngeload CSSnya.

    39. andiliee
      Apr 17th

      Sob mau nanya sob ….
      ngikutin templating di atas sob …

      Controller :

      class Home extends Controller{
      function __construct(){
      parent::Controller();
      $this->load->model(‘Web’);
      }

      function index(){
      $data['title'] = ‘Home’;
      $data['query'] = $this->Web->getAllMhs();
      show(‘index’,$data);
      }

      function about(){
      $data['title'] = ‘About’;
      show(‘about’,$data);

      }
      }

      —————————————

      topmenu .php

      ?>

      ————————————–

      tapi pas menu di click kok ga bisa ya sob …
      padahal function “about” nya ada.

      errornya :

      Object not found!

      minta pencerahan sob.

    40. Apr 21st

      @kecebong basah: itu cuma pemisalan aja gan, agan boleh buat filenya :)

    41. Apr 21st

      @kiki: di header, tambahin tag link rel, ~>

    42. Apr 21st

      @andilie: coba pake index.php… pake CI versi berapa? ini buat CI versi 1.7.x aja..

    43. kiki
      Apr 23rd

      oke uda bisa kang yg css nya. nah sekarng nih aku bingung,
      misalnya nih ada form login di directory CI/application/views/layout/element/ . nah aku mau kirim parameter ke controller caranya gmn ya ?
      kok pake cara echo form_open(‘../home/cekLogin’); atau form_open(‘home/cekLogin’); ga bisa ya kang ???

    44. alibaba
      Apr 27th

      File home_view.php fungsinya buat apa ta?

    45. kiki
      Apr 27th

      kang, bisa minta projek yg uda jadi ga ? yg uda komplit fiturnya. aku belajarnya susah kalo ga liat contoh projek lgsg. hehe

    46. Apr 28th

      @kiki: pake form_open bisa.. sebelumnya panggil dulu helpernya: $this->load->helper(‘form’);

    47. Apr 28th

      @alibaba: itu buat view home aja gan.. sebagai contoh aja.. hehe..

    48. alibaba
      May 5th

      Kl misal aku menunya ngambil dari database, boleh ga sih kl mendeklarasikan menunya di helpernya??

    49. May 13th

      People all over the world receive the loan from various creditors, because that’s comfortable and fast.

    50. May 18th

      @alibaba: tentu boleh gan :)

  • Leave a Reply

    Let us know what you thought.

  • Name(required):

    Email(required):

    Website:

    Message:

    Spam Protection by WP-SpamFree