Aide pour la réécriture d'URL

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

  • Aide pour la réécriture d'URL

    Bonjour à tous !

    Comme il est dit dans le titre, j'aimerais avoir un peu d'aide sur la réécriture d'URL.

    Voici l'URL "non SEF" qui pilote mon composant : "index.php?option=com_vernitheque&cat=claire&name= vernis-uno&Itemid=152".

    J'ai déjà fait la moitié du boulot puisque j'ai réussi à réécrire l'URL en SEF grâce à mon fichier "rooter.php" et à "JRoute::_()", ce qui donne bien "http://localhost/lafoliedesvernis/vernitheque/claire/vernis-uno.html".

    Par contre lorsque j'accède au contenu via cette adresse SEF je tombe sur une erreur 404 "Catégorie introuvable",
    logique puisque Joomla cherche à utiliser le composant "com_content" au lieu de "com_vernitheque".

    J'aurai donc voulu savoir comment faire en sorte que Joomla accède au bon composant,
    sachant que je ne suis même pas sûr de savoir comment il fait pour décoder les URL's,
    est ce que quelqu'un peut me mettre sur la piste SVP (fichier à créer, méthode utilisée par Joomla,...) ??

    Merci d'avance et Bonne semaine à toutes et tous !!

    MICKAEL


    PS : je vous met le code de mon fichier "router.php"

    Code PHP:

    function VernithequeBuildRoute(&$query) {
        
    $segments = array();

        if(isset(
    $query['name'])) {
            
            
    $segments[0] = $query['cat'];
            
    $segments[1] = $query['name'];
            unset(
    $query['cat']);
            unset(
    $query['name']);
        }
        return 
    $segments;
        
    }

    function 
    VernithequeParseRoute($segments) {
            
    $vars = array();
            
    // Différentes choses essayées pour éviter l'erreur 404
        
    $vars['option'] = 'com_vernitheque';
        
    $vars['view'] = 'vernitheque';
            
    $vars['cat'] = $segments[0];
        
    $vars['name'] = $segments[1];
        

        return 
    $vars;


  • #2
    Re : Aide pour la réécriture d'URL

    N'ayant toujours pas trouvé de solution, je me permet de déterrer ce post... merci .

    Commentaire


    • #3
      Re: Aide pour la réécriture d'URL

      Essai le composant simple routeur
      A+
      Sent from my GT-N7100 using Forum Joomla.fr mobile app

      Commentaire


      • #4
        Re : Aide pour la réécriture d'URL

        Merci Michel, mais dans le contexte mon but est d'apprendre à faire un composant,
        donc je dois me passer d'un autre composant

        Commentaire


        • #5
          Re : Aide pour la réécriture d'URL

          Je pense que ton router n'est pas utilisé par joomla

          Ajoute au niveau de ton controlleur qui doit être à la racine du dossier de ton composant
          vernitheque.php

          require_once (JPATH_COMPONENT.DS.'router.php');
          Christophe
          http://www.webcrea.fr

          Commentaire


          • #6
            Re : Aide pour la réécriture d'URL

            Re,

            Désole pour ce retour très tardif, cette fois si il faut que je règle mon problème très urgemment ...

            Bien j'ai revu l’ensemble de mon "router.php", tout est OK, j'ai bien ajouter la ligne "require_once (JPATH_COMPONENT.'/router.php'); "
            au fichier "vernitheque.php".

            Malgré ça Joomla ce borne à vouloir afficher le contenu du composant COM_CONTENT,
            exemple si je renvois l'url suivante :
            http://localhost/lafoliedesvernis/ve...es/3-orly.html, Joomla va m'afficher l'article yant l'ID 3 plutot que de m'afficher la fiche marque ayant pour ID 3. Je sens que je touche au but, il doit manquer une ligne de code quelque part mais je ne vois pas quoi... qu'est ce qui fait que Joomla va utuliser MON router et pas celui du "com_content" ??

            Je remet le code de mon router si certain veulent le voir :
            Code PHP:
              defined('_JEXEC') or die('Restricted access');

              function 
            VernithequeBuildRoute( &$query )
              {
                
            $segments = array();

                if (isset(
            $query['view'])) {
                    
            $segments[0] = $query['view'];
                      unset(
            $query['view']);
                  };

                if (isset(
            $query['id'])) {
                         
            $segments[1] = $query['id'];
                      unset(
            $query['id']);
                  };

                return 
            $segments;
              } 
            // End VernithequeBuildRoute function
              
              
            function VernithequeParseRoute$segments )
              {
                
            $vars = array();
                
                if (
            count($segments) > 0) {

                      
            $vars['view'] = $segments[0];
                  switch (
            $vars['view']) {
                    case 
            'all':
                          
            $catid explode(':'$segments[1]);
                          
            $vars['catid']= (int) $catid[0];
                        break;
                    case 
            'category':
                          
            $vars['id']   = (int) $segments[1];
                        break;
                    case 
            'marques':
                          
            $id   explode(':'$segments[1]);              
                          
            $vars['id']= (int) $id[0];        
                        break;
                    case 
            'revendeurs':
                          
            $id   explode(':'$segments[1]);              
                          
            $vars['id']= (int) $id[0];        
                        break;
                    case 
            'vernis':
                          
            $id   explode(':'$segments[1]);              
                          
            $vars['id']= (int) $id[0];        
                        break;
                    case 
            'configuration':
                          
            $id   explode(':'$segments[1]);              
                          
            $vars['id']= (int) $id[0];        
                        break;
                    case 
            'panel':
                          
            $id   explode(':'$segments[1]);              
                          
            $vars['id']= (int) $id[0];        
                        break;

                  };
                  
                } else {
                  
            $vars['view'] = $segments[0];
                } 
            // End count(segments) statement

                
            return $vars;
              } 
            // End VernithequeParseRoute 
            Merci pour votre aide j'en peu plus de ce problème... et j'aimerais surtout savoir QUAND joomla sait quelle extension il doit charger.

            Commentaire


            • #7
              Re : Aide pour la réécriture d'URL

              Bien j'ai un peu avancé ce qui me permet d'apporter une précision supplémentaire :

              il ne s'agit apparemment pas d'un problème de "router", j'ai étudier celui du "com_content", notamment les infos qu'il renvoi (l'array $vars).

              En l’occurrence l'array $vars renvoyé par le "router" du "com_content" est composé de l'index "view" (string), de l'index "id" (int), et de l'index "catid" (int) si il y en a une. J'ai donc fait en sorte que le "router" de mon composant renvoie la même chose, et ce le cas car si je fais un var_dump de $vars sur la page de destination j'ai bien les données renvoyées qui s'affiche, mais les données chargées sont celles du "com_content", il s'agit bien d'un problème d'extension !! Joomla ne charge pas la bonne extension il ne va pas lire la bonne table... de quoi ca peut venir ?? de l'item ID ?? du lien de menu ??

              On dit tout le temps sur les forums "aide toi et le ciel t'aidera", et bien j’attends un coup de pouce des dieux du développement Joomla !!

              Commentaire


              • #8
                Re : Aide pour la réécriture d'URL

                ton router est parfait comme je te l'ai déjà dit.

                as-tu testé en direct en tapant le lien...

                joomla se base sur $option(dans la requête) pour charger vernitheque.php qui instancie le contrôleur, le router...etc et passe la main au contrôleur qui, en général, exécute $task et "lance" la vue adéquat, c'est le principe du MVC

                fais voir ton contrôleur
                Christophe
                http://www.webcrea.fr

                Commentaire


                • #9
                  Re : Aide pour la réécriture d'URL

                  Bonsoir Christophe,

                  Oui j'avais essayé en tapant l'URL NON SEF et sa fonctionne bien, les éléments chargés sont bien ceux de mon composant.

                  Voici le code de mon Contrôler :

                  Code PHP:

                  defined
                  ('_JEXEC') or die('Restricted access');

                  jimport('joomla.application.component.controller');

                  require_once(
                  JPATH_COMPONENT.DS.'router.php'); 

                  /**
                   * Variant Controller
                   *
                   * @package    
                   * @subpackage Controllers
                   */
                  class VernithequeController extends JControllerLegacy
                  {

                      protected 
                  $_viewname 'item';
                      protected 
                  $_mainmodel 'item';
                      protected 
                  $_itemname 'Item';    
                      protected 
                  $_context "com_vernitheque";
                      
                  /**
                       * Constructor
                       */
                           
                      
                  public function __construct($config = array ()) {
                          
                          
                  parent :: __construct($config);

                          if(isset(
                  $config['viewname'])) $this->_viewname $config['viewname'];
                          if(isset(
                  $config['mainmodel'])) $this->_mainmodel $config['mainmodel'];
                          if(isset(
                  $config['itemname'])) $this->_itemname $config['itemname']; 

                          
                  JRequest :: setVar('view'$this->_viewname);

                      }

                      public function 
                  display() {
                          
                          
                  $document =& JFactory::getDocument();
                      
                          
                  $viewType    $document->getType();
                          
                  $view = & $this->getView($this->_viewname,$viewType);
                          
                  $model = & $this->getModel($this->_mainmodel);
                      
                          
                  $view->setModel($model,true);        
                          
                  $view->display();
                      }
                      

                  }
                  // class 
                  Pour info l'Itemid est bien transmis entre les 2 pages,
                  tout comme l’ensemble des variables de requete, je pense que c'est donc bien mon composants qui ne renvois pas correctement ces infos à Joomla.

                  Code PHP:
                  //Recupere les Infos
                  $app    JFactory::getApplication();
                  $menu    $app->getMenu();
                  $item    $menu->getActive();
                  var_dump($item);

                  //Infos présentes sur la page d'arrivé (résulat du var_dump())

                      
                  object(stdClass)[128]
                        public 
                  'id' => string '152' (length=3)
                        public 
                  'menutype' => string 'mainmenu' (length=8)
                        public 
                  'title' => string 'Vernitheque' (length=11)
                        public 
                  'alias' => string 'vernitheque' (length=11)
                        public 
                  'note' => string '' (length=0)
                        public 
                  'route' => string 'vernitheque' (length=11)
                        public 
                  'link' => string 'index.php?option=com_vernitheque&view=featured&sample=&mytextvalue=Some text' (length=76)
                        public 
                  'type' => string 'component' (length=9)
                        public 
                  'level' => string '1' (length=1)
                        public 
                  'language' => string '*' (length=1)
                        public 
                  'browserNav' => string '0' (length=1)
                        public 
                  'access' => string '1' (length=1)
                        public 
                  'params' => 
                          
                  object(JRegistry)[150]
                            protected 
                  'data' => 
                              
                  object(stdClass)[151]
                                ...
                        public 
                  'home' => string '0' (length=1)
                        public 
                  'img' => string '' (length=0)
                        public 
                  'template_style_id' => string '0' (length=1)
                        public 
                  'component_id' => string '10067' (length=5)
                        public 
                  'parent_id' => string '1' (length=1)
                        public 
                  'component' => string 'com_vernitheque' (length=15)
                        public 
                  'tree' => 
                          array
                            
                  => string '152' (length=3)
                        public 
                  'query' => 
                          array
                            
                  'option' => string 'com_vernitheque' (length=15)
                            
                  'view' => string 'featured' (length=8)
                            
                  'sample' => string '' (length=0)
                            
                  'mytextvalue' => string 'Some text' (length=9
                  Juste comme ca, est ce qu'il est possible que la présence de LA VARIABLE "mytextvalue" y soit pour quelque chose dans mon problème ??
                  Dernière édition par Soundboy39 à 03/02/2013, 11h03 Raison: Ajout infos

                  Commentaire


                  • #10
                    Re : Aide pour la réécriture d'URL

                    ce qui m'étonne c'est le view=featured qui est un reliquat de ta copie du composant com_content

                    pourquoi extends JControllerLegacy et non JController ?
                    Christophe
                    http://www.webcrea.fr

                    Commentaire


                    • #11
                      Re : Aide pour la réécriture d'URL

                      Salut,
                      pourquoi extends JControllerLegacy et non JController ?
                      parce que dans (par ex) :
                      /libraries/cms/controller/legacy.php (J! 2.5.8)
                      Code PHP:
                      defined('JPATH_PLATFORM') or die;

                      jimport('joomla.application.component.controller');

                      /**
                      * Alias to JController for forward compatability.
                       *
                       * @package     Joomla.Libraries
                       * @subpackage  Controller
                       * @since       2.5.5
                       */
                      class JControllerLegacy extends JController
                      {

                      Cite line 4 : * Alias to JController for forward compatability.
                      La "legacy" est déjà en place pour la compat 3.0
                      Un message d’erreur sur votre site Joomla ... ayez le reflexe de consulter lla base de connaissance : https://kb.joomla.fr

                      Ce forum, vous l'aimez ? il vous a sauvé la vie ? Vous y apprenez chaque jour ? Alors adhérez à l'AFUJ https://www.joomla.fr/association/adherer

                      Commentaire


                      • #12
                        Re : Aide pour la réécriture d'URL

                        Mon composant possède lui aussi une vue "featured".

                        Bon j'ai peut être une nouvelle piste, dans le var_dump destiné à récupérer les infos de l'item courant, on ce rend compte que la vue demandée n'est pas la bonne sur la page d'arrivé, puisque mois je demande la vue "vernis", et l'itemid veux charger la vue "featured".
                        Voir les Commenataires en jaune.

                        Code PHP:
                        //Recupere les Infos
                        $app    JFactory::getApplication();
                        $menu    $app->getMenu();
                        $item    $menu->getActive();
                        var_dump($item);

                        //Infos présentes sur la page d'arrivé (résulat du var_dump())

                            
                        object(stdClass)[128]
                              public 
                        'id' => string '152' (length=3)
                              public 
                        'menutype' => string 'mainmenu' (length=8)
                              public 
                        'title' => string 'Vernitheque' (length=11)
                              public 
                        'alias' => string 'vernitheque' (length=11//pas Bon
                              
                        public 'note' => string '' (length=0)
                              public 
                        'route' => string 'vernitheque' (length=11)
                              public 
                        'link' => string 'index.php?option=com_vernitheque&view=featured&sample=&mytextvalue=Some text' (length=76// pas Bon, devrait être 'index.php?option=com_vernitheque&view=vernis&id=8' 
                              
                        public 'type' => string 'component' (length=9)
                              public 
                        'params' => 
                                
                        object(JRegistry)[150]
                                  protected 
                        'data' => 
                                    
                        object(stdClass)[151]
                                      ...
                              public 
                        'home' => string '0' (length=1)
                              public 
                        'img' => string '' (length=0)
                              public 
                        'template_style_id' => string '0' (length=1)
                              public 
                        'component_id' => string '10067' (length=5// OK
                              
                        public 'parent_id' => string '1' (length=1)
                              public 
                        'component' => string 'com_vernitheque' (length=15// OK
                              
                        public 'tree' => 
                                array
                                  
                        => string '152' (length=3//NE doit pas changé, mais les valeurs qui lui sont affectés si
                              
                        public 'query' => 
                                array
                                  
                        'option' => string 'com_vernitheque' (length=15// OK
                                  
                        'view' => string 'featured' (length=8// pas Bon
                                  
                        'sample' => string '' (length=0// a Enlever
                                  
                        'mytextvalue' => string 'Some text' (length=9// a Enlever 
                        Je sais pas si le problème vient de là mais j'aimerais bien pouvoir modifier ces valeurs, malheureusement il ne semble pas exister de fonction "setMenu()", et "getMenu()" semble être utilisé en amont du chargement du composant, comment est ce que je pourrais faire pour modifier ces valeurs ??

                        En espérant que je fasse pas une nouvelle fois fausse route...

                        Commentaire


                        • #13
                          Re : Aide pour la réécriture d'URL

                          je ne connais pas la 3.0... Désolé
                          Christophe
                          http://www.webcrea.fr

                          Commentaire


                          • #14
                            Re : Aide pour la réécriture d'URL

                            Pff j'ai encore passé l’après-midi à essayer de régler mon problème je n'y arrive pas... sniff

                            Plus de 400 vues et pas une idées sur le forum Développeur ?? ...sniff

                            Tout début de piste sera le bienvenu !! merci

                            Commentaire


                            • #15
                              Re : Aide pour la réécriture d'URL

                              J'ai rédigé mon controlleur il y a longtemps et ce n'était pas simple aussi, je ne sais plus trop bien.

                              Que Joomla appelle com_content me paraît ... normal : l'url que tu donnes dans ton premier post; existe-t-elle ? As-tu une entrée de menu qui se nomme "vernitheque" ?

                              Si ma mémoire n'est pas trop mauvaise, Joomla récupère le ItemID spécifié sur l'url (ce n'est pas ton cas) ou tente, sur base de l'alias de menu, de trouver quel est le composant utilisé sur cet alias. Je présume qu'à défaut de trouver quelque chose, il prend com_content par défaut.

                              Dans ta fonction ParseRoute(), écris un "echo "Je suis ici"; jdie();" en premières lignes. L'idée est de t'assurer que Joomla a bien trouvé ton composant.

                              Repars depuis un tutoriel sur router.php (http://docs.joomla.org/Supporting_SE...your_component) mais oui, écrire un router, ce n'est pas très évident. C'est même plutôt "très" galère.
                              Christophe (cavo789)
                              Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                              Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X