Sesudah lama absen karena kesibukan yang sangat padat (ceileh!), Druid kembali berbagi bagaimana cara membuat block di Drupal.
Studi kasusnya adalah sebuah website Drupal dengan module Blog diaktifkan, dimana artikel ditulis oleh banyak author/penulis. Disini kita akan membuat block untuk menampilkan daftar blog populer (jumlah komentar terbanyak) dan penulis populer (jumlah artikel terbanyak).
Saya membuat contoh kode ini sekaligus dapat langsung digunakan sebagai module yang siap-pakai. Nama module adalah "dqs_populer". Jumlah item yang akan dapat ditampilkan dalam block dapat dikonfigurasi. Silakan download module terlampir
Membuat block ini sangat mudah sekali, cukup dua langkah saja.
Langkah pertama, adalah mendefinisikan block. Dalam module ini, kita akan memiliki 2 block, yaitu: Blog Populer dan Penulis Populer.
Block didefinisikan pada function dqs_populer_block(). Disini akan ditentukan apa saja block yang akan ditampilkan pada halaman Administer Blocks, dan apa function yang akan menghasilkan content setiap block. Struktur kode function ini sedikit membingungkan, tapi tentu saja untuk mudahnya copy paste saja
function dqs_populer_block($op='list', $delta=0) {
// listing of blocks, such as on the admin/block page
switch ($op) {
case 'list':
$block[0]["info"] = "Blog Populer";
$block[1]["info"] = "Penulis Populer";
return $block;
case 'view': default:
switch ($delta) {
case 0:
// set up the block
$block['subject'] = 'Blog Populer';
$block['content'] = _populer_blog();
break;
case 1:
// set up the block
$block['subject'] = 'Penulis Populer';
$block['content'] = _populer_penulis();
break;
}
return $block;
}
}
Langkah kedua, tentu mendefinisikan function yang akan mengisi content setiap block. Disini kita bisa mengakses database, dan menampilkannya dengan menggunakan function dengan prefix "theme_". Dalam kasus ini, kita gunakan fungsi theme_item_list untuk menghasilkan list item yang sesuai dengan theme aktif. Contoh kodenya seperti ini:
function _populer_blog() {
$limit = variable_get('dqs_populer_limit', 10);
$sql = "select a.nid, a.title, b.comment_count
from node a, node_comment_statistics b
where
a.nid=b.nid and
a.type='blog'
order by b.comment_count desc
LIMIT $limit";
$res = db_query($sql);
$rows = array();
while ($data = db_fetch_object($res)) {
$judul = $data->title;
$nid = $data->nid;
$jml = $data->comment_count;
$rows[] = l("$judul", "node/$nid") . "
$jml comments";
}
$output = theme_item_list($rows);
return $output;
}
Selesai! Semoga ini bermanfaat ya!
