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?
Aide pour la réécriture d'URL
Réduire
X
-
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:
-
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:
-
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)
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)
Laisser un commentaire:
-
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:
-
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:
-
Re : Aide pour la réécriture d'URL
je ne connais pas la 3.0... Désolé
Laisser un commentaire:
-
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
0 => 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
En espérant que je fasse pas une nouvelle fois fausse route...
Laisser un commentaire:
-
Re : Aide pour la réécriture d'URL
Salut,
pourquoi extends JControllerLegacy et non JController ?
/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
{
}
La "legacy" est déjà en place pour la compat 3.0
Laisser un commentaire:
-
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:
-
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
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
0 => 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)
Laisser un commentaire:
-
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:
-
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:
-
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
Laisser un commentaire:
-
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.
Laisser un commentaire: