it-swarm.com.de

Wie erstelle ich eine SEF-URL in einem benutzerdefinierten Modul anstelle der tatsächlichen URL?

In meinem Modul wird dieser Code verwendet, um die URL der Seite zu generieren:

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

Dies funktioniert genau so wie es sollte und erzeugt eine URL, die so aussieht:

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

Ich würde aber gerne wissen, ob es eine Möglichkeit gibt, das Modul dazu zu bringen, die SEF-URL für die aktuelle Seite zu generieren. So etwas wie:

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

Verwenden Sie dazu JRoute:

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

sie benötigen JUri :: base () jedoch nicht, wenn Sie keine Verknüpfung zu einer anderen Domain herstellen möchten.

13
Harald Leithner

Es gibt ein System-Plugin namens System: SEF. Wenn dieses Plugin aktiviert ist, überprüft es die endgültige HTML-Ausgabe, bevor sie an den Browser gesendet wird, und ersetzt alle Nicht-SEF-Links durch ihre SEF-Gegenstücke, indem es JRoute::_($url); durchläuft. Dies funktioniert nur für interne Links, die mit index.php Beginnen. Es funktioniert also nicht, wenn der Link mit http:// Beginnt.

Versuchen Sie, JUri::base() zu entfernen (und damit das http: // aus dem Link zu entfernen), und es sollte funktionieren, wenn das Plugin aktiviert ist.

4
Don Gilbert

Hier ist eine andere Möglichkeit, die korrekte Root-URL der Site zu ermitteln. Dies ist auch wichtig, wenn sich Ihre Site in einem Unterordner befindet

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

Dann kannst du machen

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