Bootstrap.widgets.tbgridview Zmienna Długość Kolumn?

Witam,

Korzystam z komponentu bootstrap.widgets.TbGridView i każda kolumna jest pobrana z bazy używająć metody kategorie lub kategorie2:




    $this->widget('bootstrap.widgets.TbGridView', array(

        'id' => 'mytab2',

        'dataProvider' => Miejsce::model()->search(),        

        'template' => "{items}\n{pager}",

         'columns' => array(

            array('name'=>'kategorie',

            'type'=>'raw',

            'value'=>array($this,'kategorie')),

            'columns' => array(

            array('name'=>'kategorie2',

            'type'=>'raw',

            'value'=>array($this,'kategorie2')),




oraz ciało metody:




  public function kategorie() {

        $sql = 'select nazwa_miejsca,sum(ocena) as ocena from tbl_ocena3,tbl_miejsce where  tbl_ocena3.id_miejsce = tbl_miejsce.id and tbl_miejsce.id_kategorie = 10

            group by 1';

        $select = Yii::app()->db->createCommand($sql)->queryAll();

        foreach ($select as $wynik){

            echo $wynik['nazwa_miejsca'];

        }

      

    }



niestety metody poszczególnych kolumn zwracają rózne rezultaty zapytań 1 lub kilka wierszy, jak stworzyć dynamiczną długość kolumn bootstrap.widgets.TbGridView (np. puste wiersze wypełnić tekstem(null) lub grafiką)

Może obrazowo wyjaśnie:




kategorie    |kategorie2    |

Nazwa_miejsca|Nazwa_miejsca |

null         |Nazwa_miejsca |

null         |Nazwa_miejsca |



zmiana ‘dataProvider’ na liczbę max. wyniku sql i where w sql is null then ‘null’?

Pozdrawiam

Jarek

Chodzi o to, że w jednej komórce wyświetlasz więcej niż jedną wartość i chcesz, żeby każda była w osobnej linii, ale żeby przy braku wartości była pusta linia, aby wartości w dwóch kolumnach pasowały do siebie?

Ustawiłeś już typ kolumny na ‘raw’, możesz więc dodawać w wartości kod html. Wstaw po każdej wartości złamanie wiersza ‘<br/>’.

Ustawiłem coś takiego:




foreach ($select as $wynik){

            echo $wynik['nazwa_miejsca'].'<br/>';

        }



ale znacznik <br/> nie rozwiązał sprawy, na wejsciu w widoku tablicy mam 3 wiersze ale to chyba jest powodowane tym że w bootstrap.widgets.TbGridView mam ustawione ‘dataProvider’ => Miejsce::model()->search(), może wystarczyć umiejetnie podpiąć dataProvider i będzie ok?Tylko jak?

Nie wiem co złego w tym, że masz 3 wiersze. Podajesz za mało informacji.

DataProvider przekazany jest prawidłowo, jedyna (drobna) różnica to taka, że powinieneś utworzyć normalny model w scenariuszu ‘search’ i z niego wywołać metodę search():




$miejsce = new Miejsce('search');

$dataProvider = $miejsce->search();



Dzięki temu możesz w modelu ustawić wartości atrybutów, używanych przez metodę search do zbudowania kryteriów.

Ten kod jest działający? Bo z dokumentacji wynika, że typ właściwości value powinien być string, a Ty masz array. Czegoś nie rozumiem? Następnie zaczynasz definiować columns w columns, tak ma być?