[ask] gimana caranya update CListView & CDetailView via ajax?

agan" master YII sekalian, saya mohon bantuannya buat menyelesaikan masalah saya berikut… :D

saya benar" baru dalam hal framework php, saya benar" newbie, selama ini terlalu sibuk dengan php tradisional, jadi saya mohon maklum kalo pertanyaan saya mungkin nyeleneh, ato apalah, karena saya belum benar" paham dengan YII ini… :)

begini kronologisnya…

saya punya sebuah grid berisi kecamatan, yang mana grid itu kalo diklik datanya (barisnya) akan memunculkan detil dari baris yang diklik. Detil itu muncul pada CJuiTabs dan pada CJuiTabs itu ada CDetalView di tab1 & CListView di tab2. Di mana CDetailView untuk memunculkan detil dari baris yang diklik itu, sedang CListView untuk memunculkan desa apa saja yang ada pada kecamatan tersebut.

lebih jelasnya berikut ini baris coding awut"an buatan saya… :)

di atas ada comment yang dicetak tebal dan berwarna merah, berarti saya sudah mencoba tapi masih gagal. untuk di sini saya mencoba mengirim parameter id untuk detail kecamatan dalam javascript,tapi ternyata tidak bisa.

untuk yang cetak tebal saja harusnya data yang dikirim dinamis, tergantung dari baris grid yang diklik (sama seperti yang dicetak tebal dan berwarna merah).

ada juga comment yang dictak tebal dan berwarna biru, berarti saya belum paham cara pakainya, udah googling tapi kog ga ketemu juga caranya, apa emang saya yang dudul ya :(

pada grid ada ‘selectionChanged’ => ‘CRUD_kecamatan’ maksud saya, dalam fungsi CRUD_kecamatan itu diproses ajaxnya, tapi masih bingung gimana cara manggil ajax lewat fungsi, udah googling berhari" ga ketemu juga nie :unsure:

*coding di atas sudah menampilkan hal yang benar kalo data yang dikirim statis (detil & list yang muncul itu" saja)…

sekian dulu pertanyaan saya agan",mungkin (*pasti) nanti ada kelanjutannya… :)

mohon maaf kalo ada salah kata, dan juga mohon penjelasannya, udah deathline ga selesai" soalnya nie :(

terima kasih banyak agan" sekalian :D

saya pusing ngeliat codenya

tolong codenya di masukin ke {code} {/code}

jgn di quote, orang jadi susah membaca codenya bro

Kalo beda file tulung di pisah juga seklian ini di file mana yang inu dimana…, kayaknya ini topic yang rumit nih… ane ikutan pantengin ah…

he,he,

akhirnya, ada juga yang reply :D

maaf, maklum newbie ;D

ini untuk view nya (msKecamatan.php)




echo CHtml::openTag('div', array('id' => 'divKecamatanDetail', 'style'=>'display:none;'));

echo CHtml::button('_', array('style'=>'margin-left:570px;', 'onclick'=>'jQuery($("#divKecamatanDetail").attr("style","display:none"))'));

$this->widget('zii.widgets.jui.CJuiTabs', array('id' => 'tabs',

    'tabs' => array(

        'Detail Kecamatan' =>

        array('content' => $this->renderPartial('detailKecamatan', array('id'=>"52"), $this)

            , 'id' => 'tabDetail'),

        'Daftar Desa' =>

        array('content' => $this->renderPartial('_listDesa', array('id'=>'52'), $this)

            , 'id' => 'tabList'),

    ),

    // additional javascript options for the tabs plugin

    'options' => array(

        'collapsible' => true,

    ),

    'htmlOptions' => array(

        'style' => 'width:600px;'

    ),

));

echo CHtml::closeTag('div');


array('success'=>'cobaAja()')); // Replace LIST_ID with the ID of the CListView you want to update

echo CHtml::openTag('div', array('class' => 'view'));

$this->widget('zii.widgets.grid.CGridView', array(

    'dataProvider' => $model->search(), 

    'filter' => $model,

    'id' => 'grid_kecamatan',

    'selectableRows' => 1,

    'selectionChanged' => 'CRUD_kecamatan', 

    'columns' => array(

        array(

            'header' => 'No',

            'type' => 'raw',

            'value' => '$this->grid->dataProvider->pagination->currentPage*$this->grid->dataProvider->pagination->pageSize + $row+1', //  row is zero based

        ),

        array(

            'name' => 'kode_wilayah',

            'type' => 'raw',

            'value' => 'CHtml::encode($data->kode_wilayah)'

        ),

        array(

            'name' => 'nama',

            'type' => 'raw',

            'value' => 'CHtml::encode($data->nama)'

        ),

    ),

));

echo CHtml::closeTag('div');


echo CHtml::textField('id');


$this->widget('application.extensions.ajaxform.JAjaxForm',array(

    'formId'=>'recipient-form',

    'options'=>array(

        'dataType'=>'json',

    ),

));


<script type="text/javascript">


    function get_id(tes){

        var tmp = String(tes).split(',');

        return tmp[0];

    }


    function CRUD_kecamatan(target_id){

        var id =$.fn.yiiGridView.getSelection(target_id);

        id = String(id).split(',');

        //id = id.substr(0, id.lastIndexOf('/'));

        $('#id').val(id[0]);


        /*$('#save_btn').attr('disabled', (id > 0 ? false : true));*/

        $('#divKecamatanDetail').attr("style", 'display:block');

        $.getJSON('<?php echo Yii::app()->createUrl("rpd/msKecamatan"); ?>'+'&id='+id[0],

        function(data) {

            $('#tabDetail').html(data.detail);

            //$('#tabList').html(data.list);

        });


        var xyz = jQuery('#id').serialize();

        $.fn.yiiListView.update('listDesa', {

             data: xyz

        });

    }

</script>



ini untuk controllernya (RpdController.php)




public function actionMsKecamatan() {

        if (Yii::app()->request->isAjaxRequest) {

            if (isset($_GET['MsDesa_page'])) {

//                $_GET['MsDesa']['MsDesa_page'] = $_GET['MsDesa_page'];

//                $_GET['MsDesa']['id'] = $_GET['id'];

//                $this->actionMsKecamatan();

//                Yii::app()->end();

            } else {

                $list = $this->renderPartial('_listDesa', array('id' => $_GET['id']), $this);

                $detail = $this->renderPartial('detailKecamatan', array('id' => $_GET['id']), $this);

                $res = array('detail' => $detail

                    , 'list' => $list);

                echo CJSON::encode($res);

                Yii::app()->end();

            }

        }

        $this->actionGuest();

        $model = new MsKecamatan('search');

        $model->unsetAttributes();  // clear any default values

        if (isset($_GET['MsKecamatan']))

            $model->attributes = $_GET['MsKecamatan'];


        $this->render('msKecamatan', array(

            'model' => $model,

        ));

    }



kode di atas adalah kode yang sudah saya modifikasi, setelah googling, ketemu cara update isi div dengan menggunakan fungsi yang seperti ini pada javascript




<script>

$.getJSON('<?php echo Yii::app()->createUrl("rpd/msKecamatan"); ?>'+'&id='+id[0],

        function(data) {

            $('#tabDetail').html(data.detail);

            //$('#tabList').html(data.list);

        });

</script>



tapi jangan lupa menambahkan ini di phpnya (masih dalam satu file view seperti di atas)





$this->widget('application.extensions.ajaxform.JAjaxForm',array(

    'formId'=>'recipient-form',

    'options'=>array(

        'dataType'=>'json',

    ),

));



setelah itu di controller akan diproses, dan hasilnya dikembalikan dengan meng-echo seperti ini (ada di RpdController.php)




echo CJSON::encode($res);



untuk masalah mengupdate div, saya rasa selesai sampai di sini…

tapi masalah baru muncul saat isi div yang diupdate adalah semacam CListView yang memiliki paging.

saya sudah mencoba




<script>

var xyz = jQuery('#id').serialize();

        $.fn.yiiListView.update('listDesa', {

             data: xyz

        });

</script>



tapi gagal terus, isi CListView tidak bisa diupdate, akhirnya saya pakai cara ‘kasar’ yang pake CJSon di atas… ternyata CJSon sendiri bermasalah untuk pagingnya…

sudah coba googling cara untuk mengatur paging CListView, tapi masih belum bisa, bingung di mana penempatan pagingnya CListView…

masalah yang muncul kalo update isi CListView pake CJSon, adalah isi CListView benar terupdate pada saat klik baris tertentu pada grid, tapi saat klik halaman selanjutnya (halaman CListView), yang dilihat pada halaman selanjutnya adalah isi CListView sebelum diupdate, sudah dicoba utak atik masih juga gagal :(

*sebentar saya jelaskan dulu, grid di sini berisi daftar kecamatan, yang kalau diklik perkecamatan akan mengupdate isi CListView yang isinya adalah desa" yang ada pada kecamatan yang diklik tersebut.

mohon bantuannya :-[

terima kasih…

he,he,

monggo ikut nimbrung aja :D

gimana bro? udah ada perkembangan? ane juga menghadapi masalah yang sama

giman dah solve belum??