在CHtml :: listData中运行函数 - yii

时间:2014-10-31 01:00:54

标签: php yii treeview cactivedataprovider yii-chtml

我试图在Yii的下拉列表中列出treview中的值。 所以,我已经有一个函数来连接路径中的树视图(例如primary \ secondary \ terciary。 我调用此函数从数据中传递ID,函数选择父项,从数据库创建列表。

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";}
        ?>

但是现在我想在表单中用路径列表填充一个select。而且我无法在CHtml :: listData中运行函数。 我正在尝试这个模型,没有成功:

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

那么,我做错了什么?我无法管理一种方法,将路径格式的树视图放在值中,与数据库中的id相关联。

我无法想象如何填充ListData中的值,我的HTML会返回ID,但会返回值中的任何数据。

 <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>

韩国社交协会。 (我来自巴西,很抱歉英语)

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

我必须创建另一个函数,从其id中放入ID和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()); ?>

结果是以路径格式的树视图下拉列表。 任何问题,我都可以解释更多。