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


7

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 wie es sollte und erzeugt eine URL, die wie folgt 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. Etwas wie:

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

Antworten:


13

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.


1
Dies hat funktioniert und ich werde es als "beantwortet" machen, aber ich habe mich gefragt, warum die neue SEF-URL zwei Schrägstriche nach dem Domainnamen bit-sized-joomla.com//our-work/illustration-photography/…
rleathers

3
Der Grund dafür ist, dass JUri :: base () eine vollständige URL mit "/" am Ende zurückgibt. und JRoute gibt einen absoluten Uri mit einem "/" am Anfang zurück. Ich werde die Antwort bearbeiten.
Harald Leithner

1
Ich glaube, das sollte rtrim(JUri::base(), '/')...stattdessen sein, ltrim(JUri::base(), '/')...wenn der zusätzliche Schrägstrich am Ende der JUri :: base () - Ausgabe steht.
Benjamin Ray

Ich denke du hast recht Ich habe die Antwort aktualisiert, danke.
Harald Leithner

4

Es gibt ein System-Plugin namens System: SEF. Wenn dieses Plugin aktiviert ist, scannt es die endgültige HTML-Ausgabe unmittelbar vor dem Senden an den Browser und ersetzt alle Nicht-SEF-Links durch ihre SEF-Gegenstücke, indem es sie durchläuft JRoute::_($url);. Dies funktioniert nur für interne Links, obwohl es mit index.phpbeginnt http://. Es funktioniert also nicht, wenn der Link mit beginnt .

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


3

Hier ist eine andere Möglichkeit, die richtige Root-URL der Site zu erhalten. Dies ist auch dann wichtig, wenn sich Ihre Site im Unterordner befindet

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

Dann können Sie tun

$url = $rootURL.JRoute::_(ContentHelperRoute::getArticleRoute(  $article->id,  $article->catid ));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.