Php DropDownList在Yii中影响ClistView

Php DropDownList在Yii中影响ClistView,php,listview,drop-down-menu,yii,Php,Listview,Drop Down Menu,Yii,我对这个Yii框架还是很陌生,我希望在这段代码方面得到帮助。我目前设法获得一个依赖于另一个dropdownlist的dropdownlist,但我似乎无法使dropdownlist影响ClistView中显示的内容 轮廓控制器 /* add a team message submitted by the coach of the team */ public function actionAddTeamMessage($id) { /* check if team and message

我对这个Yii框架还是很陌生,我希望在这段代码方面得到帮助。我目前设法获得一个依赖于另一个dropdownlist的dropdownlist,但我似乎无法使dropdownlist影响ClistView中显示的内容

轮廓控制器

/* add a team message submitted by the coach of the team */
public function actionAddTeamMessage($id)
{
    /* check if team and message aren't null */
    if(isset($_POST['teamId']['addTeamMessage']))
    {
        try
        {
            /* creates a new message */
            $teamModel = new TeamMessage;
            $teamModel->teamId = $_POST['teamId'];
            $teamModel->content = $_POST['addTeamMessage'];
            $teamModel->sendTime = new CDbExpression('NOW()');
            $teamModel->save();
        }
        catch(Exception $e)
        {
            echo "Unable to save.";
        }
    }
    /* render the profile page for the current user */      
    $user=User::model()->findByPk($id);
    $this->render('profile', array(
        'model' => $user));
}

/* will handle functionality for the user dropdownlist ajax
 * under contructions
 */
public function actionDisplayMessage()
{
    $data = TeamMessage::model()->findAll('teamId=:teamId', array(
        ':teamId'=>(int) $_POST['teamId']
        )
    );

    $data=CHtml::listData($data,'id', 'content');

    echo "<option value=''>Select Message</option>";
    foreach($data as $value=>$content)
        echo CHtml::tag('option', array('value'=>$value),CHtml::encode($content),true);

    //TODO still being tested.
    /* for ClistView still debugging */
    /*$dataProvider=new CActiveDataProvider('Player', array(
        'criteria'=>array(
        'condition'=>'teamId=:teamId',
    )));*/
}
/*添加由团队教练提交的团队消息*/
公共函数actionAddTeamMessage($id)
{
/*检查团队和消息是否不为空*/
如果(isset($\u POST['teamId']['addTeamMessage']))
{
尝试
{
/*创建新消息*/
$teamModel=新的TeamMessage;
$teamModel->teamId=$\u POST['teamId'];
$teamModel->content=$\u POST['addTeamMessage'];
$teamModel->sendTime=new-cdbeexpression('NOW()');
$teamModel->save();
}
捕获(例外$e)
{
echo“无法保存。”;
}
}
/*为当前用户呈现配置文件页*/
$user=user::model()->findByPk($id);
$this->render('profile',数组(
'model'=>$user));
}
/*将处理用户dropdownlist ajax的功能
*在建
*/
公共函数actionDisplayMessage()
{
$data=TeamMessage::model()->findAll('teamId=:teamId',数组(
':teamId'=>(int)$\u POST['teamId']
)
);
$data=CHtml::listData($data、'id、'content');
回显“选择消息”;
foreach($value=>$content形式的数据)
echo-CHtml::tag('option',array('value'=>$value),CHtml::encode($content),true);
//TODO仍在测试中。
/*对于ClistView,仍在调试*/
/*$dataProvider=新的CActiveDataProvider('Player',数组(
“条件”=>数组(
“条件”=>“团队ID=:团队ID”,
)));*/
}
视图配置文件

<!-- Would allow user to access specific team messages and control how much gets display.
     still under construction. -->
    <div class="row">
        <?php 
            echo CHtml::dropDownList("teamId", 'id', Chtml::listData($model->memberOfTeams, 'id', 'teamName'),array(
                'empty'=>'Select Team',
                'ajax'=>array(
                    'type'=>'POST', // request type
                    'url'=>CController::createUrl('DisplayMessage'),
                    'update'=>'#teamMessages', // selector to update
                    'data'=>array('teamId'=>'js:this.value'),
                    )
                )
            ); 
        ?>
        <?php
            echo CHtml::dropDownList('teamMessages','',array(),array('empty'=>'Select Message'));
            /*$this->widget('zii.widgets.CListView', array(
                'dataProvider'=>$dataProvider,
                'itemView'=>'_viewTeamMessage',
                'id'=>'ajaxListView',
            ));*/
        ?>
    </div>


正如您在cListView中看到的。我正在讨论创建一个_viewTeamMessage,它将显示团队消息+发送时间。但是我意识到,如果不重新呈现页面,我将无法传递数据提供者,我正试图避免朝这个方向前进。

您可以将团队消息拉到局部视图中,然后使用渲染局部,使用Ajax将消息仅呈现到页面中。如果部分视图名为_teamMessages.php,则其外观如下(未测试):

然后修改纵断面图,使其看起来像:

<!-- Would allow user to access specific team messages and control how much gets display.
 still under construction. -->
<div class="row">
    <?php 
        echo CHtml::dropDownList("teamId", 'id', Chtml::listData($model->memberOfTeams, 'id', 'teamName'),array(
            'empty'=>'Select Team',
            'ajax'=>array(
                'type'=>'POST', // request type
                'url'=>CController::createUrl('DisplayMessage'),
                'update'=>'.team-messages', // selector to update
                'data'=>array('teamId'=>'js:this.value'),
                )
            )
        ); 
    ?>
    <div class="team-messages">
    <?php 
       $this->renderPartial('_teamMessages',
            array('dataProvider'=>$dataProvider))
    ?>
    </div>
</div>

最后,您将控制器更改为如下所示:

public function actionDisplayMessage()
{
    /* REMOVE
    $data = TeamMessage::model()->findAll('teamId=:teamId', array(
        ':teamId'=>(int) $_POST['teamId']
        )
    );

    $data=CHtml::listData($data,'id', 'content');

    echo "<option value=''>Select Message</option>";
    foreach($data as $value=>$content)
        echo CHtml::tag('option', array('value'=>$value),CHtml::encode($content),true);
    */

    // still being tested.
    $dataProvider=new CActiveDataProvider('Player', array(
        'criteria'=>array(
        'condition'=>'teamId=(int) $_POST['teamId']',
    )));
    $this->renderPartial('_teamMessages', array('dataProvider'=>$dataProvider);
}
公共函数actionDisplayMessage()
{
/*除去
$data=TeamMessage::model()->findAll('teamId=:teamId',数组(
':teamId'=>(int)$\u POST['teamId']
)
);
$data=CHtml::listData($data、'id、'content');
回显“选择消息”;
foreach($value=>$content形式的数据)
echo-CHtml::tag('option',array('value'=>$value),CHtml::encode($content),true);
*/
//仍在测试中。
$dataProvider=新的CActiveDataProvider('Player',数组(
“条件”=>数组(
'条件'=>'teamId=(int)$\u POST['teamId']',
)));
$this->renderPartial('u teamMessages',数组('dataProvider'=>$dataProvider);
}
这只会导致重新创建消息小部件,而不是整个页面

public function actionDisplayMessage()
{
    /* REMOVE
    $data = TeamMessage::model()->findAll('teamId=:teamId', array(
        ':teamId'=>(int) $_POST['teamId']
        )
    );

    $data=CHtml::listData($data,'id', 'content');

    echo "<option value=''>Select Message</option>";
    foreach($data as $value=>$content)
        echo CHtml::tag('option', array('value'=>$value),CHtml::encode($content),true);
    */

    // still being tested.
    $dataProvider=new CActiveDataProvider('Player', array(
        'criteria'=>array(
        'condition'=>'teamId=(int) $_POST['teamId']',
    )));
    $this->renderPartial('_teamMessages', array('dataProvider'=>$dataProvider);
}