question de router...

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] question de router...

    Bonjour à tous,

    Dans le cadre d'une projet, j'ai une structure en baser du type : course -> édition -> compétition. Un exemple : la course c'est le trail de Hazebrouck, l'édition c'est celle de 2020 et j'ai deux compétition : Junior et Senior.

    çà donne donc :
    • trail de Hazebrouck, édition 2020, Compétition junior
    • trail de Hazebrouck, édition 2020, Compétition sénior

    Mon besoin est très simple, je souhaite çà en URL de la forme (en se basant sur les alias hazebrouck pour trail de Hazebrouck)
    • hazebrouck/2020/junior
    • hazebrouck/2020/senior

    J'ai donc regardé le router du composant, adapté le parse pour ajouter des $model->getItemIdByAlias et $model->getItemIdByYear et voila ce que j'obtiens en terme d'URL si j'ai fait une entrée menu "races" pour la liste des courses
    • /races/race/hazebrouck
    • /races/edition/hazebrouck/2020
    • /races/competition/hazebrouck/2020/junior
    Je sais que c'est normal vu que joomla a besoin de connaitre la view (la chose en gras) pour construire l'url.

    Ma question : comment faire pour avoir des URL sans les choses en gras ?
    • /races/hazebrouck
    • /races/hazebrouck/2020
    • /races/hazebrouck/2020/junior

    quitte a refaire le router de ce composant complètement. Pensez-vous que de repenser le parse avec if $view=="races".... pour traiter tout cela peut marcher ?

    Si la réponse est "c'est impossible" ben je suis dans la mouise.

    De mon coté je m'en vais regarder le composants de ecommerce qui doivent déjà gérer cette problématique.

    A bientot,







    Dernière édition par elecoest à 02/01/2020, 13h06

  • #2
    Hello.

    Tu peux t'inspirer de n'importe quel router, la logique est la même.

    C'est à toi de décomposer les blocs SEO selon tes paramètres d'url non SEO.
    Tu peux bien sûr ajouter des paramètres dans l'url non SEO, même s'ils n'ont aucun intérêt dans l'url, sauf pour le SEO, comme le lieu et la saison.

    Il faut aussi rajouter le format de sortie (pdf, html, xlsx, csv).
    Voici un exemple d'affichage des résultats sur un de mes composants...

    D’ailleurs au passage, je constate que je ferai bien de rajouter la saison et la station moi aussi.

    Meilleurs voeux !
    A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
    Rejoignez le Joomla Users Groupe Alsace...
    roland_d_alsace va-t-il devenir roland_du_grand_est ?

    Commentaire


    • #3
      ON est bien d'accord sauf que les router font une lecture par id ou alias. Ce qui donnerait :

      /races/race/hazebrouck
      /races/edition/hazebrouck-2020
      /races/competition/hazebrouck-2020-junior


      deux bémols :

      - les URL ne sont pas en arboresence
      - les URL contiennent la view


      je continue mes investigations...

      Commentaire


      • #4
        Envoyé par elecoest Voir le message
        ON est bien d'accord sauf que les router font une lecture par id ou alias..
        Pourquoi ?

        C'est le lien de menu qui enverra vers le composant, le bon router est donc trouvé.

        Ensuite tu fais ce que tu veux dans ton router.

        Rien ne t’empêche de convertir l'ID et le nom de la vue en un texte dans la methode xxxxBuildRoute de ton routeur.

        Mais il faut que tu sois sûr d'arriver à retrouver ces 2 derniers blocs au retour de l'URL SEO dans la methode xxxParseRoute avoir une règle qui ne génère pas de doublon.

        Si la saison, la station et le regroupement de catégories suffit pour trouver l'id (unique) de l'épreuve et que la demande ne concernera toujours que les résultats (pas la liste des départs ou un classement par clubs par exemple) cela marchera.

        Concernant l'alias, tu le mets ou pas dans l'URL SEO, l'alias est normalement unique (tout au moins dans la catégorie, si c'est la cas on rajoute l'alias de la catégorie).
        Il peut remplacer facilement l'ID
        Dernière édition par roland_d_alsace à 01/01/2020, 13h37
        A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
        Rejoignez le Joomla Users Groupe Alsace...
        roland_d_alsace va-t-il devenir roland_du_grand_est ?

        Commentaire


        • #5
          Roland, on est d'accord sur le fait que je sais tout retrouver

          là où se trouve mon poi t d'achoppement c'est que

          je ne souhaite pas çà :

          /races/race/hazebrouck
          /races/edition/hazebrouck-2020
          /races/competition/hazebrouck-2020-junior

          je souhaite :

          /races/hazebrouck
          /races/hazebrouck/2020
          /races/hazebrouck/2020/junior

          donc comme races est le seul commun, je vais devoir partir sur une view fictive et gérer 3 cas dedans : la course, l'édition et la compétition.

          Je reviens dès que j'ai la solution.

          Commentaire


          • #6
            Envoyé par elecoest Voir le message
            Roland, on est d'accord sur le fait que je sais tout retrouver

            là où se trouve mon poi t d'achoppement c'est que

            je ne souhaite pas çà :

            /races/race/hazebrouck
            /races/edition/hazebrouck-2020
            /races/competition/hazebrouck-2020-junior

            je souhaite :

            /races/hazebrouck
            /races/hazebrouck/2020
            /races/hazebrouck/2020/junior

            donc comme races est le seul commun, je vais devoir partir sur une view fictive et gérer 3 cas dedans : la course, l'édition et la compétition.

            Je reviens dès que j'ai la solution.
            J'ai l'impression que l'on ne se comprend pas.

            Déjà il n'est pas nécessaire d'avoir 3 vues différentes, chaque vue servant à priori pour la sélection du résultat à éditer étape par étape (une vue par étape).

            Une seule vue avec des filtres suffit, surtout que le framework de Joomla fournit les outils pour faire les filtres.

            Regarde l'exemple... que j'ai déjà donné ci dessus, et celui-ci..., j'ai une seule vue pour sélection la discipline, de la période ou du filtre texte (nom de l'épreuve ou de la station), ces filtres étant aussi définissables en paramètres dans les liens de menu.
            Mais comme dit c'est une seule vue qui gère tous les filtres.

            J'aurai pu rajouter la catégorie, mais en ski on a la plupart du temps des évènements composés d'épreuves regroupant des catégories de coureurs.

            Pour en revenir à la notion de vues, dans la logique de programmation de Joomla, il n'y a que 2 types de vues dont les models rattachés héritent de 2 classes du framework :
            • un de type liste d'items, permettant le filtrage et la sélection d'un élément
              dossier de la vue avec le nom terminant avec un "s"
              et dont le model hérite de JModelList
            • un de type item, permettant l'affichage de l'item et selon les droits la création, mise à jour,...
              dossier de la vue avec le nom identique mais sans "s" final
              et dont le model hérite de JModelItem
            Pour les filtres il est assez facile d'utiliser le layout "searchtools" fournit par le framework de Joomla et composé de champs selon la volonté du développeur (voir dans /layout/joomla/searchtools)

            C'est quand même plus facile à gérer et à maintenir qu'une cascade de plusieurs vues différentes.
            Surtout que l'on peut facilement rajouter un filtre en cas de besoin, sans revoir la logique des vues et l’internaute peut choisir ses filtres d'un seul coup ou dans l'ordre qui lui convient.
            C'est la logique de Joomla dans les vues d'admin appliquée au front.

            Ensuite même si tu a 3 views différentes, vue la structure de l'URL SEO que tu veux, celle-ci te permet de déterminer clairement la vue en fonction du nombre de segments.
            Tu peux donc supprimer cette notion de vue dans l'URL SEO et faire des segments différents pour le lieu, la saison et la catégorie de coureurs, conformément à tes besoins.

            A retour pour recalculer l'URL non SEO en fonction du nombre de segments reçu dans la methode ParseRoute du routeur tu sauras retrouver la vue :
            • 1 segment (lieu) = vue race,
            • 2 segments (lieu et saison) = vue édition,
            • 3 segments (lieu, saison et catégorie) = vue compétition.
            Il est donc facile de recalculer $vars['view'] dans la méthode ParseRoute de ton router.php
            Dernière édition par roland_d_alsace à 01/01/2020, 17h57
            A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
            Rejoignez le Joomla Users Groupe Alsace...
            roland_d_alsace va-t-il devenir roland_du_grand_est ?

            Commentaire


            • #7
              roland_d_alsace tu as raison on ne se comprend pas.

              j'avais ta vision avant de rentrer dans le vif du sujet :
              • 1 segment (lieu) = vue race,
              • 2 segments (lieu et saison) = vue édition,
              • 3 segments (lieu, saison et catégorie) = vue compétition.
              sauf que :
              • tu dois aussi gérer des entrées menu de type "Single race"
              • il te fait une entrée de menu tête sinon joomla ne sait pas retrouver le "option" (composant).
              Pour se faire je suis parti sur ce code et çà fonctionne
              Code:
               
               if (empty($segments[0])) {     // c'est une entrée de menu course     $vars['option'] = $activeMenu->option;     $vars['view'] = 'race';     $vars['id'] = $activeMenu->id_race;     return $vars; } else {     $modeledition = T2areaHelpersT2area::getModel('Edition');     $activeMenu->id_edition = $modeledition->getItemIdByYear(str_replace(':', '-', $segments[0]), $activeMenu->id_race);     if (empty($activeMenu->id_edition)) {         // pas d'id_edition, on part donc sur sur la course         $vars['option'] = $activeMenu->option;         $vars['view'] = 'race';         $vars['id'] = $activeMenu->id_race;         return $vars;     } else {         if (empty($segments[1])) {             // une édition sans compétition = on part sur l'édition             $vars['option'] = $activeMenu->option;             $vars['view'] = 'edition';             $vars['id_edition'] = $activeMenu->id_edition;             return $vars;         } else {             $modelcompetition = T2areaHelpersT2area::getModel('Competition');             $activeMenu->id_competition = $modelcompetition->getItemIdByFormat(str_replace(':', '-', $segments[1]), $activeMenu->id_race, $activeMenu->id_edition);              if (empty($activeMenu->id_competition)) {                 $vars['option'] = $activeMenu->option;                 $vars['view'] = 'edition';                 $vars['id_edition'] = $activeMenu->id_edition;                 return $vars;             } else {                 $vars['option'] = $activeMenu->option;                 $vars['view'] = 'competition';                 $vars['id_competition'] = $activeMenu->id_competition;                 $modeledition->setState('edition.id', $vars['id']);                 return $vars;             }         }     } }
              coté code ecommerce c'est virtuemart qui réussi à faire cela avec une vraie arborescence SEO compliant.

              Commentaire


              • #8
                Envoyé par elecoest Voir le message
                ...
                tu dois aussi gérer des entrées menu de type "Single race"
                Ca c'est bien la vue de type "item" qui doit avoir un lien de menu, tout comme tu peux accéder directement à la vue "content" pour afficher directement un article (par exemple).
                Toujours dans la logique de développement de composants Joomla (voir les 2 types de vues dans ma réponse en https://forum.joomla.fr/forum/d%C3%A...53#post2011353)
                Envoyé par elecoest Voir le message
                il te fait une entrée de menu tête sinon joomla ne sait pas retrouver le "option" (composant).
                Oui, mais pour ça il n'y a rien à faire, c'est le framework qui le retrouve via les alias de lien de menu (voir le début de ma réponse en https://forum.joomla.fr/forum/d%C3%A...46#post2011346)
                Dernière édition par roland_d_alsace à 02/01/2020, 11h47
                A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
                Rejoignez le Joomla Users Groupe Alsace...
                roland_d_alsace va-t-il devenir roland_du_grand_est ?

                Commentaire


                • #9
                  j'arrive un peu apres la bataille, mais j'ai du moi meme gerer ce genre d'aborescence avec mon propre composant.
                  j'ai ecrit un article a ce propos, c'est la: https://medium.com/@julien.vonthron/...ls-45b2bf5d7cb

                  Commentaire

                  Annonce

                  Réduire
                  Aucune annonce pour le moment.

                  Partenaire de l'association

                  Réduire

                  Hébergeur Web PlanetHoster
                  Travaille ...
                  X