web-dev-qa-db-fra.com

Comment générer une URL SEF dans un module personnalisé à la place de l'URL réelle?

Dans mon module, ce code est utilisé pour générer l'URL de la page:

JURI::base() . ContentHelperRoute::getArticleRoute(  $article->id,  $article->catid )

Cela fonctionne exactement comme il se doit et produit une URL ressemblant à ceci:

http://example.com/index.php?option=com_content&view=article&id=83&catid=26&Itemid=162

Mais j'aimerais savoir s'il existe un moyen de faire en sorte que le module génère l'URL SEF de la page en cours. Quelque chose comme:

http://example.com/resources/blog/83-illustration
7
rleathers

Utilisez JRoute pour cela:

rtrim(JUri::base(), '/') . JRoute::_(ContentHelperRoute::getArticleRoute(  $article->id,  $article->catid ))

mais vous n'avez pas besoin de JUri :: base () si vous ne voulez pas vous lier à un autre domaine.

13
Harald Leithner

Il existe un plugin système appelé System: SEF. Lorsqu'il est activé, ce plugin analyse la sortie HTML finale juste avant son envoi au navigateur et remplace tout lien non-SEF par son équivalent SEF en l'exécutant via JRoute::_($url);. Cela ne fonctionne que pour les liens internes bien que commençant par index.php, Donc cela ne fonctionnera pas si le lien commence par http://.

Essayez de supprimer JUri::base() (et donc de supprimer le lien http: // du lien) et cela devrait fonctionner si le plug-in est activé.

4
Don Gilbert

Voici un autre moyen d'obtenir l'URL racine correcte du site. Cela prend également soin si votre site est dans un sous-dossier

$rootURL = rtrim(JURI::base(),'/');
        $subpathURL = JURI::base(true);
        if(!empty($subpathURL) && ($subpathURL != '/')) {
            $rootURL = substr($rootURL, 0, -1 * strlen($subpathURL));
        }

Alors tu peux faire

$url = $rootURL.JRoute::_(ContentHelperRoute::getArticleRoute(  $article->id,  $article->catid ));
3
Ramesh Elamathi