1.869 kez okundu

Joomla! 1.5 de ziyaretçi defteri yapımı

10 10 1.869 kez okundu incelendi

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))==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
    $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=<?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 ?>">&lt;&lt; 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;

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.

Yoruma kapali.

Barış Ozcan Facebook Sayfasi
Barış Ozcan Twitter