#yii2 #pjax
Вопрос:
Я использую Yii2, ActiveForm и виджет Yii2 pjax для обработки формы поиска со списком результатов.
Но по причине компоновки я должен разделить этот пакет на две части: форму поиска, которая должна быть расположена в заголовке страницы, и список результатов, который должен быть размещен в середине страницы.
Это означает, что невозможно сделать что-то подобное (псевдокод):
Pjax::begin $form=gt;activeForm::begin.. ActiveForm::end(); ListView::widget... Pjax::end()
Что мне нужно, так это поместить форму ActiveForm в заголовок макета, разместить вигет ListView в центре страницы и сказать pjax: прочитайте ввод из формы, загрузите данные с сервера и замените представление clist. Возможно ли это с помощью встроенных функций виджетов?
У меня это не сработало, может быть, я неправильно понял основную концепцию?
Ответ №1:
Используя gridview (или виджет, который использует SearchModel), вы можете использовать отдельную модель для поиска моделей в заголовке и отображать результаты в представлении gridview, где вы предпочитаете
таким образом, вам понадобится только блок pjax
lt;?= $this-gt;render('_search', ['model' =gt; $searchModel]); ?gt; lt;?php Pjax::begin(); ?gt; lt;?= GridView::widget([ ... ]); ?gt; lt;?php Pjax::end(); ?gt;
для других решений, не основанных на gridview, и когда вам нужно несколько отдельных блоков pjax
Вы можете попробовать использовать именованный блок pjax, используя значение для идентификатора
lt;?php yiiwidgetsPjax::begin(['id'=gt;'pjax-block1']); ?gt; .... .... lt;?php yiiwidgetsPjax::end(); ?gt; lt;?php yiiwidgetsPjax::begin(['id'=gt;'pjax-block2']); ?gt; .... .... lt;?php yiiwidgetsPjax::end(); ?gt;
и если вам нужно, вы можете управлять определенным обновлением с помощью jquery
$.pjax.reload({container: '#pjax-block1', async: false}); $.pjax.reload({container: '#pjax-block2', async: false});