簡體   English   中英

DropDownList在Yii中影響ClistView

[英]DropDownList effects a ClistView in Yii

我對這個Yii框架還很陌生,希望獲得有關此代碼的幫助。 我目前設法得到一個依賴於另一個下拉列表的下拉列表,但是我似乎無法使該下拉列表影響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',
    )));*/
}

查看資料

<!-- 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,它將顯示團隊消息和發送時間。 但是我意識到,如果不重新呈現頁面就無法通過數據提供程序,並且我正努力避免朝那個方向前進。

您可以將您的團隊信息拉到局部視圖中,然后只使用呈現局部視圖就可以將消息僅呈現到您的usig Ajax頁面中。 如果部分視圖名為_teamMessages.php,它將看起來像這樣(未經測試):

$this->widget('zii.widgets.CListView', array(
            'dataProvider'=>$dataProvider,
            'itemView'=>'_viewTeamMessage',
            'id'=>'ajaxListView',
        ));

然后,將您的個人資料視圖修改為如下所示:

<!-- 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);
}

這只會導致重新創建消息窗口小部件,而不是整個頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM