Aide pour la réécriture d'URL

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

  • webcrea
    a répondu
    Re : Aide pour la réécriture d'URL

    A tout hasard, quand tu fais les modif dans ton composant, est-ce que tu redéfinis l'option de menu?

    Laisser un commentaire:


  • cavo789
    a répondu
    Re : Aide pour la réécriture d'URL

    Bonjour

    Petit post inutile de ma part pour te dire "désolé mais je suis à court de temps; je ne peux analyser ton soucis comme il se doit". La réécriture d'url n'est pas des plus simples et il faut s'y attaquer à tête reposée; ce qui n'est pas mon cas.

    Je ne puis que te (re)conseiller de bien lire le tutoriel.

    Bon débogage. N'oublie pas de faire des echo "" suivi d'un jdie(); pour que ton router t'affiche un message de debugging au besoin et que tu ais l'occasion de le voir.

    Laisser un commentaire:


  • Soundboy39
    a répondu
    Re : Aide pour la réécriture d'URL

    Bon finalement ça n'a rien à voir... car le com_content fonctionne de la même manière, mais toujours est il que mon composant ne renvois pas les variables à Joomla, donc la question est de savoir comment effectue cette opération ??

    Laisser un commentaire:


  • Soundboy39
    a répondu
    Re : Aide pour la réécriture d'URL

    Merci Cavo,

    Oui en fait j'ai créer un lien de menu pour la page d'accueil du composant, qui est la page de départ vers les différentes fiches contenus dans différentes catégories de la vernithèque.
    Joomla a bien trouvé mon composant se référant à l'ItemId, le problème c'est que mon composant ne renvois pas les variables de requete à Joomla.
    A la sortie de ParseRoute(), voici ce que j'ai :

    Code PHP:

    //code récupérant les variables chargées définies au niveau de l'ItemId
    $app    JFactory::getApplication();
    $menu $app->getMenu();
    $item    $menu->getActive();
    var_dump($item->query);

    //resultat du var_dump
    array
      
    'option' => string 'com_vernitheque' (length=15)
      
    'view' => string 'featured' (length=8)
      
    'sample' => string '' (length=0)
      
    'mytextvalue' => string 'Some text' (length=9
    En fait si Joomla! affiche un article c'est un pur hasard, c'est parce qu'il se trouve qu'il y a un article ayant cet ID (exemple "http://localhost/lafoliedesvernis/vernitheque/vernis/8-le-vernis-banane.html" 8 est un ID existant), donc du coup il se rabat sur "com_content" et le charge, mais sinon si je tape une autre URL (par exemple : "http://localhost/lafoliedesvernis/vernitheque/vernis.htm") ça m'affiche une erreur 404.

    Donc on en revient bien au problème de départ... il s'agit bien de donner à Joomla! les bonnes variables !

    Code PHP:

    //Il faut transformer ceci :
    array
      
    'option' => string 'com_vernitheque' (length=15)
      
    'view' => string 'featured' (length=8)
      
    'sample' => string '' (length=0)
      
    'mytextvalue' => string 'Some text' (length=9)


    //En cela (tout en guardant le même ItemId) :
    array
      
    'option' => string 'com_vernitheque' (length=15)
      
    'view' => string 'vernis' (length=8)
      
    'id' => string '8' (length=0
    Mais diable comment faire ???

    Laisser un commentaire:


  • cavo789
    a répondu
    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.

    Laisser un commentaire:


  • Soundboy39
    a répondu
    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

    Laisser un commentaire:


  • webcrea
    a répondu
    Re : Aide pour la réécriture d'URL

    je ne connais pas la 3.0... Désolé

    Laisser un commentaire:


  • Soundboy39
    a répondu
    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...

    Laisser un commentaire:


  • ghazal
    a répondu
    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

    Laisser un commentaire:


  • webcrea
    a répondu
    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 ?

    Laisser un commentaire:


  • Soundboy39
    a répondu
    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

    Laisser un commentaire:


  • webcrea
    a répondu
    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

    Laisser un commentaire:


  • Soundboy39
    a répondu
    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 !!

    Laisser un commentaire:


  • Soundboy39
    a répondu
    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.

    Laisser un commentaire:


  • webcrea
    a répondu
    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');

    Laisser un commentaire:

Annonce

Réduire
Aucune annonce pour le moment.

Partenaire de l'association

Réduire

Hébergeur Web PlanetHoster
Travaille ...
X