Joomla! 1.5 için basit bir ziyaretçi defteri yapalım

'iMuh@fiz

Özel Üye
11 Ağu 2012
11,010
5
31
Bakü
Heralde Joomla! 1.5 serisinde en çok rağbet gören eklentilerden birisidir ziyaretçi defteri bileşenleri. Ama maalesef bu bileşenler genelde düzgün çalışmazlar, ya da istediğimiz gibi olmazlar. Elbette oldukça iyi kodlanmış ve işimizi gören bileşenler var. Bir de kendimiz bir ziyaretçi defteri bileşeni yapalım. Bunun için bir yazı editörü, denemesini yapmak için bilgisayarımızda kurulu bir sunucu (local server) ve tabi ki Joomla! 1.5 paketine ihtiyacımız var.

Eğer bu yazıyı okuyor ve Joomla! ile ilgileniyorsanız zaten Joomla! son sürümü paketiniz ve bilgisayarınızda kurulu easyPHP veya xampp tarzı bir yerel sunucunuz vardır. Eğer yazı editörünüz yoksa ücretsiz olarak kullanabileceğiniz en iyi yazı editörü olarak notepad+ programını tavsiye ederim.

Şimdi elimizde hepsinin olduğunu düşünerek gelin beraber basit bir ziyaretçi defteri bileşeni yapalım. Öncelikle yerel sunucumuzdaki Joomla! kurulu olan dizine girelim ve components klasörü içerisine ?com_defter? adında bir klasör açalım. Bu klasör içerisine de yapacağımız bileşenimizin dosyalarını oluşturacağız.

Daha sonra notepad+ programını açarak yeni bir php dosyası oluşturup bunu UTF-8 olarak com_defter içerisine ?defter.php? adıyla kaydediyoruz. Şimdi bu defter.php dosyasının içerisindeki kodları oluşturalım.


defter.php:

Kod:
<?php // direkt erişimi engelleyelim... defined('_JEXEC') or die ('Restricted access.');  // bu satır ile defter.html.php dosyamızı dahil ediyoruz require_once(JApplicationHelper::getPath('html'));  // uygulanacak task bilgimizi girelim switch($task){     case 'goster':         // eğer task değerimiz 'goster' ise defteriListele() fonksiyonunu çalıştıracağız         defteriListele();         break;         case 'kayit' :         // eğer task değerimiz 'kayit' ise deftereKayit() fonksiyonunu çalıştıracağız         deftereKayit();         break;         case 'kaydet':         // eğer task değerimiz 'kaydet' ise deftereKaydet() fonksiyonumuzu çalıştıracağız         deftereKaydet();         break;      default :         // eğer herhangi bir task değeri yoksa varsayılan olarak defteriListele() fonksiyonu çalışacak         defteriListele(); }
// Bu fonksiyonumuz veritabanından kayıtları alıp bizlere gösterecek
Kod:
function defteriListele(){     global $option, $mainframe;         // Kayıt numarası ve limit değerini alalım     $limit=$mainframe->getUserStateFromRequest( 'global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int' );     $start=JRequest::getVar('limitstart', 0);         // veritabanı bağlantısını yapalım     $db=&JFactory::getDBO();         // veritabanından verilerimizin toplam sayısını alalım     $db->setQuery("SELECT COUNT(*) FROM `#__defter`");     $total=$db->loadResult();         // veritabanındaki tablomuzdan verilerimizi alalım     $db->setQuery("SELECT * FROM `#__defter` ORDER BY `datetime` DESC", $start, $limit);     $rows=$db->loadObjectList();     // hata oluşursa bunu gösterelim     if($db->getErrorNum()){         echo $db->stderr();         return false;     }         // sayfalandırma için gerekli olan Joomla! sınıfını dahil edelim     jimport('joomla.html.pagination');         // sayfalandırma sınıfı için bir nesne oluşturalım     $pagenav=new JPagination($total, $start, $limit);         // HTML_defter sınıfı içerisindeki defteriListele() fonksiyonuna verilerimizi gönderelim     HTML_defter::defteriListele($option, $rows, $pagenav); }  // Bu fonksiyonumuz deftere birşeyler yazmak isteyen kullanıcılara kayıt formunu gösterecek function deftereKayit(){     global $option;         // HTML_defter sınıfındaki deftereKayit() fonksiyonunu dahil edelim     HTML_defter::deftereKayit($option); }
// Bu fonksiyonumuz ile deftere kayıt edilmek istenen veriyi çeşitli süzgeçlerden geçirip veritabanına yazdıracağız function deftereKaydet
Kod:
(){     global $option, $mainframe;         // gönderilen veriyi düzenleyelim     $isim=strip_tags(addslashes(JRequest::getVar('isim')));     $yorum=strip_tags(addslashes(JRequest::getVar('yorum')));     $email=strip_tags(addslashes(JRequest::getVar('email')));         // gösterilecek mesajı hazırlayalım     $message='Ziyaretçi defterine yazdığınız için teşekkürler.'; // mesajımız     $type='message'; //mesaj çeşidimiz     $task='show'; // ziyaretçiyi döndüreceğimiz taskımız         // form içerisinde gönderilen bilgilerin doğruluğunu kontrol edelim     if(strlen(trim($isim))==0 || strlen(trim($yorum))==0 || !eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $email)){         $message='Lütfen formu düzgün doldurunuz!'; // mesajımız         $type='error'; // mesaj çeşidimiz         $task='kayit'; // ziyaretçiyi döndüreceğimiz taskımız     } else{         // veritabanı nesnemizi alalım ve veriyi tablomuza kaydedelim         $db=&JFactory::getDBO();         $db->setQuery("INSERT INTO `#__defter` (`isim`, `email`, `yorum`, `datetime`) VALUES ('".$isim."', '".$email."', '".$yorum."', NOW())");         if(!$db->query()){ // verilerin tabloya kaydedildiğini kontrol edelim             $message='Kayıt işlemi başarısız oldu!'; // mesajımız             $type='error'; // mesaj çeşidimiz             $task='kayit'; // ziyaretçiyi döndüreceğimiz taskımız         }     }
// ziyaretçiyi tanımlanmış mesaj ve mesaj çeşidine göre yönlendirelim
Kod:
$mainframe->redirect("index.php?option=".$option."&task=".$task, $message, $type); }

Şimdi de defter.php ile aynı dizinde olması gereken defter.html.php dosyamızı oluşturalım.

defter.html.php:

Kod:
<?php // direkt erişimi engelleyelim defined('_JEXEC') or die ('Restricted access.');  class HTML_defter{     // ziyaretçi defteri kayıtlarını gösterelim     function defteriListele($option, &$rows, &$pagenav){         ?>         <div class="componentheading">Ziyaretçi Defteri</div>         <p align="right"><a href="index.php?option=<?php echo $option; ?>&task=kayit">Deftere Yaz</a></p>         <?php         if(count($rows)>0){ // eğer ziyaretçi defterimizde bir kayıt varsa             ?>             <form action="index.php?option=<?php echo $option; ?>&task=goster" method="post">                 <table cellpadding="4" cellspacing="0" border="0" width="90%" align="center">                     <tbody>                         <tr>                             <td colspan="4"><hr size="1"/></td>                         </tr>                         <?php                         for($i=0;$i<count($rows);$i++){ // döngümüzü oluşturalım                             ?>                             <tr>                                 <!-- ## her bir kayıtta tekrarlanacak satırlarımız ## -->                                 <td valign="top" align="center" rowspan="3"><?php echo ($pagenav->limitstart + $i +1); ?>.</td>                                 <td valign="top" align="right"><b>İsim</b></td>                                 <td valign="top" align="center">:</td>                                 <td valign="top" align="left"><?php echo $rows[$i]->isim; ?></td></tr>                             <tr>                                 <td valign="top" align="right"><b>Tarih</b></td>                                 <td valign="top" align="center">:</td>                                 <!-- ## veritabanımızdaki tarih görünümünü biraz daha güzelleştirelim ## -->                                 <td valign="top" align="left"><?php echo JHTML::Date($rows[$i]->datetime); ?></td>                             </tr><tr>                                 <!-- ## yorumları gösterelim ve satır başlarına <br> etiketi koyalım ## -->                                 <td valign="top" align="right"><b>Yorum</b></td>                                 <td valign="top" align="center">:</td>                                 <td valign="top" align="left"><?php echo nl2br($rows[$i]->yorum); ?></td>                             </tr>                             <tr>                                 <td colspan="4"><hr size="1"/></td>                             </tr>                             <?php                         }                         ?>                     </tbody>                 </table>                 <br />                 <!-- ## sayfalandırmayı buraya koyalım ## -->                 <div align="center"><?php  echo $pagenav->getListFooter(); ?></div>                 <!-- ## option ve task değerimizi gizli alan olarak yerleştirelim ## -->                 <input type="hidden" name="option" value="<?php echo $option ?/>">                 <input type="hidden" name="task" value="goster"/>             </form>         <?php         }         else{             ?>             <p align="center"><i>Ziyaretçi defteri hala boş.</i></p>             <?php         }         ?>         <br /><br />         <?php     }         // Kayıt formumuzu oluşturalım     function deftereKayit($option){         ?>         <div class="componentheading">Ziyaretçi Defterine Yaz</div>         <p align="right"><a href="index.php?option=<?php echo $option ?>"><< Ziyaretçi Defterine Dön</a></p>         <form action="index.php" method="post">             <table>                 <tbody>                     <tr>                         <td>İsim</td>                         <td>:</td>                         <td><input type="text" name="isim"/></td>                     </tr>                     <tr>                         <td>Email</td>                         <td>:</td>                         <td><input type="text" name="email"/> * <i>E-posta adresiniz gösterilmeyecektir.</i></td>                     </tr>                     <tr>                         <td>Yorum</td>                         <td>:</td>                         <td><textarea name="yorum" cols="50" rows="5"></textarea></td>                     </tr>                     <tr>                         <td> </td>                         <td> </td>                         <td>                             <br />                             <input type="submit" name="submit" value="GÖNDER"/>                         </td>                     </tr>                 </tbody>             </table>             <!-- ## option ve task değerlerimizi gizli alan olarak yerleştirelim ## -->             <input type="hidden" name="option" value="<?php echo $option; ?/>">             <input type="hidden" name="task" value="kaydet"/>         </form>         <br /><br />         <?php     } }

Son olarak bileşenimizin kullanacağı veritabanı tablosunu oluşturalım.  Bunun için kullandığımız yerel sunucunun phpMyAdmin sayfasını açarak SQL  sorgusu bölümünden aşağıdaki sorguyu çalıştırıyoruz.

CREATE TABLE IF NOT EXISTS `jos_defter` (   `id` int(4) NOT NULL AUTO_INCREMENT,   `isim` varchar(65) NOT NULL DEFAULT '',   `email` varchar(65) NOT NULL DEFAULT '',   `yorum` longtext NOT NULL,   `datetime` varchar(65) NOT NULL DEFAULT '',   PRIMARY KEY  (`id`) ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Tabiki bir de şu sorguyu çalıştırmamız gerekiyor;
Kod:
INSERT INTO `jos_components` (`name`, `link`, `menuid`, `parent`, `admin_menu_link`, `admin_menu_alt`, `option`, `ordering`, `admin_menu_img`, `iscore`, `params`, `enabled`) VALUES     ('Ziyaretçi Defteri', 'option=com_defter', 0, 0, 'option=com_defter', 'Ziyaretçi Defteri', 'com_defter', 0, 'js/ThemeOffice/component.png', 0, '', 1);

Birlikte oldukça basit bir ziyaretçi defteri bileşeni yapmış olduk.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.