Skip to Content

Kastemisasi Halaman Muka

Apa yang harus dilakukan dalam melakukan kastemisasi halaman depan pada situs yang dibuat oleh drupal?
Misalnya kita ingin membuat layout tertentu yang menampilkan gambar disamping berita atau artikel terkini.
Secara prinsip, drupal menyediakan ruang yang luas untuk melakukan kastemisasi. Hal yang pertama dilakukan adalah berpikirlah "secara modular". Artinya ketika di benak kita (benak desainer) ada layout tertentu untuk halaman depan, maka kita harus mampu menerjemahkannya menjadi sebuah modul.
Selain itu, jika layout ini terkait dengan konten, maka kita harus melihat struktur database engine drupal, terutama yang terkait dengan node (misalnya tabel node_revision, node dan term).

Misalnya ketika diminta mengerjakan situs sancang.net saya diminta menampilkan desain tertentu, di mana halaman muka terbagi dalam tiga bagian. Pertama menampilkan pfofil, bagian kedua menampilkan dua kolom, dengan kolom kiri adalah artikel terbaru dan bagian kanan adalah berita (kabar) terbaru (lihat gambar di attachment).

Untuk bagian pertama, kita langsung melakukan query ke node dengan id profil ini (nid=4). Tentu saja, kita harus melihat di tabel node_revisions, untuk melihat artikel yang dimaksud memiliki nid berapa.

<?php

function face_page(){
   
$rs=db_fetch_array(db_query("SELECT title, teaser, body  FROM {node_revisions} WHERE nid=4"));
   
$output .= "<div><img src='".base_path()."/files/pbs.gif'></div><div class='node'><div class='contents'><p>".$rs['teaser']."</p></div><div class='linksteaser'><div class='links'><ul class='links inline'><li class='node_read_more first last'><a href='node/4' title='Read the rest.'>Read more</a></li>
</ul></div></div></div>"
;
     
$output .="<div>".artikelnewest();
    
$output .= kabarnewest()."</div>";
return 
$output
}
?>

Fungsi artikelnewest() dan kabarnewest() adalah bagian kedua, di kolom kiri dan kanan. Di mana keduanya melakukan fetch_row terhadap query dengan term tertentu. "Term" adalah istilah untuk modul taxonomy yang berguna untuk pengelompokkan. Untuk mengambil query dengan term tertentu, maka digunakan "tid" pada tabel "term_node".

<?php
function artikelnewest(){
$result db_query('SELECT DISTINCT(n.nid), n.sticky, n.title, n.created FROM {node} n INNER JOIN {term_node} tn ON n.vid = tn.vid WHERE tn.tid =1  order by n.nid limit 0,1');
$titles = array();
$output "<div id='latest_articel'>"
while (
$data=db_fetch_object($result)) {
  
$rs=db_fetch_array(db_query("SELECT teaser FROM {node_revisions} WHERE nid=%d"$data->nid));
  
$output .= "<div class='t_latest'><p>Artikel Terakhir</p></div><a href='node/".$data->nid."'>";    
  
$output .= "<img src='".base_path()."files/latest_articel.jpg'>";    
  
$output .= "<div class='latest'>".$data->title.", </div></a>";
  
$output .= "<div class='node'><div class='contents'><p>".$rs['teaser']."...</p></div></div>";
}
$output .= '</div>';
class=
'node_read_more first last'><a href='node/4' title='Read the rest.'>Read more</a></li></ul></div></div>";


    return $output; 
}
?>

Query pertama adalah mengambil term dan nid dengan limit tertentu dan disort (diurutkan berdasar dengan field tertentu.

$result = db_query('SELECT DISTINCT(n.nid), n.sticky, n.title, n.created FROM {node} n INNER JOIN {term_node} tn ON n.vid = tn.vid WHERE tn.tid =1  order by n.nid limit 0,1');

Query yang kedua adalah mengambil teaser (header atau bagian atas suatu page) dengan nid yang diambil dari query pertama.

  $rs=db_fetch_array(db_query("SELECT teaser FROM {node_revisions} WHERE nid=%d", $data->nid));

Sedangkan tid=1 adalah term_id untuk kategori artikel.

Selangkapnya bisa didownload di bawah ini. Untuk menentukan halaman depan mengarah ke modul ini, maka kita harus menseting site configuration ke modul di atas. Karena nama modul ini adalah faace, kita coba masuk ke Administer->Site Information, lalu isikan di default fornt page dengan : face

AttachmentSize
sancang.jpg89.48 KB
face.module.txt2.62 KB
face.info_.txt106 bytes