【发布时间】:2016-03-24 12:28:15
【问题描述】:
我在 ProdutosController 中有这个动作。它渲染 view2 的 itemview 指向 _view2,而 _view2 有一个 DetailView 来显示产品。
public function actionView2()
{
$model = new Produtos();
$dataProvider = new ActiveDataProvider([
'query' => Produtos::find(),
'pagination' => false,
]);
// get the posts in the current page
$posts = $dataProvider->getModels();
// render
return $this->render('view2', [
'dataProvider' => $dataProvider,
'model' => $model,
]);
}
观点2
<?php
use yii\helpers\Html;
use yii\widgets\ListView;
use yii\helpers\Url;
/* @var $this yii\web\View */
/* @var $model app\models\Atividades */
// $this->title = implode('', $cat);
?>
<div class="produtos-view2">
<?php
//use kartik\social\FacebookPlugin;
//echo FacebookPlugin::widget(['type'=>FacebookPlugin::SHARE, 'settings' `=> []]);`
?>
</div>
<?= ListView::widget([
'dataProvider' => $dataProvider,
'itemView' => '_view2',
]); ?>
<br/><br/>
还有_view2作为DetailView里面的:
<?= DetailView::widget([
'model' => $model,
'options' => ['class' => 'detail1-galeria-view2'],
'attributes' => [
// cria um array com a fotografia, em que carrega a path no campo fieldName da bd
[
'attribute'=>'',
//'value'=>$model->foto,
'value'=>Html::a(Html::img(Yii::$app->getUrlManager()->getBaseUrl() . "/" .$model->foto, ['width'=>'192', 'height' => "256"]), $model->foto),
'format' => 'raw',
],
[
'attribute'=>'',
'value'=>$model->nome,
],
[
'attribute'=>'',
'value'=>$model->categoria,
],
[
'attribute'=>'',
'value'=>$model->descricao,
],
[
'attribute'=>'',
'value'=>$model->valor.' '.'€',
],
// info
[
'attribute'=>'',
'format' => 'raw',
'value'=> Html::a(Yii::t('app','Comprar'), Url::toRoute(['contacto/create2'])),
],
],
]) ?>
在另一个项目中,我能够通过在其中渲染 _search.php 并修改 ProdutosSearch 模型在 _view2 中创建一个搜索框。但这是通过 GridView 实现的,该 GridView 直接在小部件内接受 $dataprovider 和 $searchModel。
现在在我的新项目中,我正在努力制作一个搜索输入框来过滤 DetailView 显示的内容(它显示产品的照片、名称、类别等)但无法做到因为详细视图不接受 $dataProvider 数据。
我该如何解决这个问题并使用 DetailView 制作带有搜索框的产品库。
编辑
控制器动作:
public function actionMySearchFunction()
{
$model = new Produtos();
$searchModel = new CategoriasSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider = new ActiveDataProvider([
'query' => Produtos::find(),
'pagination' => false,
]);
// get the posts in the current page
$posts = $dataProvider->getModels();
// render
return $this->render('view2', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
'model' => $model,
]);
}
MySearchFunction.php
<?php
public function MySearchFunction()
{
$post = Yii::$app->request->post();
if (!empty($post)){
$postParam1 = $post['categoria']; // get the value ffrom the filter field submitted)
$query = ProdutosSearch::find()->where(['categoria' => $postParam1]);
$dataProvider = new \yii\data\ActiveDataProvider([
'query' => $query,
]);
$dataProvider->pagination->pageSize=15;
return $this->render('view2', [
'dataProvider' => $dataProvider,
]);
}
} ?>
VIEW2
<?php $form = ActiveForm::begin([
'action' => Url::to(['/produtos/my-search-function']),
'method' => 'get',
'options' => ['class' => 'form-inline form-group form-group-sm col-xs-12'],
'fieldConfig' => [
'template' => "{input}",
],
]); ?>
</div>
<?php echo var_dump(Url::to(['/produtos/my-search-function'])); ?>
<!--<nobr><?= $form->field($model, 'nome')->textInput(['placeholder' => 'Nome']) ?>-->
<nobr>
<?= $form->field($searchModel, 'categoria')->dropDownList(ArrayHelper::map(Categorias::find()->all(), 'categoria','categoria'), ['prompt'=>Yii::t('yii', 'Escolha a categoria...')]) ?>
<?= Html::submitButton(Yii::t('app', 'Pesquisar'), ['class' => 'btn btn-warning']) ?>
</nobr>
<?php ActiveForm::end(); ?>
<div class="user-view">
<?= ListView::widget([
'dataProvider' => $dataProvider,
'itemView' => '_view2',
]); ?>
<br/><br/>
</div>
【问题讨论】:
标签: search filter widget yii2 detailview