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

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

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>

Tks. (Я из Бразилии, очень жаль англичан)

1

Решение

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

Я должен сделать другую функцию, чтобы поместить в массив идентификатор и путь от его идентификатора.
Поэтому я вызываю эту функцию в 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()); ?>

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]