2012-07-30 5 views
8

Sto utilizzando Magento 1.5.0.1 e la funzione getProductUrl() utilizzata nei blocchi di vendita incrociata e di vendita nella pagina prodotto sta generando diversi formati di URL.Magento getProductUrl() non restituisce l'URL corretto (casuale?)

l'URL corretto come: /laptop-bag.html O quella sbagliata (funziona bene, ma ovviamente non è la riscrittura URL): /catalogo/prodotto/view/id/825/s/laptop-bag/category/16/

A volte entrambi i blocchi di vendita incrociata e di vendita restituiscono l'URL corretto, a volte entrambi utilizzano la versione più lunga e, in alcuni casi, uno utilizza il corretto e l'altro utilizza la versione lunga? ?

Qualche idea del perché questo sta accadendo?

Ho già eseguito un ripristino di database Magento, reindicizzato e aggiornato/svuotato tutte le cache.

risposta

13

Prova $product->getUrlPath() invece di $product->getProductUrl()

UPDATE: Come da sotto commento di @ jordan314, Magento raccomanda di EE clienti:

L'attributo url_path non è più utilizzato come di 1.13, ma è ancora disponibile per arretratezza compatibilità, e Magento non assegnerà un valore ad esso per i nuovi prodotti, quindi non è consigliabile continuare a usarlo. Forse potresti provare a utilizzare $ product-> getProductUrl().

+0

Grazie! Riesco a vedere cosa è successo ora, essenzialmente accade quando si visualizza un prodotto da una categoria e i prodotti correlati/upsell non esistono nella stessa categoria. Usando il percorso url, lo ottiene dalla radice. Funziona come un fascino! – cappuccino

+0

Grazie Kalpesh, ha avuto lo stesso problema, un sacco di scavo e l'ho trovato! brillante!! –

+0

@AdamLesniak Felice di aiutare :) – Kalpesh

3

L'url errato viene generato perché non riesce a trovare l'url riscritto. Forse è causato perché store_id non corretto. esempio:

$id = 290; 
Mage::app()->setCurrentStore('default'); 
echo "store_id: ".Mage::app()->getStore()->getId()."<br>"; 
$url = Mage::helper('catalog/product')->getProductUrl($id); 
echo $url."<br>"; 

//change store id 
Mage::app()->setCurrentStore('admin'); 
echo "store_id: ".Mage::app()->getStore()->getId()."<br>"; 
$url = Mage::helper('catalog/product')->getProductUrl($id); 
echo $url."<br>"; 

risultato:

store_id: 1 
http://local.com/surestep-pro-diabetic-test-strips-50-strips-professional-care.html 
store_id: 0 
https://local.com/index.php/catalog/product/view/id/290/s/surestep-pro-diabetic-test-strips-50-strips-professional-care/ 

La riscrittura URL corretto può essere trovato in tabella denominata core_url_rewrite (comprese le informazioni relative alla STORE_ID)

Se ha trovato partita Valore in core_url_rewrite, genererà 'l'url corretto' altrimenti sarà concat il product_id + url key + category_id

$routePath = 'catalog/product/view'; 
$routeParams['id'] = $product->getId(); 
$routeParams['s'] = $product->getUrlKey(); 
if ($categoryId) { 
    $routeParams['category'] = $categoryId; 
} 
.210
2

Prova aggiungere questo quando stai ricevendo la vostra collezione

$collection->addUrlRewrite(); 

Mi ha aiutato.

+0

Questo ha funzionato anche per me –

2
$id = 10; 
Mage::app()->setCurrentStore('admin'); 
$url = Mage::helper('catalog/product')->getProductUrl($id); 
+0

La tua risposta vale sicuramente una piccola spiegazione. [compresa una spiegazione] (http://meta.stackexchange.com/questions/114762/explaining-entely-code-based-answers) aiuta davvero a migliorare la qualità del tuo post. –