J'ai un élément de menu pour une vue spécifique dans un composant personnalisé. Attaché à cet élément de menu, j'en ai un autre Template Style
sélectionné, pas le modèle standard. L'accès à la vue via le menu fonctionne bien, car il se joint à l'URL le Itemid
.
Maintenant, je veux lier, en utilisant JRoute, une vue avec une autre, mais JRoute ne génère pas l'URL souhaitée.
echo JRoute::_('index.php?option=com_example&view=reporting');
/index.php?option=com_example&view=reporting
JRoute
n'ajoutera pas l'ID d'article à l'URL, ce qui empêchera le style de modèle sélectionné pour l'élément de menu de fonctionner.
Existe-t-il un moyen de "calculer" l'Itemid (en dehors de faire une requête dans le tableau jos_menu
de la colonne link
) et de le joindre à JRoute?
la source
Réponses:
Voici une technique que j'ai utilisée (je ne me souviens plus où je l'ai trouvée).
Cela a fait des merveilles pour moi.
la source
la sortie de JRoute dépendra de ce que vous l'alimentez.
pourrait retourner autre chose que
En fait, si vous avez une liste de blog de catégorie d'élément de menu pour catid = 5, ce dernier peut vous donner l'URL du menu (je n'ai pas testé cette URL exacte). Essayez avec différents paramètres get pour obtenir des résultats différents (parfois très faux, comme l'a dit @Fedik)
la source
La clé ici est de configurer votre fichier router.php de composants (qui devrait être trouvé dans le dossier racine de votre composant sur le front-end) avec une logique qui recherchera et sélectionnera l'élément de menu approprié. J'adorerais que cela se produise automatiquement, mais pour autant que je sache, ce n'est pas le cas.
Il serait probablement préférable de travailler ce bloc de code dans un certain type de fonction d'aide qui peut être utilisée pour trouver automatiquement l'élément de menu le mieux adapté au contenu.
Voici le code que j'ai utilisé dans plusieurs de mes composants personnalisés pour obtenir l'élément de menu le mieux adapté:
Tout cela est une sorte de gâchis (et j'aimerais des améliorations si quelqu'un en a!), Mais cela fait le travail. Si l'élément de menu actuel correspond le mieux, il s'en tiendra toujours à cela.
Sinon, il devrait trouver la meilleure correspondance en fonction du nom du composant -> nom de la vue -> nom de la mise en page -> valeur id. Plus elle correspond vers la droite, mieux je considère que la correspondance!
la source
Afaik JRoute prendra l'actif
Itemid
(et aussi l'actifoption
) si aucun n'est fourni. Si cela ne fonctionne pas, cela signifie que l'appel à votre code est livré sans Itemid pour commencer. Si c'est le cas, la chose la plus simple serait d'ajouter le Itemid à l'appel initial.Si vous devez rechercher l'élément de menu, je ne ferais pas de requête directe, mais j'utiliserais plutôt JMenu.
la source
JRoute::_('index.php?option=com_example&view=reporting&Itemid=10')
JRouter peut retourner/current-path?view=reporting&Itemid=10
... y a-t-il des choses spécifiques?