J'essaie de comprendre pourquoi je ne peux pas obtenir une URL SEF absolue correcte avec JRoute .
J'ai essayé avec ça:
JRoute::_(JUri::root().'index.php?Itemid=164')
mais il ne sera pas correctement rendu par SEF, il imprimera simplement comme ceci
http://mysite.com/index.php?Itemid=164`
Si je supprime la partie JUri::root()
, le rendu sera correct, mais sous la forme d'une URL relative ofc.
Toute suggestion? Qu'est-ce que je fais mal? Est-ce que je me trompe dans les documents
_(string $url, boolean $xhtml = true, integer $ssl = null) : string
Arguments
$url
: URI absolu ou relatif à la ressource Joomla.
Vous pouvez essayer de cette façon:
$itemid = 164;
$application = JFactory::getApplication();
$menu = $application->getMenu();
$item = $menu->getItem( $itemid );
$link = new JURI( $item->link );
$link->setVar( 'ItemId', $itemid );
echo JRoute::_( $quoteLink, true, -1 ); ?>
La méthode JRoute::_
traduit le code interne Joomla! URL vers une URL personnalisée. JRoute::_
a trois paramètres et son prototype est:
JRoute::_($url, $xhtml = true, $ssl = null);
$ url est une chaîne de caractères contenant l'absolu ou relatif interne Joomla! URL.
$ xhtml est une valeur booléenne qui spécifie si la sortie doit être en XHTML. Ce paramètre est facultatif et, si omis, est défini par défaut sur true.
$ ssl est une valeur entière qui spécifie si l'URI doit être sécurisé. Il doit être défini sur 1 pour forcer la sécurisation de l'URI à l'aide de l'URI du site sécurisé global, sur 0 pour le laisser dans le même état que lors de la transmission et sur -1 pour forcer l'URI à ne pas être sécurisé à l'aide de l'URI du site non sécurisé global. .
Ce n'est pas évident dans cette documentation, mais utiliser **$ssl = -1**
Forcera un URI non sécurisé, quelque chose comme http://joomlasite.com
Une autre option pourrait être la suivante:
echo JUri::root() . trim( JRoute::_( $quoteLink ), '/' );
Un petit "hacky", mais ça fait le travail ...;)
Vous pouvez également utiliser la méthode appropriée pour obtenir l’URL complète sous la forme:
$config = JFactory::getConfig();
$mode = $config->get('force_ssl', 0) == 2 ? 1 : (-1);
echo JRoute::_('index.php?Itemid=164',false,$mode);
Vous ne pouvez pas y arriver comme vous le voulez car si vous regardez le code du routeur:
lien qui commence par index.php doit être passé, pas avec http (s)
La manière correcte de réaliser le routage est la suivante:
JRoute::_('index.php?Itemid=164')
Si vous souhaitez avoir une adresse URL absolue, vous devez ajouter le préfixe root
après:
JUri::root().JRoute::_('index.php?Itemid=164')