Yii кастомный checkboxlist?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
des1roer
Сообщения: 391
Зарегистрирован: 2015.02.06, 17:03
Контактная информация:

Yii кастомный checkboxlist?

Сообщение des1roer »

Задача то вроде простая. Есть таблица ид\предок\имя. Как обычно. Хочу реализовать следующее - вывести чекбокслист с отступом у потомков.

[ ] root
[ ] __ 1.1
[ ] __ 1.2

Но listData не позволяет изменить выводимое поле из базы, может это как-то в checkBoxList правиться?
pegas1981
Сообщения: 35
Зарегистрирован: 2012.05.15, 16:54

Re: Yii кастомный checkboxlist?

Сообщение pegas1981 »

Что мешает пройтись рекурсивно по массиву, добавить отступы и сформировать новую listData?
Аватара пользователя
des1roer
Сообщения: 391
Зарегистрирован: 2015.02.06, 17:03
Контактная информация:

Re: Yii кастомный checkboxlist?

Сообщение des1roer »

ну вот такого монстра создал пока

Код: Выделить всё

$connection = Yii::app()->db2; 
$sql = '
   WITH RECURSIVE temp1 ( p_id,p_parent,p_title,PATH, LEVEL, NAME  ) AS (
    SELECT T1.p_id,T1.p_parent, T1.p_title, CAST (T1.p_id AS VARCHAR (50)) as PATH, 0 , CAST (T1.p_title AS VARCHAR (255)) as NAME
        FROM "SC_Wonder".t_page T1 WHERE T1.p_parent IS NULL
    union
    select T2.p_id, T2.p_parent, T2.p_title, CAST ( temp1.PATH ||\'->\'|| T2.p_id AS VARCHAR(50)) ,LEVEL + 1 ,
    CAST (  \'   \'|| temp1.NAME AS VARCHAR(255))
         FROM "SC_Wonder".t_page T2 INNER JOIN temp1 ON( temp1.p_id= T2.p_parent))
    select * from temp1 where p_parent is not null ORDER BY PATH LIMIT 100   
';
$dataReader = $connection->createCommand($sql)->query();
$rows = $dataReader->readAll();
for ($i = 0; $i < count($rows); $i++)
{  
    if ($rows[$i]['p_parent'] != NULL)
    {
        $calc = $rows[$i]['level'];
        $pad_string = "__";
        $text = $rows[$i]['p_title'];
        $text = str_pad($text, strlen($text) + ($calc), $pad_string, STR_PAD_LEFT);
        $type_list[$rows[$i]['p_id']] = $text;
    } 
}

$arr_bit = array();

echo CHtml::checkBoxList('im_id', $arr_bit, $type_list, array(
    'template' => '{input} {labelTitle}',
    'class' => 'chclass',
        )
);
Ответить