web-dev-qa-db-fra.com

[com] La fonction BuildRoute (& $ query) est appelée sans qu'aucun membre de $ query ['view'] ne soit passé

J'écris un composant pour le site et rencontre des problèmes avec le routeur. J'ai 2 vues dans un composant, les deux n'ont qu'un seul default.php modèle et default.xml pour définir le type de menu pour chaque vue (par exemple, appelons-les vues (1) et (2)). C'est également SEF activé sur le site.

Ainsi, la première vue (1) est indépendante de l’URL: elle ne montre que des informations textuelles.

La deuxième vue (2) montre également certaines données de DB; Il peut passer utilisateur à lui-même avec un nouveau paramètre (par exemple &cityid=5) Pour afficher les données d'un autre type (la même requête de base de données, mais avec des filtres supplémentaires, dans notre cas, par exemple '... WHERE (...) AND cityid="5"').

J'ai deux pages (éléments de menu) sur le site avec les première (1) et deuxième (2) vues, respectivement.

Mais quand j'ai commencé à écrire le fichier Router.php, j'ai constaté que le paramètre $ query de la fonction [component]BuildRoute(&$query) ne contient pas le membre $query['view']. Il contient 'option' et 'Itemid', mais il n'y a pas de membre 'view', je ne peux donc pas le passer au résultat de la fonction (par conséquent, la situation est la même avec [component]ParseRoute: Il ne recevra pas le paramètre 'view', je ne peux donc pas le transmettre à Joomla pour qu'il affiche la vue correcte (first (1) ou second (2))). Donc, si nous oublions le paramètre 'view', Joomla affiche la vue par défaut, qui est la première (1) vue dans mon cas, mais j'ai besoin que ce soit la deuxième (2) vue (voir ci-dessus).

P.S. Le fait est que JRequest::getVar('view') renvoie la valeur correcte, mais elle n'est pas transmise dans le tableau $query.

P.S. Peut-être que je fais quelque chose de totalement faux, parce que je suis nouveau à Joomla. Ensuite, aidez-moi à réaliser le modèle que j'ai décrit en haut.

Merci d'avance.

1
impulsgraw

La fonction BuildRoute obtient toutes les informations que vous allez lui transmettre. Comment créez-vous vos URL dans votre composant? Comme ça?

$url = JRoute::_('index.php?option=com_mycomponent&view=myview&task=mytask&id=1');

Dans le cas ci-dessus, le paramètre view est passé avec la structure url et la fonction BuildRoute sait donc comment obtenir le paramètre view. Si vous ne passez pas le paramètre de vue, il ne l’aura pas.

Si vous y accédez via un élément de menu, vérifiez quelle est la valeur de lien de votre élément de menu.

Par contre, la fonction ParseRoute tire ses valeurs de l'URL sef. Par exemple:

url: mywebsite.com/someslug/someother/1-idone.html

L'URL ci-dessus a 3 paramètres, someslug, someother et 1-idone. Vous devez donc les analyser dans votre fonction ParseRoute. c.-à-d. view/task/id ou task/view/id ou quel que soit l'ordre dans lequel votre composant les génère avec la fonction BuildRoute.

La structure d'URL ci-dessus est juste un exemple et non une ligne de base. C'est complètement à vous de voir comment vous construisez votre itinéraire et analysez de manière opposée.

Quelques suggestions si vous utilisez Joomla 3 ou supérieur.

  1. N'utilisez pas JRequest :: getVar, utilisez plutôt JFactory :: getApplication () -> input-> get.
1
Nagarjun