Développement composant : Gestion des liens internes

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Développement composant : Gestion des liens internes

    Bonjour,

    Voilà toujours au sujet du développement d’extension,
    j'aurai voulu avoir des précision concernant la gestion des liens en interne.

    En l'occurence il s'agit d'un lien "tout simple" de type = index.php?option=com_zoneclient&view=ajoutsite&Ite mid=216", celui-ci conduit bien au bon endroit, et l'URL affichée est bien "http://localhost/joomla17/index.php?option=com_zoneclient&view=ajoutsite&Ite mid=216", le contenu est bien affiché...

    Par contre lorsque j'active la réécriture URL, le système réecrit bien "joomla17/ajouter-un-site.html" si je passe par un lien de menu, mais si je passe par un lien situé sur une page l'URL affiche ceci :
    "joomla17/page-ou-est-situe-le-lien/ajouter-un-site.html",
    comment faire pour que l'URL de type : "joomla17/ajouter-un-site.html" ??

    Au besoin j'ai mis mon code avec quelques commentaires,

    Code:
    <html>
    
    <!-- fonctionne mais Problème de réecriture URL -->
    <p><a class="header-links" href="index.php?option=com_zoneclient&view=ajoutsite&Itemid=<?php print $itemid;?>" >Ajouter un Site</a></p>
    
    <!--  fonctionne mais AUCUNE réecriture URL -->
    <p><a class="header-links" href="<?php print JURI::base();?>index.php?option=com_zoneclient&view=ajoutsite&Itemid=<?php print $itemid;?>" >Ajouter un Site</a></p>
    
    </html>
    J’espère avoir été assez clair, et je vous remercie d'avance pour vos réponses,

    MICKAEL

  • #2
    Re : Dévellopement composant : Gestion des liens interne

    Bonjour Mickael

    C'est parfaitement normal : quand tu ne passes pas par un menu, c'est à ton composant à aller voir s'il n'existerait pas un menu qui serait paramétré sur la vue que tu es occupé à afficher.

    Va voir les fichiers router.php des composants que tu utilises. Tu trouveras probablement un fichier avec un FindItem() ou une fonction du style qui a pour but d'aller analyser la table des menus, récupérer les menus pointant vers ton com_zoneclient et voir si un menu ne pourrait pas être réutilisé.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

    Commentaire


    • #3
      Re : Développement composant : Gestion des liens internes

      Merci pour ta réponse Cavo,

      findItem() est dans le fichier "root.php" contenu dans le dossier "helpers" du composant, le code est celui-ci pour traiter le menu "site" :

      Code:
      protected static function _findItem($needles)
      	{
      		// Prepare the reverse lookup array.
      		if (self::$lookup === null) {
      			self::$lookup = array();
      
      			$component	= JComponentHelper::getComponent('com_zoneclient');
      			$menus		= JApplication::getMenu('site');
      			$jv = new JVersion();
      			$field = ($jv->RELEASE < 1.6) ? 'componentid' : 'component_id';
      			$items		= $menus->getItems($field, $component->id);
      			foreach ($items as $item) {
      				if (isset($item->query) && isset($item->query['view'])) {
      					$view = $item->query['view'];
      					if (!isset(self::$lookup[$view])) {
      						self::$lookup[$view] = array();
      					}
      					if (isset($item->query['id'])) {
      						self::$lookup[$view][$item->query['id']] = $item->id;
      					}
      				}
      			}
      		}
      		
      		foreach ($needles as $view => $ids) {
      			if (isset(self::$lookup[$view])) {
      				
      				foreach ($ids as $id) {
      					if (isset(self::$lookup[$view][(int)$id])) {
      						return self::$lookup[$view][(int)$id];
      					}
      				}
      			}
      		}
      
      		return null;
      	}
      Bon par contre j'ai pas compris grand-chose à ce code...
      j'ai essayer de le copier est de remplacer JApplication::getMenu('site'); par JApplication::getMenu('ajoutsite');
      mais cela n'a aucune incidence...

      J'ai également essayé d'ajouter une condition à la structure "if (count($segments) > 0)" au niveau du fichier "rooter.php",
      j'ai ajouté :
      case 'ajoutsite':
      $id = explode(':', $segments[1]);
      $vars['id']= (int) $id[0];
      break;

      mais évidement aucune incidence mise à part des erreurs PHP...

      Commentaire


      • #4
        Re : Développement composant : Gestion des liens internes

        Le routage est, peut-être, ce qu'il y a de plus compliqué à comprendre sous Joomla. Perso, j'ai galéré.

        Je ne sais pas si tu peux t'en inspirer mais tu trouveras aussi un findItem dans mon composant; AllEvents.

        Le code source, fortement commenté (et en Français), se trouve dans le fichier /components/com_allevents/helpers/route.php.

        Bonne soirée.
        Christophe (cavo789)
        Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
        Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

        Commentaire

        Annonce

        Réduire
        Aucune annonce pour le moment.

        Partenaire de l'association

        Réduire

        Hébergeur Web PlanetHoster
        Travaille ...
        X