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
1 sur 2 < >

C'est [Réglé] et on n'en parle plus ?

A quoi ça sert ?
La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
Comment ajouter la mention [Réglé] à votre discussion ?
1 - Aller sur votre discussion et éditer votre premier message :


2 - Cliquer sur la liste déroulante Préfixe.

3 - Choisir le préfixe [Réglé].


4 - Et voilà… votre discussion est désormais identifiée comme réglée.

2 sur 2 < >

Assistance au forum - Outil de publication d'infos de votre site

Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

UTILISER À VOS PROPRES RISQUES :
L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

Problèmes connus :
FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

Installation :

1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

Archive zip : https://github.com/AFUJ/FPA/zipball/master

2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
et remplacer www. votresite .com par votre nom de domaine


Exemples:
Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
Télécharger le script fpa-fr.php dans: /public_html/
Pour executer le script: http://www..com/fpa-fr.php

Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
Télécharger le script fpa-fr.php dans: /public_html/cms/
Pour executer le script: http://www..com/cms/fpa-fr.php

En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
Voir plus
Voir moins

Partenaire de l'association

Réduire

Hébergeur Web PlanetHoster
Travaille ...
X