2009-11-16 6 views
0

Problème: lorsque j'ai un résultat de recherche avec pagination, les liens suivant, prev et les numéros ne conservent pas les paramètres de recherche. Semble être un problème commun.Cakephp 1.2 Paginator et PassedArgs

J'ai cherché partout sur Internet, et enfin je trouve que je dois mettre cette déclaration dans la vue:

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

Cependant, je ne peux pas le faire fonctionner, dois-je faire quelque chose $ this-> passedArgs dans le contrôleur?

S'il vous plaît aider

Merci


code du contrôleur:

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; 



} 

code de la vue:

<?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] 

Répondre

0

semble correct. assurez-vous que passedArgs n'est pas vide. vous pouvez toujours passer un tableau de test à l'url pour vous assurer que cela fonctionne.

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

$ this-> passedArgs devraient être utilisés si vous utilisez passedArgs pour contenir la catégorie et terme de recherche que vous cherchez à savoir params url sous la forme «/catégorie: XXXX/terme: AAAA », etc.

Si vous utilisez juste params normale sans la catégorie « : » ou « terme: » préfixes, vous devez utiliser $ this-> params [ « pass »]

Si vous n'êtes pas de passage de la catégorie et terme dans l'url, alors vous devriez être.

Chaque fois que j'ai un ensemble de résultats que les utilisateurs peuvent filtrer par un terme ou une catégorie de recherche ou autre, je transfère toujours les données de formulaire publiées dans url params et redirige l'utilisateur vers cette url. conditions de pagination.

Ceci est un modèle de conception couramment utilisé et considéré comme la meilleure pratique, car il permet aux utilisateurs d'un lien profond aux résultats de recherche sans avoir à remplir un formulaire. Si vous implémentez une fonctionnalité de recherche de site, j'ai un cakephp search plugin assez complet disponible sur mon github, mais pas encore de documentation, mais jetez un oeil dans le contrôleur de recherche pour avoir une idée de ce que je veux dire.

0

Bonjour J'ai résolu le problème en définissant passArgs d'une manière correcte. Code de travail d'affichage:

Controller:

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; 
} 

Vue:

<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

Je viens d'avoir le même problème, après un peu de jouer ...

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

travaillé pour moi. (J'utilise CakePHP 1.2) Espérons que cela aide ...

Questions connexes