将pjax-wijet分为形式部分和结果部分



我使用Yii2、activeForm和Yii2-pjax小部件来处理带有结果列表的搜索表单。

但由于布局的原因,我不得不将这个包拆分为两部分:搜索表单,它应该位于页面的标题中,结果列表,它应该放置在页面的中间。

这意味着不可能做这样的事情(伪代码(:

Pjax::begin
$form=>activeForm::begin..
ActiveForm::end(); 
ListView::widget...
Pjax::end()

我需要的是将activeForm放在布局标头中,将ListView wiget放在页面的中心,并告诉pjax:从表单中读取输入,从服务器加载数据,并替换clist视图。使用小部件的内置功能,这可能吗?

我没有让它发挥作用,也许我误解了基本概念?

使用gridview(或使用searchModel的小部件(,您可以在页眉中使用一个单独的模型进行modelSearch,并在您喜欢的地方显示gridview面板中的结果

通过这种方式,您只需要一个pjax块

<?= $this->render('_search', ['model' => $searchModel]); ?>
<?php Pjax::begin(); ?>
<?= GridView::widget([
...
]); ?>
<?php Pjax::end(); ?>

对于其他不基于gridview的解决方案,以及当您需要多个seprataed pjax块时

您可以尝试使用id 的值来使用命名的pjax块

<?php yiiwidgetsPjax::begin(['id'=>'pjax-block1']); ?>
.... 
....
<?php yiiwidgetsPjax::end(); ?>    

<?php yiiwidgetsPjax::begin(['id'=>'pjax-block2']); ?>
....
....
<?php yiiwidgetsPjax::end(); ?>    

如果需要,可以使用jquery 管理特定的刷新

$.pjax.reload({container: '#pjax-block1', async: false});
$.pjax.reload({container: '#pjax-block2', async: false});

最新更新