如何在yii2

时间:2015-12-01 01:35:19

标签: yii2 yii2-advanced-app yii2-basic-app

我认为这是一个奇怪的问题,但我的情况是,如果我可以将变量传递给listview模板,那么它可以使我的项目更快。

情况是我将dataProvider传递给下面的listview

<?= \yii\widgets\ListView::widget([
                    'dataProvider' => $dateProvider,
                    'itemView' => 'registerview',
                    'layout' => "{items}",
]);?>

registerview页面上,我显示的是几个表单,每个表单需要emails user注册user每个<?= Html::DropDownList('dropdown', null, ArrayHelper::map(UserEmail::find()->where(['user_id' => Yii::$app->user->id])->all(), 'id', 'email')) ?> 多个表单registerview 。我希望在每个表单的下拉列表中显示它们,以便用户可以为每个表单选择不同的注册电子邮件。

现在我正在使用下面的下拉列表

         <table class="table table-striped table-bordered">
            <thead>
            <tr>
                <th class="col-lg-4 col-md-4 col-sm-4 col-xs-4">User Name</th>
                <th class="col-lg-1 col-md-1 col-sm-1 col-xs-1">Forms</th>
                <th class="col-lg-2 col-md-2 col-sm-2 col-xs-2 text-center">Entries</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td><?= $model['name'] ?></td>
                <td><select class="form-control input-sm" onchange="dropdownvalue(this)" id="<?= $model['id']?>">
                        <option>0</option>
                        <option>1</option>
                    <option>2</option>
                    <option>3</option>
                    <option>4</option>
                </select></td>
                <td class="text-center"><?= $model['entry'] ?></td>
            </tr>
            </tbody>
        </table>
        <div class="form-group hide" id="optionTemplate">
            <table class="table">
                <tbody>
                <tr>
                    <td>
                        <div class="row" id="div<?= $model['id']?>">
                            <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">
                                Emails: <?= Html::DropDownList('dropdown', null,
                                    ArrayHelper::map($emails, 'id', 'name'),['id'=> 'emailsdp'.$model['id']]) ?>
                            </div>

                        </div>
                    </td>
                </tr>
                </tbody>
            </table>
        </div>

这是我的listview模板

std::find

哪个工作正常,但如果我有4个或5个表单,它将运行查询4 5次以获得相同的数据。有没有办法让我可以用value_type传递userEmail,这样它就不会多次运行查询???

1 个答案:

答案 0 :(得分:0)

我在概念上向你解释它可能会对你有所帮助: -

在您的数据中提供写一个查询,该查询将返回email_id的列表,之后将成为您的逻辑。

$email_list = $dataProvider->email_list; // "Facebook user id"
$this->widget('zii.widgets.CListView', array(
        'dataProvider'=>$dataProvider,
        'itemView'=>'_view',
        'itemGroupMax'=>4,
        'viewData'=>array('email_list'=>$email_list,),
));

$email_list您的电子邮件数组中,您可以在列表视图中传递viewdata,因此不会多次加载该查询。

或直接使用viewData传递该方法。