• Super User

    [oscommerce] url univoci

    sto cercando di scrivere un piccolo tutorial su come ottimizzare oscommerce per i motori di ricerca. purtroppo non posso che dedicargli ritagli di tempo, e quindi chissa' quando riusciro' a pubblicarla :rollo:

    come molti di voi sanno, non sono un ottimizzatore estremo, che cura ogni minimo dettaglio, e quindi non mi sono mai preoccupato troppo degli url generati.
    nella fattispecie, non ho mai pensato che creare url che includano il nome del prodotto giustificasse "la fatica" necessaria ad ottenere quel risultato 🙂

    oscommerce ha una bella feature, che si abilita con un semplice click, che consiste nel creare url amichevoli per i motori di ricerca. questa feature si rivela particolarmente utile soprattutto per la pagina product_info.php (che e' la scheda prodotto).

    di default, in oscommerce, il singolo prodotto viene identificato dalla pagina product_info.php?products_id=1 (metto uno per semplicita' di spiegazione, ovviamente ad ogni numero corrisponde un prodotto ;)).
    i parametri nell'url sono pero' destinati a crescere quando si cambia lingua, o quando si arriva alla scheda prodotto da un particolare percorso (ad esempio, passando per la categoria). in quest'ultimo caso, per intenderci, l'url si presenta cosi': product_info.php?cPath=1&products_id=1 (dove il numero dopo cPath indica la categoria e quello dopo products_id indica sempre il prodotto).

    parlavo della feature in oscommerce per abilitare con un click degli url amichevoli. url amichevoli significa banalmente che i vari parametri eliminati, e gli url diventano rispettivamente del tipo product_info.php/products_id/1 e product_info.php/cPath/1/products_id/1.

    tanto basta per avere url facilmente digeribili dagli spider.

    pero'... pero' c'e' un pero'!
    perche' lo stesso prodotto e' raggiungibile tramite due differenti url (in realta' tramite almeno 3 url, se si hanno catalogazioni ulteriori rispetto alle categorie - per intenderci, sul mio e-commerce lo stesso prodotto avrebbe anche l'url product_info.php/regions_id/1/products_id/1).

    e allora, a questo punto mi dico e vi dico: serve mod_rewrite, per convertire questi url in un unico url (e la scelta piu' logica mi pare quella di avere gli url di questo tipo: product_info.php/products_id/1).

    e qui vengono i miei problemi 🙂
    d'altra parte, ci sta che un salumiere riesca a fare SEO, ma usare mod_rewrite... beh, chiedete troppo :sbonk:
    e quindi, e scusate se vengo al dunque dopo una cosi' lunga introduzione, come si convertono quegli url nell'url univoco product_info.php/products_id/1 usando mod_rewrite? 🙂


  • Super User

    in altra sede mi fanno notare che mod_rewrite non puo' aiutarmi, ma bisogna intervenire direttamente sul codice.

    😢


  • Super User

    @must said:

    in altra sede mi fanno notare che mod_rewrite non puo' aiutarmi, ma bisogna intervenire direttamente sul codice.

    😢

    perchè?


  • Super User

    perche' mod_rewrite non cambia gli url presenti nel codice html. ed e' alla fonte che bisogna intervenire.
    o invece mod_rewrite cambia il codice html? :bho:


  • Super User

    no certo... è ovvio che prima di pensare al rewrite dell'URL da parte del server devi fornire le URL nel nuovo formato....


  • Super User

    gia'.

    allora, oscommerce rende gli url SE-friendly come detto sopra usando questa funzione (nel file /includes/functions/html-output.php):

    
        if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) {
          while (strstr($link, '&&')) $link = str_replace('&&', '&', $link);
    
          $link = str_replace('?', '/', $link);
          $link = str_replace('&', '/', $link);
          $link = str_replace('=', '/', $link);
    
          $separator = '?';
        }
    
        if (isset($_sid)) {
          $link .= $separator . $_sid;
        }
    
        return $link;
      }
    
    

    la cosa bella, a questo punto, sarebbe aggiungere a questa funzione un modo per strippare gli eventuali cPath/1/ e regions_id/1/ (che prima di venire modificati sono in realta' cPath=1& e regions_id=1& (ovviamente il numero 1 e' sempre d'esempio).

    forse quindi stiamo arrivando al problema?

    potrebbe reggere una cosa tipo

    
    
          $link = str_replace('cPath=*&', '', $link);
          $link = str_replace('regions_id=*&', '', $link);
          $link = str_replace('?', '/', $link);
          $link = str_replace('&', '/', $link);
          $link = str_replace('=', '/', $link);
    
    
    

    ? (tipo, perche' non mi aspetto proprio che sia anche sintatticamente corretta ;)).

    altra piccola nota: di default, non esiste regions_id ma manufacturers_id (questo per gli utenti oscommerce che si stanno chiedendo dove cavolo l'ho trovato :)).


  • Super User

    quel codice non reggerebbe, ammesso e non concesso che funzioni, perche' poi non accederei piu' alle categorie e alle regioni :arrabbiato:

    ci deve essere il modo pero' :arrabbiato:


  • Super User

    ok, scusate se mi faccio il thread da solo :sbonk:

    quel codice non funziona se uso l'asterisco, se invece metto la stringa esatta, quindi con tanto di numero, funziona, e non si manifesta neanche il problema che ho scritto al post precedente.

    ammesso che abbia trovato la soluzione, sarebbe pero' scomodo scrivere una riga di codice per ogni numero di categoria/regione/produttore. l'asterisco non lo prende. alternative? 🙂


  • Super User
    
          $link = ereg_replace('cPath=[0-9]&','',$link);
          $link = ereg_replace('regions_id=[0-9]&','',$link);
    
    

    :brindisi:


  • Super User

    quest'ultimo codice e' imperfetto.

    la discussione puo' continuare [url=http://www.giorgiotave.it/forum/viewtopic.php?t=4821]in questo thread
    :ciauz: