Question

J'ai une vue d'index qui répertorie les éléments. La liste est longue. J'utilise donc Paginator pour limiter les éléments à 50 pour une vue.

Chaque élément a un " edit " lien qui mène à une vue d’édition avec des entrées / validations / etc. Lorsque ce formulaire est soumis, je redirige l’utilisation vers la vue index.

Jusqu'ici tout va bien, mais voici le hic:

Si un utilisateur se trouve sur la page N de l'index et qu'il clique sur modifier et modifier un élément, je souhaite qu'il soit redirigé vers la page N de l'index. Si je connaissais le numéro de page, je pourrais simplement coller & Quot; / page: N & Quot; à la fin de l'URL, mais je ne sais pas comment obtenir le numéro de page. (N peut être n'importe quel numéro de page, mais surtout & Gt; = 2)

Toutes les idées seraient appréciées.

Était-ce utile?

La solution

Le numéro de page doit faire partie de la variable $ params dans la vue liste. Il suffit de le clouer à la fin du lien de modification et de le gérer à partir de là. Sur la page d'édition, vous aurez besoin d'un moyen de prendre le numéro de page facultatif, de le stocker lors de toute soumission de formulaire et de le renvoyer à la liste avec le même numéro de page.

Autres conseils

J'ai créé un composant qui enregistre la page dans la session. Ensuite, dans le fichier app_controller.php, je vérifie s'il y a quelque chose dans la session pour le modèle utilisé, puis je l'ajoute à l'URL. Si le code du composant vous intéresse, envoyez-moi un message. Je stocke également la commande si l'utilisateur a modifié l'ordre de tri dans la page d'index avant l'édition.

Voir ici pour la source:

Si je comprends bien, ce qui précède convient à l'édition, mais pas à l'ajout. Cette solution devrait fonctionner dans les deux cas:

Dans vos contrôleurs ou dans votre /app/app_controller.php, insérez quelque chose comme ceci pour ajouter:

$insertID = $this->{$this->modelClass}->getLastInsertID();
$page = $this->{$this->modelClass}->getPageNumber($insertID, $this->paginate['limit']);
$this->redirect("/admin/{$controllerName}/index/page:{$page}");

... et quelque chose comme ça pour l'édition:

$page = $this->{$this->modelClass}->getPageNumber($id, $this->paginate['limit']);
$this->redirect("/admin/{$controllerName}/index/page:{$page}");

Dans votre /app/app_model.php, indiquez ceci:

/**
 * Work out which page a record is on, so the user can be redirected to
 * the correct page.  (Not necessarily the page she came from, as this
 * could be a new record.)
 */

  function getPageNumber($id, $rowsPerPage) {
    $result = $this->find('list'); // id => name
    $resultIDs = array_keys($result); // position - 1 => id
    $resultPositions = array_flip($resultIDs); // id => position - 1
    $position = $resultPositions[$id] + 1; // Find the row number of the record
    $page = ceil($position / $rowsPerPage); // Find the page of that row number
    return $page;
  }

J'espère que ça aide!

Fait un simple

$this->redirect($this->referer());

fonctionne?

En vue avec paginateur:

<?php
if ($this->Paginator->hasPage(null, 2)) {   
$pag_Start = $this->Paginator->counter('{:start}');
$pag_End = $this->Paginator->counter('{:end}');
if( $pag_Start == $pag_End ){
$pageToRedirect = $this->Paginator->current('Posts');
}else{
$pageToRedirect= '';
}}?>

Créez un lien vers la page de modification

<?php
echo $this->Form->postLink(
'Edit',
array('action' => 'edit', $subscription['Post']['id']));
?>

Dans le contrôleur:

public function edit($post_id, $pageToRedirect = false){

    //after all editing its done redirect

    if($pageToRedirect){
    // if record was last in pagination page redirect to previous page
    $pageToRedirect = $pageToRedirect -1;
    return $this->redirect(array('action' => 'index/page:'.$pageToRedirect ));
    }else{
    // else redirect to the same pagination page
    $this->redirect($this->referer());          
    }

}
scroll top