2012-07-30 11 views
8

Używam Magento 1.5.0.1, a funkcja getProductUrl() używana w blokach sprzedaży krzyżowej i wyższej sprzedaży na stronie produktu wyświetla różne formaty adresów URL.Magento getProductUrl() nie zwraca właściwego adresu URL (losowego?)

Każda poprawna url jak: /laptop-bag.html Albo źle jeden (dobrze to działa, ale oczywiście jej nie URL rewrite): /Katalog/product/view/id/825/s/laptop-bag/category/16/

Czasami zarówno bloki cross-sell i up sell zwracają poprawny adres URL, czasem oba używają dłuższej wersji, aw niektórych przypadkach używa się poprawnego, a druga używa wersji długiej? ?

Jakieś pomysły, dlaczego tak się dzieje?

Mam już uruchomić naprawę bazy danych Magento, ponownie zindeksować i odświeżyć/przepłukać wszystkie pamięci podręczne.

Odpowiedz

13

Spróbuj $product->getUrlPath() zamiast $product->getProductUrl()

UPDATE: Jak w komentarzu poniżej przez @ jordan314, Magento zaleca EE klientów:

Atrybut url_path nie jest już używana jako 1,13, ale nadal jest dostępna dla backward kompatybilność, a Magento nie przydzieli jej wartości dla nowych produktów, więc nie zaleca się kontynuowania jej używania. Być może możesz spróbować użyć $ product-> getProductUrl().

+0

Dzięki! Widzę, co się teraz stało, w zasadzie dzieje się, gdy oglądasz produkt z kategorii, a produkty powiązane/upsell nie istnieją w tej samej kategorii. Korzystając z urlpath, pobiera ją z katalogu głównego. Działa jak marzenie! – cappuccino

+0

Dzięki Kalpesh, miałem ten sam problem, dużo kopania i znalazłem to! znakomity!! –

+0

@AdamLesniak Miło mi pomóc :) – Kalpesh

3

Niepoprawny adres URL jest generowany, ponieważ nie może znaleźć przepisanego adresu URL. Być może jest to spowodowane nieprawidłowym adresem store_id. np

$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>"; 

wynik:

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/ 

prawidłowy adres URL rewrite można znaleźć w tabeli o nazwie core_url_rewrite (w tym informacji na temat store_id)

Jeśli okaże wartość mecz w core_url_rewrite, wygeneruje "poprawny adres URL", w przeciwnym razie będzie konkatować identyfikator produktu id + klawisz url + identyfikator_kategorii

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

Spróbuj dodać to kiedy dostajesz swoją kolekcję

$collection->addUrlRewrite(); 

Pomogło mi.

+0

To zadziałało również dla mnie. –

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

Twoja odpowiedź na pewno warta trochę wytłumaczenia. [w tym wyjaśnienie] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-ans -answers) naprawdę pomaga poprawić jakość twojego postu. –

Powiązane problemy