web-dev-qa-db-fra.com

Joomla! 3.6.4 router.php pour un composant personnalisé

Je développe un composant personnalisé pour Joomla! pour la première fois et je suis bloqué sur la création d'un routeur.php. J'ai déjà lu Joomla! Documentation mais je ne comprends pas bien quoi faire.

En fait, le lien vers la vue unique de mon composant est le suivant:

index.php? option = com_layadvisory & view = layadvisory & id = {$ dataItem-> id}

Mais je veux que l'utilisateur affiche OU:

www.monsite.com/Lay-Advisory/1

OU:

www.monsite.com/Lay-Advisory/person/1

Où 1 est l'ID de la personne sélectionnée. Je sais que je dois créer les fonctions build (& $ query) et parse ($ segments), mais je ne comprends pas comment. Y a-t-il quelqu'un qui peut me diriger vers le bon chemin à suivre? Merci.

P.S. $ dataItem-> id est extrait de $ this-> data (via une boucle foreach).

UPDATE:

J'ai réussi à obtenir ce résultat:

www.monsite.com/Lay-Advisory/id-Name-of-the-person

Mais quand je vais sur les détails/page unique du composant, cette notification apparaît:

Avis: Index non défini: nom dans composants\com_layadvisory\router.php

Mon routeur.php est

 * @copyright 2016 RCPSG 
 * @license GNU Licence publique générale version 2 ou ultérieure; voir LICENSE.txt 
 */
 // Pas d'accès direct 
 Défini ('_ JEXEC') ou die; 
 
 JLoader :: registerPrefix ('Layadvisory', JPATH_SITE. '/ Components/com_layadvisory /') ; 
 
/** 
 * Classe LayadvisoryRouter 
 * 
 * @ Depuis 3.3 
 */
 Classe LayadvisoryRouter étend JComponentRouterBase 
 {
 /**
 * Méthode de compilation pour les URL 
 * Cette méthode est censée transformer les paramètres de requête en un fichier plus humain 
 * forme lisible. Il est exécuté uniquement lorsque le mode SEF est activé. 
 * 
 * @param array & $ query Un tableau d’arguments URL 
 * 
 * @return array Arguments d'URL à utiliser pour assembler l'URL suivante. 
 * 
 * @since 3.3 
 */
 build de fonction publique (& $ query) 
 {
 $ segments = array (); 
 
 if (isset ($ query ['view'])) {
 // $ segments [] = $ query ['view']; 
 unset ($ query ['view']); 
 
} 
 
 if (isset ($ query ['id'])) 
 {
 $ segments [] = $ query ['id']. "-". $ query ['name']; 
 unset ($ query ['id']); 
 unset ($ query ['name']); 
} 
 renvoie $ segments; 
} 
 
 /**
 * Méthode d'analyse pour les URL 
 * Cette méthode est censée reconvertir l'URL lisible par l'homme en paramètres de requête 
 *. Il n'est exécuté que lorsque le mode SEF est activé. 
 * 
 * @Param array & $ segments Les segments de l'URL à analyser. 
 * 
 * @ return array Attributs d'URL à utiliser par l'application. 
 * 
 * @since 3.3 
 */
 fonction publique parse (& $ segments) 
 {
 $ vars = array (); 
 $ vars ['view'] = "layadvisory"; 
 $ aux = exploser (":", $ segments [0]); 
 $ vars ['id'] = $ aux [0]; 
 retourne $ vars; 
 
} 
}

Mon lien JRoute est:

$ link = JRoute :: _ ("index.php? option = com_layadvisory & view = layadvisory & id = {$ dataItem-> id} & name = {$ dataItem-> name}");
1
OlafGizursson

Vous ne vérifiez pas l'existence du nom du paramètre avant de l'utiliser. Par conséquent PHP affiche le message de notification. Modifiez votre code en

if(isset($query['id']) && isset($query['name']))                               
{
  $segments[] = $query['id']."-".$query['name'];
  unset($query['id']);
  unset($query['name']);  
}
else if(isset($query['id']))                               
{
  $segments[] = $query['id'];
  unset($query['id']);
}

le bloc else est facultatif, en fonction de vos besoins et de votre conception.

1
Nagarjun