Apakah Anda sedang belajar membuat script CMS sendiri? Jika ya, rasanya
belum lengkap deh tanpa fitur yang menampilkan daftar artikel yang
terkait dengan sebuah artikel yang sedang dibaca oleh
pengunjung blog. Dengan adanya fitur ini, pengunjung akan diarahkan ke artikel lain yang masih berhubungan dengan artikel yang sedang dibacanya sehingga bisa menambah wawasan lebih bagi mereka. Sedangkan efek positif bagi Anda sebagai pemilik situs adalah meningkatnya impression atau page view situs Anda, dan juga membuat visitor lebih tahan berlama-lama untuk menjelajahi situs Anda.
pengunjung blog. Dengan adanya fitur ini, pengunjung akan diarahkan ke artikel lain yang masih berhubungan dengan artikel yang sedang dibacanya sehingga bisa menambah wawasan lebih bagi mereka. Sedangkan efek positif bagi Anda sebagai pemilik situs adalah meningkatnya impression atau page view situs Anda, dan juga membuat visitor lebih tahan berlama-lama untuk menjelajahi situs Anda.
Apabila Anda menggunakan WordPress atau blogging software yang lain,
maka fitur untuk menampilkian artikel terkait ini bisa langsung ditanam
menggunakan plugin yang disediakan, misalnya YARPP.
Namun, bagi Anda yang membuat CMS sendiri tentunya hal ini menjadi
tantangan tersendiri. Oleh karena itu dalam artikel ini, saya akan
mencoba memaparkan ide untuk membuat modul script yang menampilkan
artikel terkait dengan PHP.
Misalkan kita mempunyai CMS dengan struktur tabel database untuk menyimpan data artikel seperti di bawah ini:
1.CREATE TABLE `artikel` (2.`id` int(11) AUTO_INCREMENT,3.`judul` varchar(100),4.`konten` text,5.`tanggal` date,6.PRIMARY KEY (`id`)7.);
Selanjutnya, kita buat script untuk menampilkan detail isi artikelnya berdasarkan id artikel nya.
artikel.php
01.<?php02.// koneksi ke database03.mysql_connect('localhost', 'username', 'password');04.mysql_select_db('database');05. 06.// membaca id artikel07.$idartikel = abs((int) $_GET['id']);08. 09.// membaca data detail artikel berdasarkan id artikel10.$query = "SELECT * FROM artikel WHERE id = '$idartikel'";11.$hasil = mysql_query($query);12.$data = mysql_fetch_array($hasil);13.?>14. 15.<html>16.<head>17.<title><?php echo $data['judul']?></title>18.</head>19.<body>20.<h1><?php echo $data['judul']?></h1>21.<small><em>Tanggal publikasi: <?php echo$data['tanggal']?></em></small>22. 23.<div>24.<?php echo $data['konten']?>25.</div>26. 27.<div>28.<h3>Artikel Terkait</h3>29.<?php30.include "function.php";31.artikelTerkait($idartikel);32.?>33.</div>34.</body>35.</html>
Script di atas digunakan untuk menampilkan konten dari sebuah artikel
berdasarkan id artikelnya, dimana untuk menampilkan konten suatu artikel
menggunakan URL http://namahost/artikel.php?id=…
Perhatikan perintah
1.$idartikel = abs((int) $_GET['id']);
perintah tersebut digunakan untuk mencegah SQL injection melalui GET method sebagaimana yang dulu pernah saya tulis artikelnya.
Jika kita perhatikan dari script di atas, maka di bawah isi artikelnya ada bagian sbb:
1.<div>2.<h3>Artikel Terkait</h3>3.<?php4.include "function.php";5.artikelTerkait($idartikel);6.?>7.</div>
Bagian tersebut digunakan untuk menampilkan daftar artikel yang terkait
dengan artikel yang sedang dibaca. Untuk menampilkan daftar artikel yang
terkait dengan artikel ber ID $idartikel, saya menggunakan sebuah
function dengan nama artikelTerkait($idartikel) dimana $idartikel adalah
parameternya. Function ini saya letakkan di file function.php yang
terpisah dari script artikel.php. Kalaupun Anda meletakkan functionnya
dalam file yg sama dengan artikel.php juga tidak ada masalah
Selanjutnya kita tinjau apa isi dari function artikelTerkait(). Dalam
contoh ini, keterkaitan artikel yang dimaksud di sini ditinjau dari
kemiripan judul artikelnya. Adapun idenya adalah, kita baca semua judul
artikel yang ada dalam database kecuali artikel yang menjadi acuan
(artikel ber ID $idartikel). Selanjutnya untuk semua judul artikel ini,
kita lihat kemiripannya dengan judul dari artikel yang ber ID $idartikel
ini. Kita bisa melihat kemiripan dari judul artikel ini menggunakan
function similar_text() yang pernah saya bahas di artikel lain tentang uji kemiripan teks.
Kemudian, karena hasil dari penggunakan similar_text() ini berupa angka
dalam bentuk prosentase kemiripan, maka sebaiknya kita membuat semacam
batas minimal prosentase atau threshold, yang nantinya digunakan untuk
memberi batas minimal kemiripannya. Sebagai contoh misalkan daftar
artikel terkait yang ditampilkan hanya artikel yang memiliki tingkat
kemiripan 50% ke atas. Hal ini berfungsi untuk memfilter mana artikel
yang benar-benar mirip atau tidak. Artikel yang jauh dari mirip, akan
memiliki prosentase kemiripan kecil. Tapi besar kecilnya threshold ini
sepenuhnya terserah Anda, karena Andalah yang menentukan.
Hal yang menjadi pemikiran berikutnya adalah, bagaimana jika jumlah
artikel yang terkait itu ada banyak, misalkan ada 100 buah? tentunya
tidak mungkin kita tampilkan semua karena halaman page artikelnya bisa
jadi penuh dengan judul-judul artikel sehingga tidak menarik bagi
pengunjung. Oleh karena itu kita sebaiknya batasi jumlah artikel
terkaitnya. Untuk mengimplementasikan hal ini, setiap judul artikel yang
kemiripannya di atas threshold, maka kita simpan ke dalam sebuah array.
Selama jumlah artikel dalam array tersebut belum memenuhi batas
maksimum jumlah artikel nya, maka judul-judul terkait itu bisa
ditambahkan dalam array. Setelah proses ini selesai, barulah kita
tampilkan list judul artikel terkaitnya yang ada dalam array tersebut.
Nah… dari ide di atas, kita bisa membuat scriptnya sbb:
function.php
01.<?php02. 03.// koneksi ke database04.mysql_connect('localhost', 'username', 'password');05.mysql_select_db('database');06. 07.function artikelTerkait($id)08.{09.// batas threshold 40%10.$threshold = 40;11.// jumlah maksimum artikel terkait yg ditampilkan 3 buah12.$maksArtikel = 3;13. 14.// array yang nantinya diisi judul artikel terkait15.$listArtikel = Array();16. 17.// membaca judul artikel dari ID tertentu (ID artikel acuan)18.// judul ini nanti akan dicek kemiripannya dengan artikel yang lain19.$query = "SELECT judul FROM artikel WHERE id = '$id'";20.$hasil = mysql_query($query);21.$data = mysql_fetch_array($hasil);22.$judul = $data['judul'];23. 24.// membaca semua data artikel selain ID artikel acuan25.$query = "SELECT id, judul FROM artikel WHERE id <> '$id'";26.$hasil = mysql_query($query);27.while ($data = mysql_fetch_array($hasil))28.{29.// cek similaritas judul artikel acuan dengan judul artikel lainnya30.similar_text($judul, $data['judul'], $percent);31.if ($percent >= $threshold)32.{33.// jika prosentase kemiripan judul di atas threshold34.if (count($listArtikel) <= $maksArtikel)35.{36.// jika jumlah artikel belum sampai batas maksimum, tambahkan ke dalam array37.$listArtikel[] = "<li><a href='artikel.php?id=".$data['id']."'>".$data['judul']."</a></li>";38.}39.}40.} 41. 42.// jika array listartikel tidak kosong, tampilkan listnya43.// jika kosong, maka tampilkan 'tidak ada artikel terkait'44.if (count($listArtikel) > 0)45.{46.echo "<ul>";47.for ($i=0; $i<=count($listArtikel)-1; $i++)48.{49.echo $listArtikel[$i];50.}51.echo "</ul>";52.}53.else echo "<p>Tidak ada artikel terkait</p>";54.}55.?>
Mudah bukan membuatnya? Hasil dari script artikel.php?id=… jika dijalankan di browser adalah sebagai berikut:

Nah… selanjutnya Anda bisa kembangkan sendiri script di atas, misalnya
jika di dalam CMS Anda ada semacam kata kunci atau tag, maka artikel
terkait bisa berdasarkan tag tersebut atau kategori artikel. Bisa juga,
list artikel terkait yang muncul disorting dahulu dengan tingkat
kemiripan paling tinggi terletak di urutan paling atas misalnya.
Tidak ada komentar:
Posting Komentar