Salut à toutes et à tous!

J'ai un menu de catégories qui répertorie des produits. Quand je sélectionne une catégorie elle me liste tous les produits qu'elle contient et en fin de page, j'ai ma pagination. Chaque produit est affiché avec une photo miniature qui quand cliqué ouvre la photo en grand avec fancybox.
Le problème avec l'affichage des photos en galerie avec fancybox, c'est que ça affiche les photos contenu dans la page sans tenir compte des autres pages de la pagination. Pour palier à ce problème et avec mes petits moyens, je me suis dit qu'une fois la photo affiché en grand avec fancybox, je mettrais un lien dans la caption qui pointerai vers la page suivante. Donc j'en suis arrivé au code ci-dessous :

$currentPage = $this->request->params'paging']'Product']'page'];
$totalPage = $this->request->params'paging']'Product']'pageCount'];
if($currentPage+1<$totalPage){
    $goToPage = $currentPage+1;
    echo $this->Html->link('Voir page '.$goToPage, array_merge($this->request->params'pass'],$goToPage, array('controller' => 'products', 'action' => 'view')));
}else{
    $goToPage = $totalPage-$totalPage+1;
    echo $this->Html->link('Revenir page '.$goToPage, array_merge($this->request->params'pass'],$goToPage, array('controller' => 'products', 'action' => 'view')));
}

En gros, je veux créer un lien pour aller en page suivante si il y en a une, sinon je retourne en page 1. Le problème que je rencontre ici c'est la fonction array_merge(). Il me dit que $goToPage n'est pas un array. Normal ce n'en ai pas un. Comment je peux faire pour corriger ce problème?

Merci de votre aide!

4 réponses


Salut, tu peut utiliser le transtypage sur ta variable $gotopage car array_merge n'accepte que des tableaux depuis php5.

echo $this->Html->link('Voir page '.$goToPage, array_merge($this->request->params'pass'],(array)$goToPage, array('controller' => 'products', 'action' => 'view')));

vu dans la doc php http://php.net/manual/fr/function.array-merge.php

Salut Ch0c4 et merci pour ton intérêt.

J'avais fais exactement ça avant de poster, j'ai trouver ça sur la doc php sur le même lien, j'aurai du le spécifier :)

Le problème avec cette solution c'est que le premier lien créé ressemble à ça :
http://localhost/cake/products/view/nom-produit/2
Je voudrais en fin à la place du 2 avoir plutôt /page:2 pour respecter mon routing.
Et ensuite quand je clique il me renvoi exactement sur la même page même s'il affiche /2 en fin d'url.

Ensuite si je clique quand même sur ce lien, cette même page affiche de nouveau un lien s'il y a d'autres pages et là il rajoute un /2 de plus à la fin, ça ressemble à ça :
http://localhost/cake/products/view/nom-produit/2/2
Si je clique dessus, il renvoi aussi vers la même page et rajoute un /2 de plus à la fin ce qui en fait 3 au total de /2/2/2.

Bref, casse tête :)

Bon après avoir relu ton problème, ton array_merge me pose problème, pour quoi tu fais sa ? Pourquoi tu fais pas simplement sa

echo $this->Html->link('Voir page '.$goToPage, array('controller' => 'products', 'action' => 'view', $goToPage));

ce qui t'affichera comme lien

<a href="/products/view/"ton numero de page"">Voir page "ton numero de page"</a>

Là pour le coup avec ton array_merge tu essaies d'afficher un tableau dans un lien donc je suppose qu'il t'affiche la première ligne du tableau
c'est à dire

<a href="/"la valeur de ton request->pass"/">Voir page "ton numero de page"</a>

Regarde avec firebug le lien que tu essayes d'accéder et poste le par curiosité, merci

Salut Ch0c4 et merci pour ton intérêt.

Finalement j'ai opté pour la solution simple au lieu de me prendre la tête inutilement. J'utilise tout simplement le next et previous de paginator. Aussi simplement que ça. En plus dans l'array je trouve toutes les infos dont j'ai besoin : nombre total de produits, page courante, nombre de pages,...

Merci pour ton aide en tout cas.