2012-07-30 9 views
8

Tôi đang sử dụng Magento 1.5.0.1 và hàm getProductUrl() được sử dụng trong bán chéo và bán các khối trên trang sản phẩm là ném lên các định dạng URL khác nhau.Magento getProductUrl() không trả lại đúng url (ngẫu nhiên?)

Hoặc là url đúng như: /laptop-bag.html Hoặc một trong những sai (cũng nó hoạt động, nhưng tất nhiên nó không phải là ghi đè URL): /Danh mục hàng/sản phẩm/xem/id/825/s Đôi khi cả hai lệnh bán chéo và bán lên trả lại URL chính xác, đôi khi cả hai đều sử dụng phiên bản dài hơn và trong một số trường hợp, một phiên bản sử dụng đúng và phiên còn lại sử dụng phiên bản dài? ?

Mọi ý tưởng tại sao điều này xảy ra?

Tôi đã chạy một bản sửa lỗi cơ sở dữ liệu magento, reindexed và làm mới/xóa tất cả bộ đệm.

Trả lời

13

Hãy thử $product->getUrlPath() thay vì $product->getProductUrl()

UPDATE: Theo bên dưới nhận xét của @ jordan314, Magento khuyến cáo để EE khách hàng:

Thuộc tính url_path không còn được sử dụng như là 1.13 nhưng vẫn sẵn sàng cho backward- tính tương thích và Magento sẽ không chỉ định giá trị cho sản phẩm mới, vì vậy không nên tiếp tục sử dụng nó. Có lẽ bạn có thể thử sử dụng $ product-> getProductUrl() để thay thế.

+0

Cảm ơn! Tôi có thể thấy những gì đã xảy ra ngay bây giờ, về cơ bản nó xảy ra khi bạn đang xem một sản phẩm từ một danh mục và các sản phẩm liên quan/upsell không tồn tại trong cùng một danh mục. Bằng cách sử dụng đường dẫn url, nó sẽ lấy nó từ thư mục gốc. Làm việc như một say mê! – cappuccino

+0

Cảm ơn Kalpesh, đã có cùng một vấn đề, rất nhiều đào và thấy rằng! rực rỡ!! –

+0

@AdamLesniak Vui mừng được giúp đỡ :) – Kalpesh

3

Url không chính xác được tạo vì không thể tìm thấy url được ghi đè. Có thể nguyên nhân là do store_id không chính xác. ví dụ:

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

kết quả:

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/ 

Các rewrite url chính xác có thể được tìm thấy trong bảng tên core_url_rewrite (bao gồm cả thông tin về store_id)

Nếu nó tìm thấy giá trị trận đấu trong core_url_rewrite, nó sẽ tạo 'url chính xác' khác, nó sẽ đồng bộ hóa khóa product_id + url + category_id

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

Hãy thử thêm này khi bạn đang nhận được bộ sưu tập của bạn

$collection->addUrlRewrite(); 

Nó đã giúp tôi.

+0

Điều này cũng phù hợp với tôi –

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

Câu trả lời của bạn chắc chắn đáng để giải thích một chút. [bao gồm một lời giải thích] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) thực sự giúp cải thiện chất lượng bài đăng của bạn. –