SEO URL-Unterstützung in der MVC-Komponente Joomla 3

Für die Katalogkomponente müssen Sie schöne Links organisieren. Ich werde mit einem lebenden Beispiel beschreiben, was dafür getan werden muss. Der Artikel ist unterwegs geschrieben. Ich schreibe Code, teste, wenn alles funktioniert, füge ich einen Artikel hinzu.

Zuerst müssen Sie die Datei router.php im Komponentenordner (/components/com_catalog/router.php) erstellen.

Fügen Sie eine Funktion hinzu, die die URL generiert:

function catalogBuildRoute(&$query)
{
       $segments = array();
       if (isset($query['view']))
       {
                $segments[] = $query['view'];
                unset($query['view']);
       }
       if (isset($query['id']))
       {
                $segments[] = $query['id'];
                unset($query['id']);
       };
       return $segments;
}

Die zweite Funktion zerlegt die URL in ihre Bestandteile:

function catalogParseRoute($segments)
{
       $vars = array();
       switch($segments[0])
       {
               case 'catalog':
                       $vars['view'] = 'catalog';
                       break;
               case 'item':
                       $vars['view'] = 'item';
                       $id = explode(':', $segments[1]);
                       $vars['id'] = (int) $id[0];
                       break;
       }
       return $vars;
}

URL in einer Komponente

generieren : JRoute :: _ ('index.php? View = item & id ='. $ Row-> id);

Jetzt versteht die Komponente Verknüpfungen des Formulars / catalog / item / 1.

Dies ist ein Beispiel aus der Dokumentation. Wir modifizieren es für eine interessantere Aufgabe.

Es ist erforderlich, die vom Benutzer vorgegebene URL zu ersetzen.
Diese URL wird in der Verzeichnistabelle gespeichert.

Fügen Sie eine weitere Funktion hinzu, die das Element zieht:

function getCatalogItemByRow($row, $value){
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('id, url');
    $query->from($db->quoteName('#__catalog'));
    $query->where($db->quoteName($row)." = ".$db->quote($value));
    $db->setQuery($query);
    return $db->loadRow();
}

Und so sieht unsere Parsing-Funktion jetzt aus:

function catalogParseRoute($segments)
{  
       $vars = array();
       $vars['view'] = 'catalog';
       if($segments[0]!="catalog"){
           $item = getCatalogItemByRow("url",$segments[0]);
           if(isset($item['1']) && $item['1']) {
               $vars['view'] = 'item';
               $vars['id'] = (int) $item['0'];
           }
       }
       return $vars;
}


Wenn Sie auf den Link / catalog / test_alias klicken, wird die gewünschte Seite geöffnet.

Die Funktion zum Generieren von URLs sieht folgendermaßen aus:

function catalogBuildRoute(&$query)
{
       $segments = array();
        unset($query['view']);
       if (isset($query['id']))
       {   
           $id = (int) $query['id'];
           if($id){
                $item = getCatalogItemByRow("id",$id);    
                $segments[] = $item['1'];
                unset($query['id']);
           }
       }
       return $segments;
}


Jetzt JRoute :: _ ('index.php? View = item & id = 1'); Geben Sie uns die URL / catalog / test_alias, die wir benötigen.

Vielen Dank!

Jetzt auch beliebt: