2012-11-28 15 views
11

Come forse sapete, se si dispone di prodotti che condividono una chiave URL, la chiave url avrà una cifra aggiunto ad esso:Magento - numeri rimozione di URL URL chiave/prodotto

cioè

http://www.site.com/main-category/sub-category/product-name- .html

Come faccio a trovare la fonte di quel 6260 (che è uno dei # 's allegate ai miei URL)? Ho provato id prodotto, sku, non riesco a trovare la fonte di esso. Il motivo per cui lo chiedo è perché se riesco a trovarlo, posso creare una funzione di sostituzione delle stringhe per svuotarla da url prima di echeggiare su determinate pagine di elenco dei prodotti.

Grazie.

+0

Hai guardato nell'URL Riscrivi nell'area di amministrazione? Da [questo] (http://stackoverflow.com/questions/5019584/magento-puts-1-in-my-urls-can-i-remove-programatically) post su SO, e da quello che ho visto io stesso, è qualcosa a che fare con l'URL Riscrivi e un problema di indicizzazione – CCBlackburn

+0

La mia preoccupazione è che sto prendendo il controllo di un sito con * migliaia * di prodotti configurabili (che è ciò che causa la duplicazione della chiave url) e nessuno si è occupato di questo prima. Non sono sicuro che ci sia una sezione nell'amministratore che risolve tutto in un colpo solo. La mia preoccupazione è che, a differenza del post a cui fai riferimento, il mio url con le cifre è dinamico e non esiste un modello reale che possa trovare. Ecco perché mi chiedo se esiste un modo dinamico per scoprire da dove proviene la fonte delle cifre aggiunte in modo dinamico. Questa è la mia preoccupazione. C'è ovviamente una funzione che lo controlla ... Grazie. – Joel

+0

Appena avuto un pensiero, la chiave URL per il prodotto configurabile è diversa dal prodotto semplice? In caso contrario, questo causerà problemi anche – CCBlackburn

risposta

21

Prima di arrivare al punto in cui si trova questo codice, si consiglia di entrare in un mondo di dolore.

  1. Non c'è semplice regola su come quei numeri vengono generati. Ci sono casi in cui è l'ID del negozio, ci sono casi in cui è il semplice ID prodotto. C'è casi in cui non è né

  2. Anche se ci fosse, è comune per non-da-zero siti Magento per contenere funzionalità personalizzate che cambia questo

  3. In definitiva, dal momento che/URL SEO-friendly leggibili di Magento si trovano nella tabella core_url_rewrite, è possibile per le persone per inserire testo arbitrario

avvertimenti di sventura a parte, il modello che state cercando è Mage::getSingleton('catalog/url'). Questo contiene la maggior parte della logica per la generazione di Magento Catalog e riscrittura del prodotto. Tutti questi metodi terminano passando il percorso della richiesta attraverso il metodo getUnusedPath.

#File: app/code/core/Mage/Catalog/Model/Url.php 
public function getUnusedPath($storeId, $requestPath, $idPath) 
{ 
    //... 
} 

Questo metodo contiene la logica per la creazione di un numero univoco alla fine dell'URL. Tracciare tutto questo è al di là dell'ambito di un post di Stack Overflow, ma questa linea in particolare è illuminante/scoraggiante.

$lastRequestPath = $this->getResource() 
    ->getLastUsedRewriteRequestIncrement($match[1], $match[4], $storeId); 
if ($lastRequestPath) { 
    $match[3] = $lastRequestPath; 
} 
return $match[1] 
    . (isset($match[3]) ? ($match[3]+1) : '1') 
    . $match[4]; 

In particolare, queste due linee

$match[3] = $lastRequestPath; 
//... 
. (isset($match[3]) ? ($match[3]+1) : '1') 
//... 

Nel caso in cui non è ovvio, ci sono casi in cui Magento aggiungerà automaticamente un 1 a un URL, e poi continuare a incrementarlo. Ciò rende la generazione di tali URL dipendenti dallo stato del sistema quando sono stati generati - non esiste una regola semplice.

Altre linee di interesse in questo file sono

if (strpos($idPath, 'product') !== false) { 
    $suffix = $this->getProductUrlSuffix($storeId); 
} else { 
    $suffix = $this->getCategoryUrlSuffix($storeId); 
}  

Questa $suffix saranno utilizzati alla fine della URL, nonche, così quei metodi sono la pena indagare.

Se tutto ciò che si sta tentando di fare è rimuovere i numeri dall'URL, si potrebbe stare meglio con un'espressione regolare o con qualche jiggering di stringa explode/implode.

+1

Vale la pena notare che sembra esserci un bug in 1.7 che fa sì che i rotoli di Magento generino sempre un nuovo valore per qualsiasi prodotto che abbia un nome duplicato. Indipendentemente dal fatto che qualcosa sia cambiato dall'ultima reindicizzazione eseguita. –

+0

@Cags Chi è il bug come? –

+0

Mi dispiace, colpisci un post per sbaglio. Difficile digitare sul telefono mentre si è in autobus. Aggiorna con maggiori dettagli. –

2

Non ho idea di come funzioni, ma questo ha funzionato per me. Molto probabilmente perché rende gli URL non unici. Magento ver. 1.7.0.2 aveva improvvisamente iniziato ad aggiungere numeri come suffissi ai nomi dei miei nuovi prodotti, anche se le loro chiavi e nomi di URL erano diversi dai vecchi prodotti. Su un sospetto, sono andato a System -> Configuration -> Catalog -> Search Engine Optimizations -> Product URL Suffix e ho cambiato il valore predefinito .html a -prod.html. Immagino che potresti cambiarlo con qualsiasi suffisso che volevi. Poi ho reindicizzato il mio sito web, aggiornato la cache, e presto! Tutti i numeri erano spariti dagli url del prodotto. Gli URL dei prodotti ora hanno tutti il ​​formato custom-product-name-prod.html. Il tag canonico mostra anche custom-product-name-prod.html quindi sono doppiamente felice.

Non so se funzionerà per gli altri, ma spero lo faccia. Si noti che ho avuto vecchi e nuovi prodotti con URL duplicati e che avevo disabilitato i vecchi prodotti prima di eseguire questa procedura. Quindi se hai 2 prodotti con la stessa chiave url ed entrambi sono abilitati, allora questo NON può funzionare per te.