So schreiben Sie benutzerdefinierte URLs in OpenCart um

Im Verlauf dieses Tutorials gehen wir die Details benutzerdefinierter SEO-freundlicher URLs durch. Dies ist ein wichtiger Aspekt, den Sie beim Entwickeln von benutzerdefinierten Modulen berücksichtigen sollten, und wirkt sich auch auf die Gesamtrangliste der Suchmaschinen aus.

Wir verwenden die neueste Version von OpenCart. Vergewissern Sie sich, dass Sie diese installiert haben, um dem Code zu folgen.

Was wir in Kürze tun werden

Hier finden Sie eine Zusammenfassung der Schritte, die erforderlich sind, um benutzerdefinierte URLs in OpenCart zu erhalten:

  • Zuerst müssen wir verstehen, wie es im Kern funktioniert.
  • Wir gehen die erforderlichen Änderungen in den Kerndateien durch.
  • Wir werden uns kurz die SQL-Abfragen ansehen, um unsere benutzerdefinierten URL-Mappings einzufügen.
  • Wir werden die Verwendung der eingebauten Überschreibungsfunktionen behandeln.

Das ist also der schnelle Blick auf das, was als nächstes kommt. Gehen wir zum ersten Thema über.

Die URL-Zuordnungen in einer Datenbank

Zunächst ist es wichtig zu verstehen, wie SEO-URLs im Kern von OpenCart funktionieren.

Sehen Sie sich die Einträge in der MySQL-Tabelle "url_alias" mit phpMyAdmin oder etwas Ähnlichem an. Sie sehen Zuordnungen wie diese.

product_id = 48 ipod-classic category_id = 20 Desktops Hersteller-ID = 8 Apple-Informations-ID = 6 Lieferung

Hier sind zwei wichtige Spalten zu beachten. Der erste ist der Abfrage Spalte, die den tatsächlichen Pfad speichert, und die andere ist Stichwort, die den SEO-Alias ​​für diese URL speichert.

Wie Sie sehen, gibt es Zuordnungen für verschiedene Entitäten wie Produkt, Kategorie, Informationen und Hersteller. Wenn eine Entität im Backend von OpenCart gespeichert wird, wird dieser Tabelle ein zugehöriger Eintrag hinzugefügt.

Wenn der Benutzer im Frontend auf die URL zugreift, findet OpenCart die zugehörige Zuordnung aus der Tabelle "url_alias". Auf diese Weise wird die tatsächliche Entität auf die SEO-freundliche URL abgebildet.

Fahren Sie fort und öffnen Sie die Datei katalog / steuerung / common / seo_url.php, und lassen Sie uns den folgenden Ausschnitt aus dem Index Methode.

public function index () // Schreibe die URL-Klasse if hinzu ($ this-> config-> get ('config_seo_url')) $ this-> url-> addRewrite ($ this);  // Dekodiere URL if (isset ($ this-> request-> get ['_ route_'])) $ parts = explode ('/', $ this-> request-> get ['_ route_']); // entferne alle leeren Arrays aus dem nachfolgenden if (utf8_strlen (end ($ parts)) == 0) array_pop ($ parts);  foreach ($ parts as $ part) $ query = $ this-> db-> query ("SELECT * FROM". DB_PREFIX. "url_alias WHERE Schlüsselwort = '". $ this-> db-> escape ($ part) . "'"); if ($ query-> num_rows) $ url = explode ('=', $ query-> Zeile ['Abfrage']); if ($ url [0] == 'product_id') $ this-> request-> get ['product_id'] = $ url [1];  if ($ url [0] == 'category_id') if (! isset ($ this-> request-> get ['path'])) $ this-> request-> get ['path'] = $ url [1];  else $ this-> request-> get ['path']. = '_'. $ url [1];  if ($ url [0] == 'manufacturers_id') $ this-> request-> get ['manufacturers_id'] = $ url [1];  if ($ url [0] == 'information_id') $ this-> request-> get ['information_id'] = $ url [1];  if ($ query-> row ['query'] && $ url [0]! = 'information_id' && $ url [0]! = 'Hersteller_id' && $ url [0]! = 'category_id' && $ url [ 0]! = 'Product_id') $ this-> request-> get ['route'] = $ query-> Zeile ['Abfrage'];  else $ this-> request-> get ['route'] = 'error / not_found'; brechen;  if (! isset ($ this-> request-> get ['route'])) if (isset ($ this-> request-> get ['product_id'])) $ this-> request-> get ['route'] = 'Produkt / Produkt';  elseif (isset ($ this-> request-> get ['path'])) $ this-> request-> get ['route'] = 'Produkt / Kategorie';  elseif (isset ($ this-> request-> get ['Hersteller_id'])) $ this-> request-> get ['route'] = 'Produkt / Hersteller / Info';  elseif (isset ($ this-> request-> get ['information_id'])) $ this-> request-> get ['route'] = 'information / information';  if (isset ($ this-> request-> get ['route'])) neue Aktion zurückgeben ($ this-> request-> get ['route']); 

Wie Sie sehen, holen wir den zugehörigen Eintrag aus der Tabelle "url_alias". Danach wird der Abfrageparameter analysiert und ein zugehöriger interner Pfad wird zurückgegeben.

So funktioniert es im Kern. Leider funktioniert das Setup nur für Kern-URLs. Für benutzerdefinierte URLs müssen wir den Kerncode ändern. Das ist das Rezept unseres nächsten Abschnitts.

Die Kerndatei ändert sich

Fahren Sie fort und öffnen Sie die Datei katalog / steuerung / common / seo_url.php, und ersetzen Sie die umschreiben Methode mit der folgenden.

öffentliche Funktion umschreiben ($ link) $ url_info = parse_url (str_replace ('&', '&', $ link)); $ url = "; $ data = array (); parse_str ($ url_info ['query'], $ data); foreach ($ data als $ key => $ value) if (isset ($ data ['route']) )) if (($ data ['route'] == 'Produkt / Produkt' && $ key == 'product_id') || (($ data ['route'] == 'Produkt / Hersteller / Info' | | $ data ['route'] == 'Produkt / Produkt') && $ key == 'Hersteller_id') || ($ data ['route'] == 'information / information' && $ key == 'information_id' )) $ query = $ this-> db-> query ("SELECT * FROM". DB_PREFIX. "url_alias WHERE 'query' = '". $ this-> db-> escape ($ key.' = '. ( int) $ value). "'"); if ($ query-> num_rows && $ query-> row [' Schlüsselwort ']) $ url. =' / '. $ query-> Zeile [' Schlüsselwort ']; unset ($ data [$ key]); elseif ($ key == 'path') $ categories = explode ('_', $ value); foreach ($ categories als $ category) $ query = $ this -> db-> query ("SELECT * FROM". DB_PREFIX. "url_alias WHERE 'query' = 'category_id =". (int) $ category. ""); if ($ query-> num_rows && $ query-> Zeile ['Schlüsselwort']) $ url. = '/'. $ Abfrage-> Zeile ['Schlüsselwort']; else $ url = "; brechen;  unset ($ data [$ key]); // UNSER BENUTZERDEFINIERTER CODE else $ query = $ this-> db-> query ("SELECT * FROM". DB_PREFIX. "Url_alias WHERE 'query' = '". $ Data [' route ']. "") ; if ($ query-> num_rows && $ query-> Zeile ['Schlüsselwort']) $ url. = '/'. $ Abfrage-> Zeile ['Schlüsselwort'];  else $ url = "; break; // UNSER BENUTZERDEFINIERTER CODE if ($ url) unset ($ data ['route']); $ query ="; if ($ data) foreach ($ data als $ key => $ value) $ query. = '&'. rawurlencode ((string) $ key). '='. rawurlencode ((string) $ value);  if ($ query) $ query = '?' . str_replace ('&', '&', trim ($ query, '&'));  gebe $ url_info ['schema'] zurück. ': //'. $ url_info ['host']. (isset ($ url_info ['port'])? ':'. $ url_info ['port']: "). str_replace ('/ index.php',", $ url_info ['Pfad']). $ url. $ Abfrage;  else return $ link; 

Das umschreiben Diese Methode wird verwendet, um eine interne URL in eine SEO-freundliche URL umzuwandeln. Dies geschieht jedoch nur für interne URLs. Daher müssen wir benutzerdefinierten Code hinzufügen, damit dieser auch für unsere benutzerdefinierten Module funktioniert. In unseren Code-Änderungen haben wir die letzte bereitgestellt sonst Fall Dadurch wird das Mapping für unser benutzerdefiniertes Modul geladen. Wir haben unser benutzerdefiniertes Mapping noch nicht hinzugefügt. Lassen Sie uns das im nächsten Abschnitt tun.

Obwohl wir die Kerndatei direkt geändert haben, ist dies nur der Einfachheit halber. Sie sollten OCMOD verwenden, um die Kerndatei zu ändern, ohne sie tatsächlich zu ändern.

Fügen Sie MySQL-Einträge hinzu

In diesem Abschnitt fügen wir eine SEO-URL-Zuordnung für unser benutzerdefiniertes Modul hinzu. Auch hier handelt es sich um ein einfaches SQL, das beispielsweise mit Modulinstallationsskripts erreicht werden kann.

INSERT INTO 'url_alias' ('Abfrage', 'Schlüsselwort') VALUES ('custom / custom', 'custom-rewrite');

Fahren Sie fort und führen Sie es in Ihrer OpenCart-Datenbank aus.

Im nächsten und letzten Abschnitt werden wir sehen, wie Sie mit der Helper-Funktion SEO-freundliche Links erstellen.

Wie es funktioniert

Fahren Sie fort und erstellen Sie eine neue Datei katalog / controller / custom / custom.php mit folgenden Inhalten.

URL-> Link ('custom / custom'); $ this-> response-> setOutput ('Custom URL Rewrite Link'); 

Öffnen Sie nun im Frontend die URL http://www.yourstore.com/index.php?route=custom/custom.

Ja, es ist ein schlichter weißer Bildschirm mit nur einem Link, und das haben wir uns vorgenommen. Das Wichtigste dabei ist das URL von diesem Link ist es jetzt SEO-freundlich! Klicken Sie darauf und es wird dieselbe Seite geladen, da wir das Mapping in der Tabelle "url_alias" hinzugefügt haben.

Das ist also das ganze Konzept, das auf einfache Weise gezeigt wird. Sie können es erweitern und ein Modell erstellen, um SEO-freundliche Links für Ihr benutzerdefiniertes Modul einzufügen.

Fazit

Heute haben wir ein wichtiges Thema in OpenCart-benutzerdefinierten SEO-freundlichen URLs behandelt. Wir haben es auf sehr einfache Weise erklärt, und ich hoffe, dass es für Sie nützlich war.

Wenn Sie nach zusätzlichen OpenCart-Tools, -Dienstprogrammen, -Erweiterungen usw. suchen, die Sie in Ihren eigenen Projekten oder für Ihre eigene Ausbildung einsetzen können, vergessen Sie nicht zu sehen, was wir auf dem Markt zur Verfügung haben.

Fühlen Sie sich frei, Ihre Fragen und Vorschläge mit dem untenstehenden Feed zu posten.