web-dev-qa-db-fra.com

Routeur URL de composant personnalisé

J'ai donc lu https://docs.joomla.org/Supporting_SEF_URLs_in_your_component et examiné des exemples à la fois en ligne et dans com_content, mais je ne parviens toujours pas à obtenir cette information de routage à 100%.

J'aimerais savoir si je le fais correctement ou s'il existe un moyen plus simple ou meilleur de réaliser la même chose.

Je veux créer des URL conviviales sans identifiant. Le lien que j'ai fourni ci-dessus est passé par la solution simple et l'a fait fonctionner, sauf que je ne pouvais pas me débarrasser de l'id: à l'avant du pseudonyme (dans le slug). Je ne cherche pas une solution complexe, car le composant ne comporte qu'une vue liste et une vue élément unique - pas de vue catégorie, etc.

Donc, je pense avoir trouvé cela sur un forum il y a quelque temps et que c'était le système le plus proche d'un système de routage efficace.

Le problème est que si un utilisateur tape une URL incorrecte, par exemple myurl.com/menuitem/incorrectalias plutôt que d'afficher une page d'erreur 404, il interroge la base de données pour tous les éléments susceptibles d’être affichés sur cette page, provoquant une panne du navigateur. Est-il possible d'afficher la page d'erreur pour le scénario mentionné?

 classe mycompoenentRouter étend JComponentRouterBase 
 {
 construction de la fonction publique (& $ query) 
 {
 $ segments = array (); 
 if (isset ($ query ['id'])) 
 {
 $ id = exploser (':', $ query ['id']); 
 $ segments [] = $ id [1]; 
 non défini ($ query ['id']); 
} 
 non défini ($ query ['view']); 
 return $ segments; 
} 
 
 fonction analyser (& $ segments) 
 {
 $ vars = array (); 
 $ app = JFactory :: getApplication (); 
 $ menu = $ app-> getMenu (); 
 $ item = $ menu-> getActive (); 
 
 switch ($ item-> requête ['view']) 
 {
 case 'list': 
 $ vars ['view'] = 'item'; 
 
 $ db = JFactory :: getDbo (); 
 $ query = $ db-> getQuery (true); 
 $ query-> select ('id '); 
 $ query-> from ($ db-> quoteName (' #__ table '));; 
 $ query-> où ($ db-> quoteName (' alias '). " = ". $ db-> quote ($ segment s [0])); 
 
 $ db-> setQuery ($ query); 
 $ resultat = $ db-> loadResult (); 
 
 $ vars ['id'] = (int) $ result; 
 break; 
} 
 
 return $ vars; 
} 
} 
1
Alex Mehan
if(empty($result)){
    JError::raiseError(404, JText::_('COM_YOURCOMPONENT_ITEM_NOT_FOUND'));
}
1
Dennis Heiden