我认为这是一个奇怪的问题,但我的情况是,如果我可以将变量传递给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,这样它就不会多次运行查询???
答案 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传递该方法。