Cakephp 1.2 Paginator и PassedArgs - PullRequest
       10

Cakephp 1.2 Paginator и PassedArgs

0 голосов
/ 16 ноября 2009

Проблема: когда у меня есть набор результатов поиска с нумерацией страниц, ссылки next, prev и numbers не сохраняют параметры поиска. Кажется, это общая проблема.

Я искал повсюду в интернете, и наконец я обнаружил, что должен поставить утверждение в виде:

$paginator->options(array('url' => $this->passedArgs)); 

Однако я не могу заставить его работать. Должен ли я что-то делать с $ this-> passArgs в контроллере?

Пожалуйста, помогите

Спасибо


код контроллера:

function search($category=null) 
{ 
        $this->paginate['Cat'] = array( 
        'limit' => 10, 
        'order' => array ('Cat.id' => 'desc') 
        ); 


      $conditions = array('Cat.category' => $this->data['Cat'] 
['category']); 
      $this->set( 'data', $this->paginate('Cat', $conditions ) ); 
      $this->render( 'index_ar' ); 


      return; 



} 

смотреть код:

<?php 
$paginator->options(array('url' => $this->passedArgs)); 
echo $paginator->numbers( ); 
?> 


<table class='grid'> 
<tr> 
<th><?php echo $paginator->sort('ID', 'id'); ?></th> 
<th><?php echo $paginator->sort('Nome', 'name'); ?></th> 
<th><?php echo $paginator->sort('Categoria', 'category'); ?></th> 
<th>Foto</th> 
<th><?php echo $paginator->sort('Stato', 'status'); ?></th> 
<th width='25%'></th> 
</tr> 
        <?php $i = '0'; $count = '1';?> 
        <?php foreach ($data as $cats):  ?> 
                <?php $class = (is_int($i/2)) ? 'data-grid-row-1' : 'data-grid- 
row-2';?> 
                <tr class="<?php echo $class?>"> 
                        <td><?php echo $cats['Cat']['id'] ?></td> 
                        <td><?php echo $cats['Cat']['name'] ?></td> 
                        <td><?php echo $cats['Cat']['category'] ?></td> 
                        <td style='width:25px'> 


[cut] 

Ответы [ 4 ]

1 голос
/ 17 ноября 2009

$ this-> passArgs следует использовать, если вы используете passArgs, чтобы содержать категорию и поисковый запрос, который вы ищете, то есть параметры URL в форме "/ category: XXXX / term: YYYY" и т. Д.

Если вы просто используете обычные параметры без префиксов 'category:' или 'term:', вам нужно использовать $ this-> params ['pass']

Если вы не передаете категорию и термин в URL-адресе, тогда вам следует.

Всякий раз, когда у меня есть результирующий набор, который пользователи могут фильтровать по поисковому запросу или категории или по чему-либо, я всегда передаю опубликованные данные формы в параметры URL-адреса и перенаправляю пользователя на этот URL-адрес, затем беру параметры из URL-адреса для заполнения условий для нумерации страниц.

Это часто используемый шаблон проектирования, который считается оптимальным, поскольку он позволяет пользователям получать глубокие ссылки на результаты поиска, не заполняя форму.

Если вы реализуете функцию поиска по сайту, у меня есть довольно полный поисковый плагин cakephp , доступный на моем github, но документации пока нет, но посмотрите в контроллере поиска, чтобы понять, что я имею в виду.

0 голосов
/ 05 марта 2010

У меня просто была такая же проблема, после небольшой игры ...

<?php $paginator->options(array('url' => $this->params['named'])); ?>

работал на меня. (Я использую CakePHP 1.2) Надеюсь, это поможет ...

0 голосов
/ 18 ноября 2009

Здравствуйте, я решил проблему, установив правильные значения параметра passArgs. Размещать рабочий код:

Контроллер:

function search()
{
    $category = 'All';

    //debug( $this->passedArgs );
    //debug( $this->params);
    //debug( "form categ: " . $this->data['Cat']['category']) ;


    $conditions = array();

    // if category is passed with a submit...
    if ( isset( $this->data['Cat']['category'] ) )
      $category = $this->data['Cat']['category'];
    // if category is passed through paginating urls...
    if ( isset( $this->passedArgs['category'] ) )
      $category = $this->passedArgs['category'];

    // build conditions

    if ( $category != 'All')
      $conditions = array ( 'Cat.category' => $category );

    //set passedArgs for building paginating url in a correct way    
    if ( !isset( $this->passedArgs['category'] ) ) 
      $this->passedArgs['category'] = $category ;  
    $this->set( 'data', $this->paginate('Cat', $conditions ) );    
    $this->render( 'index_ar' );    
    return;
}

Вид:

<center>
<h2>heading</h2>

<?php echo $form->create( 'Cat', array('action' => 'search')) ?>
<table border="0">
<td>Category</td>
<td valign="top">
<?php echo $form->input('category', 
array( 
'label' => false, 
'options' => 
array(
'all' => 'All',
'cat1' => 'Category1'   
)
) ); ?>
</td>
</tr>
-->
<tr><td colspan="2" valign="top"><?php echo $form->end('Search'); ?></td></tr>
</tr>
</table>
<hr />
<?php $paginator->options(array('url' => $this->passedArgs ));?>
<?php echo $paginator->counter( array('format' => 'Page %page% of %pages%, record  %current% on %count%'));?>
<br/>
Pages: <?php echo $paginator->numbers( ); ?>
<br/>
<?php
if ( count($data) == 0 )
    echo "<p style='text-align:center'>No record found.</p>";
else
{
?>
<table class='grid'>
<tr>
<th align="left"><?php echo $paginator->sort('ID', 'id'); ?></th>
<th align="left"><?php echo $paginator->sort('Name', 'name'); ?></th>
<th align="left"><?php echo $paginator->sort('Category', 'category'); ?></th>
<th align="left">Foto</th>
<th align="left"><?php echo $paginator->sort('Status', 'status'); ?></th>
<th width='17%'></th>
</tr>
[...]
0 голосов
/ 16 ноября 2009

кажется правильным. удостоверьтесь, что пройденный не пуст. Вы всегда можете передать тестовый массив в URL, чтобы убедиться, что он работает.

$paginator->options(array('url' => array('a','b'))); 
...