Drupal 7: Ini Fungsi Untuk Mengubah File Template Berdasarkan Path Header Atau Node

Drupal 7 memungkinkan kita untuk menyarankan template yang sesuai dengan halaman berdasarkan path, header, node atau parameter lainnya. Caranya adalah dengna menggunakan fungsi hook_preprocess_page pada file template.php.


on Sab, 11/28/2015 - 12:57
7.623 View

Drupal 7 memungkinkan kita untuk menyarankan template yang sesuai dengan halaman berdasarkan path, header, node atau parameter lainnya. Fitur ini sangat penting, terutama saat dimana kita melakukan theming atau mengimplementasikan desain dari website kita. Untuk dapat menyarankan template pada Drupal, ada banyak cara yang bisa digunakan, dan salah satu cara termudah, tanpa harus membuat modul khusus adalah dengan memanfaatkan file template.php dari tema yang kita gunakan.

Pada file template.php, kita bisa mengimplementasikan hook yang bernama NAMATEMA_preprocess_page(&$vars). Fungsi ini memungkinkan kita untuk melakukan pengubahan kode halaman sebelum halaman dirender. Pada fungsi ini selanjutnya kita dapat melakukan berbagai pengkondisian, yang salah satunya adalah pengkondisian untuk menyarankan template pada drupal. Agar tidak bingun, langsung saja berikut adalah contohnya:

function sarasvati_preprocess_page(&$vars) {
    $header = drupal_get_http_header('status'); 

    //Pengkondisian untuk membuat halaman khusus ketika header status 404 (Not Found) dan 403 (Forbidden)
    if ($header == '404 Not Found') {     
        //file templatenya menjadi page--404.tpl.php
        $vars['theme_hook_suggestions'][] = 'page__404';
    }
    else if($header == '403 Forbidden') {     
        //file templatenya menjadi page--403.tpl.php
        $vars['theme_hook_suggestions'][] = 'page__403';
    }

    //Mengubah file template page untuk taxonomy
    else if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
        $term = taxonomy_term_load(arg(2));
        //File templatenya menjadi page--vocabulary--nama_vocab.tpl.php
        $vars['theme_hook_suggestions'][] = 'page__vocabulary__' . $term->vocabulary_machine_name;
    }

    //Atau bahkan mengubah template halaman login
    else if (arg(0) == 'user' && arg(1) == 'login' || arg(1) == 'password' || arg(1) == 'register'){
        //File templatenya menjadi page--login.tpl.php
        $vars['theme_hook_suggestions'][] = 'page__login';
    }  
}

Bagaimana dengan membuat template sesuai dengan tipe konten (Content Type) misalnya konten tipe blog, gallery, atau forum ?

Caranya sama, kita bisa melakukannya dengan menambahkan pengkondisian berikut:

// Membuat template suggestion berdasarkan jenis konten 
    //(Note: gunakan else if jika menggabungkan dengan kondisi sebelumnya)
    if (isset($vars['node'])) {
    
    // Suggestion sebelumnya yang cukup panjang
    $suggests = &$vars['theme_hook_suggestions'];

    // dapatkan argumen path
    $args = arg();
    // Hilangkap argumen pertama yang tidak perlu yang isinya "node".
    unset($args[0]);

    // Tentukan jenis kontenya
    $type = "page__type_{$vars['node']->type}";

    // Gabungkan menjadi satu
    $suggests = array_merge(
        $suggests,
        array($type),
        theme_get_suggestions($args, $type)
    );

    // jika urlnya adalah: 'http://domain.com/node/123/edit'
    // dan jenis kontenya adalah blog
    // 
    // Inilah saran dari templatenya
    //
    // - page__node
    // - page__node__%
    // - page__node__123
    // - page__node__edit
    // - page__type_blog
    // - page__type_blog__%
    // - page__type_blog__123
    // - page__type_blog__edit
    // 
    // Yang mana akan terhubung dengan file template berikut
    //
    // - page--node.tpl.php
    // - page--node--%.tpl.php
    // - page--node--123.tpl.php
    // - page--node--edit.tpl.php
    // - page--type-blog.tpl.php
    // - page--type-blog--%.tpl.php
    // - page--type-blog--123.tpl.php
    // - page--type-blog--edit.tpl.php
    // 
  }

Hasilnya adalah kita memiliki tampilan halaman yang berbeda berdasarkan jenis header, path atau jenis kontenya, sehingga halaman terlihat lebih dinamis dan keren tentunya.

Penjelasan dari kode diatas:

Fungsi ini ditulis pada file template.php dari tema yang kalian gunakan. Ingat hal yang perlu diperhatikan sebelum menyalin kode tersebut, cek dulu apakah fungsi preprocess tersebut sudah dideklarasikan sebelumnya, jika sudah jangan buat fungsi baru lagi namun cukup tambahkan isinya pada fungsi yang sudah ada.

Bagian kode yang perlu diganti atau disesuaikan adalah bagian nama tema, yang dalam kasus saya ini menggunakan nama sarasvati. Ganti nama tema sesuai dengan nama tema yang kalian gunakan. Terkahir, ingat untuk men-clear registry tema (theme registry), yang jika kalian menggunakan modul Administration Menu, terdapat pada bagian paling kiri dari menu.

Sekian, semoga bermanfaat...

Profil Penulis

User Picture
  • Member Since 7 tahun 10 bulan ago
Aditya Suranata

Embedded System, Internet of Things, Precision Agriculture, Controlled Environment...

Aditya suka menulis, bukan hanya sekedar hobi, menulis menjadi medianya untuk mencurahkan pikiran dan perasaan. Di TutorKeren.com kebanyakan menyumbang tulisan sesuai dengan minat dan keahliannya yaitu pada kategori pemrograman dan elektronika....

Comments