Cd Odświeżenie Zii.widgets.grid.cgridview?

Witam,

Skleciłem taką tabelke:




$data1 = CHtml::listData(Wojewodztwa::model()->findAll(), 'id', 'id'); 

$data2 = CHtml::listData(Wojewodztwa::model()->findAll(), 'nazwa', 'nazwa');

$model = Wojewodztwa::model();


//tabelka

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

    'id' => 'grid_id',

    'dataProvider' => $subscriberActiveDataProvider,    

    'filter' => $model,

    //'type' => 'striped bordered',

    'columns' => array(

        //first column     

        array(

            'name' => 'id',

            'value' => '$data->id',

            'filter' => $this->widget('ext.EchMultiselect.EchMultiselect', array(

                'model' => $model,

                'dropDownAttribute' => 'id',

                'data' => $data1,

                'dropDownHtmlOptions' => array(

                    'style' => 'width:378px;',

                    'multiple' => true,

                    'id' => 'id',

                ),

                'options' => array(

                    'noneSelectedText' => '' . Yii::t('EchMultiSelect.EchMultiSelect', 'Wybierz nr') . '',

                    'buttonWidth' => 200, 'ajaxRefresh' => true, 'show' => ['slide', 500],

                    'hide' => ['explode', 500], 'classes' => 'dynamic_multiselect'

                ),

                    ), true

            )

        ),

        // second column   

        array(

            'name' => 'nazwa',

            'value' => '$data->nazwa',            

            'filter' => $this->widget('ext.EchMultiselect.EchMultiselect', array('model' => $model,

                'dropDownAttribute' => 'nazwa',

                'data' => $data2,

                'dropDownHtmlOptions' => array(

                    'style' => 'width:378px;',

                    'multiple' => true,

                    'id' => 'nazwa',

                ),

                'options' => array('buttonWidth' => 120, 'ajaxRefresh' => false, 'show' => ['slide', 500], 'hide' => ['explode', 500], 'classes' => 'dynamic_multiselect'),

                    ), true

            ),

        ),

    ),

));



podpiałem do tej tabelki zdarzenie w kontrolerze SiteController




   public function actionIndex() {        

        $dana = array();

        $criteria = new CDbCriteria;


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

            $dana = $_GET['Wojewodztwa']; 


        $warunek = null;

        $i = 0;

        foreach ($dana as $key => $value) {

            if (!empty($value)) {

                $warunek = $value[$i];

                ++$i;

            }

        }

        $criteria->condition = 'nazwa LIKE :nazwa';

        $criteria->params = array(':nazwa' => $warunek);

        $subscriberActiveDataProvider = new CActiveDataProvider('Wojewodztwa', array(

            'criteria' => $criteria,

        ));

        $this->render('index', array('subscriberActiveDataProvider' => $subscriberActiveDataProvider));

        

    }



no i prawie mi przykład działa ale mam odświeżanie tej tabelki tylko w konsoli firebug cała strona w przeglądarce jest nadal taka sama,jak zmusić aby strona została odświeżana w przeglądarce?

Pozdrawiam

Jarek

Popatrzyłem na Twój kod, nie bardzo rozumiem co chcesz osiągnąć:

  1. do czego ma służyć ten fragment,

$warunek = null;

        $i = 0;

        foreach ($dana as $key => $value) {

            if (!empty($value)) {

                $warunek = $value[$i];

                ++$i;

            }

        }



  1. masz zaznaczone multiselect na id i nazwa, na id masz ajaxrefresh=true na nazwa masz ajaxrefresh=false.

  2. jeżeli ajaxem wybiorę id to gdzie ustawiasz cryteria wyboru ? bo chyba nie w tym miejscu, tu jest tylko sama nazwa:


        $criteria->condition = 'nazwa LIKE :nazwa';

        $criteria->params = array(':nazwa' => $warunek);



  1. jak niby pkt1 i pkt3 obsługują multiselect, coś chyba nie trzyma się "kupy"

Przeanalizuj jeszcze raz kod, napisz co chcesz osiągnąć, według mnie źle obsługujesz kryteria i tworzenie zapytań do CDataProvidera.

Viktor

Pkt1. pobiera wartości z tablicy przesłanej GETem i zapisuje w zmiennej warunek(faktycznie pobranie typu tablicy w GET muszę dopracować),

Pkt2. zmieniłem w obu kolumnach na ajaxrefresh=true,

Pkt3. dodałem ‘id’ do warunków,

Pkt4. Masz rację gdy mam ustawione multiselect to dane są typu tablicy i wtedy tez zapytanie są nie takie jak powinny,

na co jeszcze zwrócić uwagę?

zmieniłem kod actionIndex()




public function actionIndex() {

      '       

        $criteria = new CDbCriteria;

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

            if (isset($_GET['Wojewodztwa']['nazwa']))

                $moja_nazwa = $_GET['Wojewodztwa']['nazwa'];

            if (isset($_GET['Wojewodztwa']['id']))

                $moja_id = $_GET['Wojewodztwa']['id'];

            if (!empty($moja_nazwa))

                $criteria->compare('nazwa', $moja_nazwa);

            if (!empty($moja_id))

                $criteria->compare('id', $moja_id);

        }




        $subscriberActiveDataProvider = new CActiveDataProvider('Wojewodztwa', array(

            'criteria' => $criteria,

        ));

        $this->render('index', array('subscriberActiveDataProvider' => $subscriberActiveDataProvider));

        

    }



ale nadal efekt jest taki że strona się nie odświeża w przeglądarce a w konsoli firebug odświeżanie strony działa

Nie używam osobiście tego rozszerzenia, ale przejrzałem tutorial http://www.yiiframework.com/extension/echmultiselect/ i nie sądzę żeby ajaxRefresh służyło do odświeżania zawartości CGridView zgodnie z tym co deklaruje twórca "This is a simple Wrapper Widget for the jQuery UI MultiSelect" komponent ten ma opcję refresh ale do elementów listy tego właśnie komponentu.

  1. Pokaż var_dump($_GET) i var_dump($_POST) z tego miejsca:

public function actionIndex() {


var_dump($_GET);

var_dump($_POST);

die();

...



  1. Nadal nie rozumiem po co masz dwie listy wyboru, jedną na id a drugą na nazwę, przecież (tak sądzę) w bazie masz tabelę w której do jednego id masz przyporządkowaną jedną nazwę. Wydaje mi się że wystarczy jedna lista wyboru, ale nie wiem co chcesz osiągnąć ?

Pkt.1 tylko var_dump($_GET) wypluwa zawartość taką:





array (size=3)

  'Wojewodztwa' => 

    array (size=1)

      'nazwa' => 

        array (size=1)

          0 => string 'dolnośląskie' (length=14)

  'Wojewodztwa_page' => string '1' (length=1)

  'ajax' => string 'grid_id' (length=7)




Pkt.2 Mam dwie listy wyboru bo mam 2 kolumny i każda lista jest podpiąta na odpowiednia kolumne

Nie wiem w takim razie co może być nie tak.

  1. zrobiłbym test na minimum ustawień z http://www.yiiframework.com/extension/echmultiselect/ na pewno z ajaxRefresh = false

  2. do testow użyłbym tylko jednej listy.

daj znać jak poszło

jak nic nie zdzialasz, podeślij kod na priv to wieczorem popatrzę.

Look at this :

http://www.yiiframework.com/wiki/145/cjuidialog-for-create-new-model/