2012-04-20 4 views
0

У меня есть действие от контроллера, который предоставляет переменную результата через $this->set('found_products', $data);. Просмотра страницы products.ctp разделен на две секции:CakePHP: переменные очищаются при нажатии следующего/приватного

  1. На вершине, форма, в которой пользователь вводит строку для поиска $found_products устанавливается для представления.

  2. Под ним результаты с разбивкой по страницам отображаются, только если установлен $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» больше не работал.

ответ

1

Вы можете использовать опции $ this-> Paginator-> для сохранения переданных аргументов в ссылках на страницы. Попробуйте использовать этот код

<div class="paging"> 
    <?php $this->Paginator->options(array('url' => $this->passedArgs)); ?> 
    <?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> 
+0

Это не работает. На моей первой странице с разбивкой по страницам URL-адрес является «myapp/controller/products», и этот URL-адрес не имеет аргументов. '$ this-> passArgs' также пуст. Есть ли у вас другая идея? – musicliftsme

+0

Я думаю, вы забыли упомянуть метод, который вы используете, чтобы отправить форму. Если вы используете «POST», этот метод не будет работать, потому что параметры поиска недоступны в строке url. Вышеупомянутое решение работает для метода «GET». Но если вы хотите использовать «POST», вам нужно будет использовать javascript, чтобы каждая ссылка на страницы отображала форму со строкой поиска и номером страницы. Но IMHO вам следует использовать метод «GET», так как он позволит вам сохранить результат как закладку. – Vishal

+0

Хм .. ты прав. Благодаря! Мне сейчас проще использовать GET. Я остановлюсь на использовании POST и позже сделаю переадресацию, но я, наконец, понял, как это сделать. Я немного изменил массив параметров из того, что у вас там, -> '$ this-> Paginator-> options ['url'] ['?'] = $ This-> passArgs;', так что следующий после URL-адреса, необходимого для перехода на следующую или предыдущую страницу. – musicliftsme

Смежные вопросы