Bonjour à tous,
je suis en train de me réaliser une galerie photo,
et j'aimerais faire un système qui me permet de passer d'un album à un autre facilement,
ça se présenterais dans ce style :
<-- Album paysage // Album actuel // Album sport mécaique -->
( mais stylisé bien sur ;-) )

Je pensais pour cela, faire une requête afin de récupérer les categorie, et le stocker dans $records

        $records = $this->query("
            SELECT id, title, meta_title
            FROM {$this->table}
        ");

cette requète me retourne :

array (size=4)
  0 => 
    object(App\Entity\Photographie_categoriesEntity)[9]
      public 'id' => string '1' (length=1)
      public 'title' => string 'Animaux' (length=7)
      public 'meta_title' => string 'animaux' (length=7)
  1 => 
    object(App\Entity\Photographie_categoriesEntity)[10]
      public 'id' => string '2' (length=1)
      public 'title' => string 'Sport de contact' (length=16)
      public 'meta_title' => string 'sport-de-contact' (length=16)
  2 => 
    object(App\Entity\Photographie_categoriesEntity)[11]
      public 'id' => string '3' (length=1)
      public 'title' => string 'Nature' (length=6)
      public 'meta_title' => string 'nature' (length=6)
  3 => 
    object(App\Entity\Photographie_categoriesEntity)[12]
      public 'id' => string '4' (length=1)
      public 'title' => string 'sport mecanique' (length=15)
      public 'meta_title' => string 'sport-mecanique' (length=15)

je pourrais parcourir le tableau dans un foreach, mais je voudrais qu'il me cible l'album en cours, puis selement me laisser la possibilité d'accéder à l'album précédent ou le suivant.
Le problème, c'est que je voulais placer le curseur de lecture au bon endoit dans le array

current( $records );

Et après faire un next et prev :

next( $records );
prev($records );

Mais si j'ai bien compris ce n'est pas possible de déplacer un curseur dans un array();

Quelqu'un aurait une piste pour m'éguiller ?

D'avnce merci :-)

8 réponses


Carouge10
Réponse acceptée

Bonsoir,

Pourquoi ne pas utiliser la clause LIMIT ?
Et gérer le cas ou tu es sur la 1ère et la dernière "page"

guillaumegomes
Auteur
Réponse acceptée

@Carouge10 ca fonctionne niquel en utilisant le LIMIT, mais il faut le combiner au ORDER BY id pour me avoir a chaque fois la bonne ligne,
voila comment j'ai fait :

        $prev = $this->query("
            SELECT id, title, meta_title
            FROM {$this->table}
            WHERE id < $current_id
            ORDER BY id DESC
            LIMIT 1
        ");

        $next = $this->query("
            SELECT id, title, meta_title
            FROM {$this->table}
            WHERE id > $current_id
            ORDER BY id ASC
            LIMIT 1
        ");

si il y a d'autre soltion peut etre plus propre je suis prenneur :-)

Après quelques recherche la bonne pratique ( je penses ) serais d'utiliser les requete sql en utilisant un : WHERE id < $current_id

        $prev = $this->query("
            SELECT id, title, meta_title
            FROM {$this->table}
            WHERE id < $current_id
        ");

Maintenant le problème, c'est qu'il me retourne tous les élément inférieur à ID
la solution serais d'utiliser un max( id )

        $prev = $this->query("
            SELECT max( id ), title, meta_title
            FROM {$this->table}
            WHERE id < $current_id
        ");

le problème c'est qu'il le retoune dans mon tableau le max( id ) :

array (size=1)
  0 => 
    object(App\Entity\Photographie_categoriesEntity)[10]
      public 'max( id )' => string '1' (length=1)
      public 'title' => string 'Animaux' (length=7)
      public 'meta_title' => string 'animaux' (length=7)

et ça me fait planter les function que j'utilise après

tu peux aussi utiliser BETWEEN en sql pour n'avoir qu'une seul requête

Voila ce que ca donne, vous en pensez quoi ?
Site web

"ce site est là pour vous présenter mon travail"

  • pour la pagination, c'est très bien
  • il faudra voir pour enlever "public" de l'url
  • sur le bloc "contact", il ne faut pas oublier de préciser ce que veut dire *
  • sur ce même bloc, il est embêtant (je trouve) de ne plus avoir le label du champ une fois rempli

merci pour tes remarques, c'est toujours agréable d'avoir des retours, qu'il soit possible ou non.
je suis

Merci pour la correction du texte, et les remarques, je suis d'accord avec tous ce les points, le seul auquel j'avais penses c'etait pour le public dans les URL.

Je vais apporter les modifications rapidement.

Encore merci :-)

avec plaisir
bonne continuation