web-dev-qa-db-fra.com

URL SEF absolue avec JRoute

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.

1
Gruber

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 ); ?>


De la documentation JRoute:

URL de routage **

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);

Où:

$ 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

Mise à jour pour votre commentaire:

Une autre option pourrait être la suivante:

echo JUri::root() . trim( JRoute::_( $quoteLink ), '/' );

Un petit "hacky", mais ça fait le travail ...;)

1
FFrewin

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);
1
bharat

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')
1
Alexandr