2012-07-30 13 views
8

Ich benutze Magento 1.5.0.1 und die Funktion getProductUrl(), die in den Cross Sell- und Upsell-Blöcken auf der Produktseite verwendet wird, wirft verschiedene URL-Formate auf.Magento getProductUrl() gibt nicht die richtige URL zurück (zufällig?)

Entweder die korrekte URL wie: /laptop-bag.html Oder die falsche (gut es funktioniert, aber natürlich ist es nicht die Rewrite-URL): /catalog/product/view/id/825/s/Laptop-Tasche/Kategorie/16/

Manchmal geben sowohl Cross-Selling- als auch Up-Sell-Blöcke die richtige URL zurück, manchmal verwenden beide die längere Version, und in einigen Fällen verwendet man die korrekte und die andere die lange Version? ?

Irgendwelche Ideen, warum das passiert?

Ich habe bereits eine Magento-Datenbank repariert, neu indiziert und alle Caches aktualisiert/geleert.

Antwort

13

Versuchen $product->getUrlPath() statt $product->getProductUrl()

UPDATE: Richtet sich nach unten Kommentar von @ jordan314, Magento Kunden EE empfiehlt:

Das url_path Attribut mehr als 1,13 wird nicht verwendet, ist aber nach wie vor für rückwärts- Kompatibilität, und Magento wird ihm für neue Produkte keinen Wert zuweisen, so dass es nicht empfohlen wird, es weiter zu verwenden. Vielleicht könnten Sie stattdessen versuchen, $ product-> getProductUrl() zu verwenden.

+0

Danke! Ich kann sehen, was jetzt passiert ist, im Wesentlichen passiert es, wenn Sie ein Produkt aus einer Kategorie ansehen und die zugehörigen/Upsell-Produkte nicht in der gleichen Kategorie existieren. Wenn Sie den URL-Pfad verwenden, wird er von der Wurzel abgerufen. Klappt wunderbar! – cappuccino

+0

Danke Kalpesh, hatte dasselbe Problem, viel Graben und fand das! brillant!! –

+0

@AdamLesniak Freut mich zu helfen :) – Kalpesh

3

Die falsche URL wird generiert, da die neu geschriebene URL nicht gefunden werden kann. Vielleicht wird es verursacht, weil incorrect store_id. zB:

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

Ergebnis:

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/ 

die korrekte URL Rewrite kann in Tabelle namens core_url_rewrite (einschließlich der Informationen über die store_id)

gefunden werden, wenn es Einstimmungswert in core_url_rewrite gefunden, es wird "die richtige URL" erzeugen, sonst wird es die Produkt-ID + URL-Taste + Kategorie-ID conacat

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

Versuchen Sie, diese hinzufügen, wenn Sie Ihre Sammlung immer

$collection->addUrlRewrite(); 

Es hat mir geholfen.

+0

Das funktionierte auch für mich –

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

Ihre Antwort ist sicherlich eine kleine Erklärung wert. [mit einer Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) hilft wirklich, die Qualität Ihrer Post zu verbessern. –