Quantcast
Channel: Grafikart | Derniers Sujets du forum
Viewing all articles
Browse latest Browse all 1542

Défis optimisation fausse pagination

$
0
0

Bonjour les grafikartésiens,

Je viens à vous avec une question d'optimisation et de confort.
Je vais essayer d'être le plus concis possible. o/

Ce que je fais

J'ai crée une fonction qui affiche un à un des chapitres issus d'une base de donnée.
Chapitre 1,
Chapitre 2,
Chapitre 3
...

Le système est grossièrement comme ceci, ce qui donne une fausse pagination :

(Lien vers le chapitre précédent) Texte du chapitre actuel (lien vers le chapitre suivant)

Si cela aide, voici mon controller et ma vue :

class ContextController extends AbstractController
    {
        /**
         * @Route("/context/chapter-{chapter}", name="context.index")
         * @param ContextRepository $contextRepository
         * @param int               $chapter
         * @return \Symfony\Component\HttpFoundation\Response
         */
        public function index(ContextRepository $contextRepository, int $chapter)
        {
            $chapters        = $contextRepository->findAll();
            $current_chapter = $contextRepository->find($chapter);
            $others_chapters = $contextRepository->findRand($current_chapter, 2);

            if (is_null($current_chapter)) :
                return $this->redirectToRoute('context.index', [
                    'chapter' => $contextRepository->find(1)->getId()
                ], 301);
            endif;

            return $this->render('context/index.html.twig', [
                'current' => $current_chapter,
                'others' => $others_chapters,
                'chapters' => $chapters
            ]);
        }
    }
<section class="context-banner">
            {% for chapter in chapters if chapter.id is same as (current.id) %}
                {% if current.id is not same as (loop.index) %}
                    <div>
                        <a href="{{ path('context.index', {'chapter': current.id - 1 }) }}" class="context-arrow">
                            &laquo;
                        </a>
                    </div>
                {% else %}
                    <span class="context-arrow-x">&laquo;</span>
                {% endif %}

                {% if current.id is not same as (chapters|length) %}
                    <a href="{{ path('context.index', {'chapter': current.id + 1 }) }}" class="context-arrow">
                        &raquo;
                    </a>
                {% else %}
                    <span class="context-arrow-x">&raquo;</span>
                {% endif %}
            {% endfor %}
        </section>

Ce que je veux

Mon code marche parfaitement. Mais j'aimerai le rendre plus intelligent qu'une simple incrémentation ou décrémentation de l'ID du chapitre en cours. J'ai peur que si un jour je viens à modifier/supprimer un chapitre, comme la fonction ne fait qu'un bête +1 ou -1, je me retrouve avec un 404 not found entre deux chapitres.
Je viens donc voir si quelqu'un a une idée me permettant de faire une itération plus intelligente dans la liste des chapitres (voire même plus poussé encore où lorsque revient en arrière au chapitre 1, il ramène au dernier chapitre de la liste) plutôt que ce système truqué.

Je vous remercie. :)


Viewing all articles
Browse latest Browse all 1542

Trending Articles