У меня есть действие от контроллера, который предоставляет переменную результата через $this->set('found_products', $data);
. Просмотра страницы products.ctp
разделен на две секции:CakePHP: переменные очищаются при нажатии следующего/приватного
На вершине, форма, в которой пользователь вводит строку для поиска
$found_products
устанавливается для представления.Под ним результаты с разбивкой по страницам отображаются, только если установлен
$found_products
. то естьif (isset($found_products))
.
Когда if (isset($found_products))
правда, я получаю первую страницу, отображаемую ниже формы с поисковой строкой уже в текстовом поле. URL для этого - myapp/controller/products
.
Проблема возникает, когда я перехожу на следующие страницы. URL-адрес становится myapp/controller/action/products:2
, и ни одна из переменных, используемых под myapp/controller/products
, не существует. Похоже, что перемещение на новую страницу очищает все переменные. Ниже приведен код, который я использую для подкачки, и у меня нет правил перенаправления, написанных для этого. Как решить эту проблему?
<div class="paging">
<?php echo $this->Paginator->prev('<< ' . __('previous', true), array(), null, array('class'=>'disabled'));?>
<?php echo $this->Paginator->numbers();?>
<?php echo $this->Paginator->next(__('next', true) . ' >>', array(), null, array('class' => 'disabled'));?>
</div>
Я пытался обойти эту проблему с помощью $ _SESSION в действии (products
) и устанавливать это для вида, но когда я сделал это, `$ this-> Paginator» больше не работал.
Это не работает. На моей первой странице с разбивкой по страницам URL-адрес является «myapp/controller/products», и этот URL-адрес не имеет аргументов. '$ this-> passArgs' также пуст. Есть ли у вас другая идея? – musicliftsme
Я думаю, вы забыли упомянуть метод, который вы используете, чтобы отправить форму. Если вы используете «POST», этот метод не будет работать, потому что параметры поиска недоступны в строке url. Вышеупомянутое решение работает для метода «GET». Но если вы хотите использовать «POST», вам нужно будет использовать javascript, чтобы каждая ссылка на страницы отображала форму со строкой поиска и номером страницы. Но IMHO вам следует использовать метод «GET», так как он позволит вам сохранить результат как закладку. – Vishal
Хм .. ты прав. Благодаря! Мне сейчас проще использовать GET. Я остановлюсь на использовании POST и позже сделаю переадресацию, но я, наконец, понял, как это сделать. Я немного изменил массив параметров из того, что у вас там, -> '$ this-> Paginator-> options ['url'] ['?'] = $ This-> passArgs;', так что следующий после URL-адреса, необходимого для перехода на следующую или предыдущую страницу. – musicliftsme