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

Joomla! 1.5 serisi için kullanabileceğimiz oldukça basit bir ziyaretçi defteri bileşeni kodlayalım

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:


<?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
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(){
    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))==|| strlen(trim($yorum))==|| !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
    
$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:

<?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= echo $option; ?>&task=kayit">Deftere Yaz</a></p>
        
        if(count($rows)>0){ // eğer ziyaretçi defterimizde bir kayıt varsa
            ?>
            <form action="index.php?option= 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>
                        
                        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"> 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"> 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"> echo JHTML:ate($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"> echo nl2br($rows[$i]->yorum); ?></td>
                            </tr>
                            <tr>
                                <td colspan="4"><hr size="1"/></td>
                            </tr>
                            
                        }
                        ?>
                    </tbody>
                </table>
                <br />
                <!-- ## sayfalandırmayı buraya koyalım ## -->
                <div align="center">  echo $pagenav->getListFooter(); ?></div>
                <!-- ## option ve task değerimizi gizli alan olarak yerleştirelim ## -->
                <input type="hidden" name="option" value=" echo $option ?/>">
                <input type="hidden" name="task" value="goster"/>
            </form>
        
        }
        else{
            ?>
            <p align="center"><i>Ziyaretçi defteri hala boş.</i></p>
            
        }
        ?>
        <br /><br />
        
    }
   
    // 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= 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=" echo $option; ?/>">
            <input type="hidden" name="task" value="kaydet"/>
        </form>
        <br /><br />
        
    }
} ?>



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;

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.

  • Etiketler;
Soner Ekici
1981 yılında Denizli' de doğdu. 1999 yılında başladığı PHP ve MySQL çalışmalarına 2004 yılında Joomla! ile devam etti. Joomla! için çeşitli eklentiler kodladı. <p>Halen Joomla! için aktif olarak eklentiler kodlayan Soner Ekici Afyonkarahisar ili Şuhut ilçesinde pratisyen hekim olarak görev yapmaktadır.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

eline sağlık bu ziyaretçi defterini indirip kendi siteme kurup kullanma gibi şansım varmı acil cevap kaç gündür ziyaretçi defteri arıyorum
Elbette derste yazdığım şeyleri yaparak kendi sitende kullanabilirsin. Yok ben yapamam diyorsan kaynak dosyayı indirdikten sonra zipli paketin içerisindeki install.sql dosyasını phpmyadminden çalıştır, com_defter klasörünü de sitenin components dizini içerisine at.
kendi sitemde denedim gayet güzel çalışıyor tek dezavantajı, defterin phpmyadmin ile kontrol edilmesi, joomla üzerinde de kontrol olsa gayet sade ve güzel bi uygulama. emeğinize sağlık..
kontrol panelinden ziyaretçi defterini seçtiğim zaman 404 - An error has occurred. böyle bir hata alıyorum. sitede gösteremedim yani. (wamp ile local server da çalışıyorum)
bende wamp ve local server ile calisiyorum. 404 - An error has occured hatasi veriyor.Nerde yanlis oluyor

Yukarı Git