Yii Framework Forum: [ask] gimana caranya update CListView & CDetailView via ajax? - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[ask] gimana caranya update CListView & CDetailView via ajax? mohon bantuannya, udah berhari" dibuat bingung sama hal ini :( Rate Topic: -----

#1 User is offline   wsw36 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 31-March 11
  • Location:Surabaya

Posted 08 April 2011 - 05:48 AM

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... :)

Quote

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"/*"js:($.fn.yiiGridView.getSelection('grid_kecamatan')==undefined?'2':get_id($.fn.yiiGridView.getSelection('grid_kecamatan')))"*/), $this)
, 'id' => 'tabDetail'),
'Daftar Desa' =>
array('content' => $this->renderPartial('_listDesa', array('id'=>'52'), $this)
, 'id' => 'tabList'),
),
'options' => array(
'collapsible' => true,
),
'htmlOptions' => array(
'style' => 'width:600px;'
),
));
echo CHtml::closeTag('div');


echo CHtml::openTag('div', array('class' => 'view'));
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $model->search(), //MsKecamatan::model()->findAll($kecamatan36),
'filter' => $model,
'id' => 'grid_kecamatan',
'selectableRows' => 1,
//'ajaxUpdate'=>'workRequestGrid,titleContainer',
'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)', "mailto:".CHtml::encode($data->email))',
),
),
));
echo CHtml::closeTag('div');

<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(',');
}
</script>

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
0

#2 User is offline   ressaince 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 163
  • Joined: 10-January 11
  • Location:Jakarta

Posted 19 April 2011 - 08:59 PM

saya pusing ngeliat codenya
tolong codenya di masukin ke {code} {/code}
jgn di quote, orang jadi susah membaca codenya bro
take it or leave it
0

#3 User is offline   aqge 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 188
  • Joined: 02-September 10
  • Location:Indonesia

Posted 19 April 2011 - 11:33 PM

View Postressaince, on 19 April 2011 - 08:59 PM, said:

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...
Best Regard
Tidak ada coding yang salah
Yang ada hanyalah Coding yang lebih baik
0

#4 User is offline   wsw36 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 31-March 11
  • Location:Surabaya

Posted 20 April 2011 - 11:54 PM

View Postressaince, on 19 April 2011 - 08:59 PM, said:

saya pusing ngeliat codenya
tolong codenya di masukin ke {code} {/code}
jgn di quote, orang jadi susah membaca codenya bro


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..
0

#5 User is offline   wsw36 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 31-March 11
  • Location:Surabaya

Posted 20 April 2011 - 11:57 PM

View Postaqge, on 19 April 2011 - 11:33 PM, said:

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,,
monggo ikut nimbrung aja :D
0

#6 User is offline   Wiwit Iwan SEP 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 21
  • Joined: 06-April 11
  • Location:Gresik - Indonesia

Posted 07 June 2012 - 02:21 AM

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

#7 User is offline   ahmadroni 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 250
  • Joined: 14-June 09
  • Location:Yogyakarta-Indonesia

Posted 15 June 2012 - 09:18 PM

giman dah solve belum??
Hospital Cost Management System and
Hospital Management Information System
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users