Créer une url personnalisée pour un composant avec utilisation d'un "slug"

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

  • [Problème] Créer une url personnalisée pour un composant avec utilisation d'un "slug"

    Bonjour,

    J'ai développé un composant pour créer des newsletters.

    Actuellement si j'écris dans un JRoute : index.php?option=com_newsletter&view=newsletter&id ='.$id
    L'url suivante est générée : /component/newsletter/newsletter/8

    Mon objectif serait d'obtenir l'url suivante : /newsletter/morning/un-titre-article-pretty-url
    Qui correspond à : /nom_de_mon_composant/type_newsletter/titre_newsletter
    et où type_newsletter/titre_newsletter sont des données venant de la base de données.

    J'ai trouvé l'article suivant qui doit correspondre à mon problème mais plusieurs points sont obscurs.
    https://docs.joomla.org/Supporting_S...your_component

    Il semblerait que la première étape soit de créer un alias de menu qui permettrait de faire un lien vers le composant. Néanmoins les seuls alias que je peux créer actuellement permet de faire pointer vers une newsletter spécifique et pas seulement vers le composant. Est-ce que vous auriez des idées?
    http://www.example.com/[menualias]/[view]/[slug]

    Ensuite il parle d'un slug, d'une requête SQL et du router.php mais je ne comprend pas bien comment les différents éléments vont venir s'emboîter.

    Si quelqu'un a un exemple hyper simple mais fonctionnel je suis preneur et vous remercie par avance.

  • #2
    Re : Créer une url personnalisée pour un composant avec utilisation d'un "slug"

    Bonjour,
    dans chaque composant, il y a un router.php.
    voir : MONSITEJOOMLA/components/MONCOMPOSANT/router.php
    dans ce fichier il y a 2 fonctions.
    Code PHP:
    function MONCOMPOSANTBuildRoute(&$query)
    {

    }

    function 
    MONCOMPOSANTParseRoute($segments)



    $query est le tableau des parametres utilisé avec
    Code PHP:
     jRoute::_('index?option=MONCOMPOSANT&view=vue&id=999'); 
    qui dans cette exemple donnera
    view > vue
    id > 999
    option > votre composant, qui dans tous les cas fait qu'on sais que on appel routeur de MONCOMPOSANT

    Pour faire un simple routage dans BuildRoute:

    Code PHP:
            foreach ($query as $key => $value){
                if  (
    $key != 'option')  {
                    if (
    $key != 'Itemid') {
                        
    $segments[]=$key.'/'.$value;
                        unset(
    $query[$key]);
                    }
                }
            }
            return 
    $segments
    ce qui donnera pour 'index?option=MONCOMPOSANT&view=vue&id=999' l'url


    pour le ParseRoute

    Code PHP:
            $total count($segments);
            for (
    $i 0$i $total$i=$i+2) {
                
    $vars$segments[$i] ] = $segments[$i+1];
            }
            return 
    $vars
    pour récuperer les clés et valeur dans $vars, qui seront alors utilisable dans le composant.

    PS: regardez dans Joomla 2.5 pour référence, J3.3 et + utilise une class qui complique la compréhension les choses si vous ne connaissez rien.

    Cordialement,

    Patrick Kohl
    http://www.st42.fr : Astuce et téléchargement d’extension Joomla! et virtuemart
    http://shop.st42.fr Catalogue extentions gratuit et Pro pour Virtuemart et Joomla

    Commentaire


    • #3
      Re : Créer une url personnalisée pour un composant avec utilisation d'un "slug"

      PS2: /component/newsletter > ajoutez un lien de menu dans joomla. Alors le debut (/component/newsletter) sera remplacé par l'alias du menu
      référence et détails : https://docs.joomla.org/J3.x:Develop..._the_site_part
      Dernière édition par electrocity à 20/03/2015, 16h15
      http://www.st42.fr : Astuce et téléchargement d’extension Joomla! et virtuemart
      http://shop.st42.fr Catalogue extentions gratuit et Pro pour Virtuemart et Joomla

      Commentaire


      • #4
        Re : Créer une url personnalisée pour un composant avec utilisation d'un "slug"

        Utilisation avancé :
        Si vous voulez définir des alias, alors il faut ajouter un champs dans votre table mysql qui représente votre alias.
        En général celui-ci s’appelle slug ou alias.
        si vous le faite alors le router devra le chercher dans le la base de donnée. par exemple avec
        SELECT alias from table #__newsletter_item where id=999
        http://www.st42.fr : Astuce et téléchargement d’extension Joomla! et virtuemart
        http://shop.st42.fr Catalogue extentions gratuit et Pro pour Virtuemart et Joomla

        Commentaire

        Annonce

        Réduire
        Aucune annonce pour le moment.

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X