Запустить функцию внутри CHtml::listData - yii

Я пытаюсь перечислить значения из обзора в раскрывающемся списке в Yii. Итак, у меня уже есть функция для объединения древовидного представления в путь, например (пример, первичный\вторичный\терциарный. Я вызываю эту функцию, передавая идентификатор из данных, и функция выбирает родителей, создавая список из базы данных.

public static function getPath($id) {

        $post=PlanoAssunto::model()->find('id=:id', array(':id'=>$id));

        if ($post->id_pai == null) {
        $row=$post->assunto;
        $data= $row;       
        }
        else {
        $row=$post->assunto;
        $row=PlanoAssunto::getPath($post->id_pai).'/'.$row;
        $data= $row;}

        if (isset($data)) { 
            return $data;     
            }
            else { 
                $data = 'Nulo';
                return $data;  
            }               
}

Это отлично работает в представлении, используя это:

<?php echo $form->labelEx($model,'id_pai');?>

        <?php   if (isset($_GET['id'])){
                echo  PlanoAssunto::model()->getPath($_GET['id']); }
                else { echo "Novo Assunto Principal";}
        ?>

Но теперь я хочу заполнить выбор в форме списком путей. И я не могу запускать функции внутри CHtml::listData. Я пытаюсь использовать эту модель, но безуспешно:

public static function getTypeOptions() {   
    return  CHtml::listData(PlanoAssunto::model()->findAll(),'id','getPath($id)');           
}

Итак, что я делаю неправильно? Я не могу найти способ поместить древовидное представление в формате пути в значение, связанное с его идентификатором в базе данных.

Я не могу понять, как я могу заполнить значения в ListData, мой HTML возвращает идентификаторы, но с любыми данными в значении.

 <select name="Areaxplanoassunto[idAssunto]" id="Areaxplanoassunto_idAssunto">
<option value="1"></option>
<option value="2"></option>
<option value="3"></option>
<option value="4"></option>
<option value="5"></option>
<option value="6"></option>
<option value="7"></option>
<option value="9"></option>
<option value="10"></option>
<option value="11"></option>
</select>

спасибо (Я из Бразилии, извините за английский)


person Eduardo Gonçalves Corrêa    schedule 31.10.2014    source источник


Ответы (1)


Я нахожу решение.

Мне нужно сделать еще одну функцию, чтобы поместить в массив идентификатор и PATH из его идентификатора. Поэтому я вызываю эту функцию в CHtml::listData и все работает.

Это код:

public static function getLista(){
        $models = PlanoAssunto::model()->findAll();  

        foreach($models as $model) {
                $row['id'] = $model->id;
                $row['path'] = PlanoAssunto::getPath($model->id);
                $data[] = $row;
        }       
        if (isset($data)) { 
            return $data;     
            }
            else { 
                $data['id'] = 'Nulo';
                $data['path'] = 'Nulo';
                return $data;  
            }                                             
}

И gettypeoptions берут результат с помощью CHTML::ListData

public static function getTypeOptions() {

    return  CHtml::listData(PlanoAssunto::model()->getLista(),'id','path');           
}

В представлении _form

<?php echo $form->dropDownList($model,'idAssunto', PlanoAssunto::model()->getTypeOptions()); ?>

Результатом является раскрывающийся список с древовидным представлением в формате пути. Любой вопрос, я доступен, чтобы объяснить больше.

person Eduardo Gonçalves Corrêa    schedule 31.10.2014