Yii Ajax Kullanımı

Merhaba arkadaşlar Yii içinde nasıl ajax kullanacağız konulu kısa bir yazı yazmak istedim.Öncelikle Amacımız sayfamızda bir linke tıklandığında ajax metodu ile başka bir sayfada sorgu yaptırıp yine sorguyu gönderdiğimiz sayfa da ekrana basmayı göstereceğim.Gereksinimler şunlar:

Öncelikle protected/views/muhendislik/bolumler.php sayfamız olsun. Bu sayfada şu kodlarımız yazılacak.


                 <ul>                  

   <li>

		<?php

			echo  CHtml::ajaxLink

			(

				'Link etiket',

				array('muhendislik/bolumbilgi',

				'bolumSeo'=>$bolumSeo),

				array('update'=>'#bolumBilgi')

			) 

		?>

	</li>

</ul>

<div id="bolumBilgi">

	

</div> 



Yukarıda ajaxLink kullandık.ajaxLink metodunun ilk paremetresi label(etiket),ikinci parametre link kısmı ve göndereceğimiz değişkenler,üçünücü parametre ise cevap geldiğinde sayfa da güncellencek HTML DOM nesnesinin #id değeri.Peki ikinci parametre olan muhendislik/bolumbilgi neresi diye sorarsanız.Bunu ise protected/controllers/MuhendislikController.php sayfasına gidecek.

protected/controllers/MuhendislikController.php sayfası içinde aşağıda ki kodlar yazılı olacak.




public function actionBolumbilgi()

	{

		$bolumSeo=$_GET['bolumSeo'];

		$sayfa=$_GET['sayfa'];

                $bolum_bilgi=Yii::app()->db->createCommand(

                'select * from bolumler '

                .'left join bolumdetay on bolumler.bolumID=bolumdetay.bolumID'

                . ' where bolumSeo="'.$bolumSeo.'" LIMIT 1'

            )->queryAll();

                $this->renderPartial('bolumbilgi',array('bolum_bilgi'=>$bolum_bilgi,'sayfa'=>$sayfa));

	}

yukarıda ki kodları kendinize göre düzenleyebilirsiniz ancak kendi yaptığımı açıklamama izin verin.

Öncelikle $GET ile gelen parametreleri karşıladık.Sorgumuzu yazdık ve üretilen sonucu ve bilgileri tekrar protected/views/bolumbilgi.php adında bir sayfaya renderPartial metodu ile gönderdik.renderPartial yapmamızın nedeni çıkan bilgileri html ve css içine gömebilmek.

protected/views/bolumbilgi.php sayfası şu şekilde olacak:


<?php

$veriler=array();

foreach($bolum_bilgi as $bilgi){

        $veriler['bolumIletisim']=$bilgi['bolumIletisim'];

        $veriler['bolumResim']=$bilgi['bolumResim'];

        $veriler['bolumBilgi']=$bilgi['bolumBilgi'];

        $veriler['bolumTarihce']=$bilgi['bolumTarihce'];

        $veriler['bolumMisyon']=$bilgi['bolumMisyon'];

        $veriler['bolumVizyon']=$bilgi['bolumVizyon'];

    }

 ?>

<div class="course-details clearfix" id="bolumBilgi2" >

    <?php 

        

        <img src="<?php echo Yii::app()->baseUrl ?>/images/bolum/<?php echo $veriler['bolumResim'];?>"

             alt="" width="226" height="223" style="float:left;margin:0px 12px;" class="img-responsive">

        <?php echo $veriler['bolumBilgi'];

       

    ?>

</div>	

Eğer renderPartial metodunu kullanmaycak ve ham verileri göndereceksek protected/controllers/MuhendislikController.php sayfası içinde aşağıda ki kodlar yazılı olacak.


public function actionBolumbilgi()

	{

		$bolumSeo=$_GET['bolumSeo'];

		$sayfa=$_GET['sayfa'];

                $bolum_bilgi=Yii::app()->db->createCommand(

                'select * from bolumler '

                .'left join bolumdetay on bolumler.bolumID=bolumdetay.bolumID'

                . ' where bolumSeo="'.$bolumSeo.'" LIMIT 1'

            )->queryAll();

echo $bolum_bilgi;

                #CJSON::encode(array('data'=>$bolum_bilgi))

	}

Örnek için teşekkürler :)

ajaxlink ve ajaxbutton da verileri post ile neden gönderemiyoruz ?

alternatif olarak ajaxlink vs ile uğraşmadan bu şekilde de veri gönderebilmekteyiz,


<button onclick="$.get('<?php echo Yii::app()->createUrl('rapor/uretimduzenlendi');?>', $('#duzenlemeFormu').serialize());">Kaydet</button> 

bunu get ile değil de post la göndermek isterseniz de aşağıdaki kodu kullanabilirsiniz ama ajax requestleri post verileri pek sevmiyor gibi


<button onclick="$.post('<?php echo Yii::app()->createUrl('rapor/uretimduzenlendi');?>', $('#duzenlemeFormu').serialize());">Kaydet</button> 

En güzel php-ajax kullanımı maalesef xajax ta,

şöyle ki;

yii deki ajaxlink te outputun nereye basılacağını önceden belirtmek gerekiyor, halbuki xajax ta form üzerinden sadece ilgili fonksiyon ile php fonksiyonu tetikleniyor, böylece sayıda sınır olmaksınız herhangi bir dive değer yazmak için;


$objResponse->assign('div_id1', 'innerHTML', 'deneme');

$objResponse->assign('div_id2', 'innerHTML', 'deneme');

$objResponse->assign('div_id3', 'innerHTML', 'deneme');

$objResponse->assign('div_id4', 'innerHTML', 'deneme');

şeklinde 4 satır php koduyla divlere yada idsi olan herhangi bir objeye müdahale edebiliyoruz,

fantazi yaparak php içinden xajax üzerinden jquery çalıştırabilirsiniz;


$objResponse->script("$('input:checkbox, input:radio, input:file').uniform();");

herhangi bir inputun değerini değiştirmek için;


$objResponse->assign('fatura_no', 'value', '0.00');

şeklinde çok rahat bir kullanımı mevcut. Ben buna nokta(element) atışı yapma diyorum, 100 tane inputu olan spesifik bir form düşünün, bunun 5 tanesinin değerine, css ine, vesairesine müdahale etmek gerek, yii ile ciddi anlamda uğraştırıcı. Aslında yii geliştiricilerine 2.0 versiyonu için benzer bir destek vermelerini ingilizce bilenler rica ederse 10 numara framework olur. xajax ciddi anlamda süper birşey. web sitelerine çok sağlam aksiyonlar katmayı sağlıyor, ama maalesef geliştirilmiyor, buna rağmen 2007 den beri açık olan bazı sitelerimde hala tıkır tıkır çalışıyor.