Come riscrivere gli URL personalizzati in OpenCart

Nel corso di questo tutorial, esamineremo i dettagli degli URL personalizzati ottimizzati per SEO. È un aspetto importante da tenere in considerazione durante lo sviluppo di moduli personalizzati e influisce anche sul ranking generale dei motori di ricerca.

Useremo l'ultima versione di OpenCart, quindi assicurati di averlo installato per seguire il codice.

Cosa stiamo andando a fare - in poche parole

Ecco un riepilogo dei passaggi che dovremo compiere per raggiungere gli URL personalizzati in OpenCart:

  • In primo luogo, dovremo capire come funziona nel nucleo.
  • Analizzeremo le modifiche richieste nei file principali.
  • Daremo una rapida occhiata alle query SQL per inserire i nostri mapping URL personalizzati.
  • Tratteremo come utilizzare le funzioni di riscrittura incorporate.

Quindi, questa è la rapida occhiata a ciò che verrà dopo. Passiamo al primo argomento.

Le associazioni URL in un database

Prima di tutto, è importante capire come funzionano gli URL SEO nel nucleo di OpenCart.

Vai avanti ed esplora le voci nella tabella MySQL "url_alias" usando phpMyAdmin o qualcosa di simile. Vedrai mappature come questa.

product_id = 48 ipod-classic category_id = 20 desktop manufacturer_id = 8 apple information_id = 6 delivery

Ci sono due colonne importanti da notare qui. Il primo è il domanda colonna che memorizza il percorso attuale e l'altro è parola chiave, che memorizza l'alias SEO per quell'URL.

Come puoi vedere, ci sono mappature per entità diverse come prodotto, categoria, informazioni e produttore. Ogni volta che un'entità viene salvata nel back-end di OpenCart, a questa tabella viene aggiunta una voce associata.

Nel front-end, ogni volta che l'utente accede all'URL, OpenCart trova la mappatura correlata dalla tabella "url_alias". In questo modo, l'entità reale viene mappata all'URL SEO-friendly.

Vai avanti e apri il file Catalogo / regolatore / common / seo_url.php, ed esploriamo il seguente snippet dal indice metodo.

public function index () // Aggiungi riscrivi alla classe url if ($ this-> config-> get ('config_seo_url')) $ this-> url-> addRewrite ($ this);  // Decodifica URL if (isset ($ this-> request-> get ['_ route_'])) $ parts = explode ('/', $ this-> request-> get ['_ route_']); // rimuove qualsiasi array vuoto dalla coda se (utf8_strlen (end ($ parts)) == 0) array_pop ($ parts);  foreach ($ parti come $ parte) $ query = $ this-> db-> query ("SELECT * FROM". DB_PREFIX. "url_alias WHERE keyword = '". $ this-> db-> escape ($ part) . "'"); if ($ query-> num_rows) $ url = explode ('=', $ query-> row ['query']); 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] == 'manufacturer_id') $ this-> request-> get ['manufacturer_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]! = 'manufacturer_id' && $ url [0]! = 'category_id' && $ url [ 0]! = 'Product_id') $ this-> request-> get ['route'] = $ query-> row ['query'];  else $ this-> request-> get ['route'] = 'error / not_found'; rompere;  if (! isset ($ this-> request-> get ['route'])) if (isset ($ this-> request-> get ['product_id'])) $ this-> request-> get ['route'] = 'prodotto / prodotto';  elseif (isset ($ this-> request-> get ['path'])) $ this-> request-> get ['route'] = 'product / category';  elseif (isset ($ this-> request-> get ['manufacturer_id'])) $ this-> request-> get ['route'] = 'product / manufacturer / info';  elseif (isset ($ this-> request-> get ['information_id'])) $ this-> request-> get ['route'] = 'informazioni / informazioni';  if (isset ($ this-> request-> get ['route'])) return new Action ($ this-> request-> get ['route']); 

Come puoi vedere, stiamo recuperando la voce associata dalla tabella "url_alias". Successivamente viene analizzato il parametro di query e viene restituito un percorso interno associato.

Quindi, questo è il modo in cui funziona nel nucleo. Sfortunatamente, la configurazione funziona solo per gli URL principali: per gli URL personalizzati è necessario modificare il codice principale. Questa è la ricetta della nostra prossima sezione.

Le modifiche al file principale

Vai avanti e apri il file Catalogo / regolatore / common / seo_url.php, e sostituire il riscrivere metodo con il seguente.

riscrittura di funzioni pubbliche ($ link) $ url_info = parse_url (str_replace ('&', '&', $ link)); $ url = "; $ data = array (); parse_str ($ url_info ['query'], $ data); foreach ($ data come $ chiave => $ valore) if (isset ($ data ['route'] )) if (($ data ['route'] == 'prodotto / prodotto' && $ chiave == 'product_id') || (($ data ['percorso'] == 'prodotto / produttore / informazioni' | | $ data ['route'] == 'prodotto / prodotto') && $ chiave == 'manufacturer_id') || ($ data ['route'] == 'informazioni / informazioni' && $ chiave == 'information_id' )) $ query = $ this-> db-> query ("SELECT * FROM". DB_PREFIX. "url_alias WHERE 'query' = '". $ this-> db-> escape ($ chiave.' = '. ( int) $ value). "'"); if ($ query-> num_rows && $ query-> row [' keyword ']) $ url. =' / '. $ query-> row [' keyword ']; unset ($ data [$ key]); elseif ($ key == 'path') $ categories = esplode ('_', $ valore); foreach ($ categorie come $ categoria) $ query = $ this -> db-> query ("SELECT * FROM". DB_PREFIX. "url_alias WHERE 'query' = 'category_id =". (int) $ category. "'"); if ($ query-> num_rows && $ query-> row ['keyword']) $ url. = '/'. $ query-> row ['keyword']; else $ url = "; rompere;  unset ($ data [$ key]); // IL NOSTRO CODICE CUSTOM else $ query = $ this-> db-> query ("SELECT * FROM". DB_PREFIX. "Url_alias WHERE 'query' = '". $ Data [' route ']. "'") ; if ($ query-> num_rows && $ query-> row ['keyword']) $ url. = '/'. $ Query-> row [ 'parola chiave'];  else $ url = "; break; // IL NOSTRO CODICE CUSTOM if ($ url) unset ($ data ['route']); $ query ="; if ($ data) foreach ($ data come $ chiave => $ valore) $ query. = '&'. chiave rawurlencode ((stringa) $). '='. rawurlencode ((string) $ value);  if ($ query) $ query = '?' . str_replace ('&', '&', trim ($ query, '&'));  restituisce $ url_info ['schema']. ': //'. $ url_info ['host']. (isset ($ url_info ['port'])? ':'. $ url_info ['port']: "). str_replace ('/ index.php',", $ url_info ['percorso']). $ url. $ Query;  else return $ link; 

Il riscrivere metodo è usato per convertire un URL interno in un URL SEO-friendly. Ma lo fa solo per gli URL interni. Quindi, abbiamo bisogno di aggiungere un codice personalizzato per farlo funzionare anche per i nostri moduli personalizzati. Nelle nostre modifiche al codice, abbiamo fornito l'ultimo altro caso che carica la mappatura per il nostro modulo personalizzato. Non abbiamo ancora aggiunto la nostra mappatura personalizzata, quindi facciamolo nella prossima sezione.

Sebbene abbiamo modificato direttamente il file core, è solo per semplicità. È necessario utilizzare OCMOD per modificare il file principale senza effettivamente modificarlo.

Aggiungi voci MySQL

In questa sezione, aggiungeremo una mappatura URL SEO per il nostro modulo personalizzato. Ancora una volta, si tratta di un semplice SQL per scopi di esempio: è possibile farlo utilizzando gli script di installazione del modulo.

INSERISCI IN "url_alias" ('query', 'keyword') VALUES ('custom / custom', 'custom-rewrite');

Vai avanti ed eseguilo nel tuo database OpenCart.

Nella prossima e ultima sezione, vedremo come usare la funzione di supporto per produrre collegamenti SEO-friendly.

Come funziona

Vai avanti e crea un nuovo file Catalogo / regolatore / custom / custom.php con i seguenti contenuti.

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

Ora, nel front-end, apri l'URL http://www.yourstore.com/index.php?route=custom/custom.

Sì, è un semplice schermo bianco con un solo link, ed è quello che intendevamo. La cosa importante da notare qui è il URL di questo link: ora è SEO-friendly! Fai clic su questo e verrà caricata la stessa pagina, poiché abbiamo aggiunto il mapping per quello nella tabella "url_alias".

Quindi, questo è l'intero concetto dimostrato in un modo semplice. Potresti estenderlo e creare un modello per inserire link SEO-friendly per il tuo modulo personalizzato.

Conclusione

Oggi, abbiamo discusso un argomento importante in OpenCart - URL SEO-friendly personalizzati. Abbiamo adottato un approccio molto semplice per spiegarlo e spero che sia stato utile per te.

Se stai cercando altri strumenti, utility, estensioni e così via che puoi sfruttare nei tuoi progetti o per la tua istruzione, non dimenticare di vedere ciò che abbiamo a disposizione sul mercato.

Sentiti libero di pubblicare domande e suggerimenti utilizzando il feed sottostante.