$ _product-> get SẢNtUrl () cung cấp đường dẫn url không có khóa URL


15

Tôi đang nhận được một bộ sưu tập sản phẩm của một danh mục nhất định trên một trang trong một vài trang Magento khác nhau. Mã của tôi để có được bộ sưu tập là:

        $category = new Mage_Catalog_Model_Category();
        $category->load($id);
        $collection = $category->getProductCollection();
        $collection->addAttributeToSelect('*');
        $collection->addAttributeToFilter('status', 1);
        $collection->addFieldToFilter(array(array('attribute'=>'visibility', 'neq'=>"1" )));
        $collection->getSelect()->limit(12);

        foreach ($collection as $shopProduct) :

            echo $shopProduct->getProductUrl();

        endforeach;

Vấn đề của tôi là trên một trong những trang Magento chúng tôi đang chạy ProductUrl()được tìm nạp là một URL giống http://www.my site.com/catalog/product/view/id/2309/s/shopcat/category/373/và không thích hơn http://www.site.com/shopcat/product-url-key.html. Nhưng trên tất cả các trang web khác, nó xuất hiện như chúng ta muốn.

Có ai biết tại sao điều này có thể? Cảm ơn! Tôi đã thử sử dụnggetUrlPath() nhưng điều này không trả lại bất cứ điều gì. Tôi biết tôi có thể làm tròn điều này bằng cách làm một cái gì đó như thế <?php echo $this->getBaseUrl().$shopProduct->getUrlKey().".html"; ?>nhưng phương pháp đó có vẻ hơi kém hiệu quả!

EDIT 21/03/14: Tôi vẫn gặp vấn đề này. Tôi đã nhận ra getProductUrl()lấy URL mong muốn trên một số tệp mẫu của trang web chứ không phải các tệp khác. Ví dụ: tôi đang tải một bộ sưu tập trên trang chủ và nó cung cấp cho tôi các URL tôi muốn. Nhưng getProductUrl()không cung cấp cho tôi các URL tôi muốn với cùng mã trên chế độ xem danh mục.


Bạn đã thử reindex "Viết lại URL Index" chưa?
oleksii.svarychevskyi

có Vui lòng Reindex dữ liệu của bạn và xóa bộ nhớ cache
Keyul Shah

Tôi đã thử cả hai. Tôi đã reindexed trong Quản lý chỉ mục và tôi đã xóa bộ đệm, bộ đệm đã bị vô hiệu hóa.
Sarah

Nhập quản trị-> catalof-> quản lý viết lại url. Có rerites url? Nếu có, hãy cố gắng lọc lưới: Đường dẫn đích -> [danh mục / some_carget_id]
mageUz

Rất xin lỗi vì sự chậm trễ trong việc trả lời. Có một URL viết lại được thiết lập cho sản phẩm được đề cập, vì vậy, nếu bạn truy cập trang web.com / shopcat / products-url-key.html hoặc site.com/catalog/product/view/id/2309/s/shopcat/ danh mục / 373 bạn vẫn truy cập vào cùng một trang sản phẩm, chỉ vì vòng lặp foreach đang kéo qua loại URL sai vì một số lý do.
Sarah

Câu trả lời:


18

Hãy thử lấy bộ sưu tập như thế này:

$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*');
$collection->addAttributeToFilter('status', 1);
$collection->addFieldToFilter(array(array('attribute'=>'visibility', 'neq'=>"1" )));
//Where the magic happens
//this will add the url rewrite.
//addUrlRewrite can also be left without a parameter to generate url without category.
$collection->addUrlRewrite($category->getId()); 
$collection->getSelect()->limit(12);

Nói cách khác, hãy cho người mẫu biết để cung cấp khóa url thay vì url dài xấu xí bằng $collection->addUrlRewrite();.


câu hỏi - tại sao bạn cần $ category-> getId () trong addUrlRewrite? Tôi thấy rằng nó hoạt động theo cách nào đó (ví dụ ngay cả khi không có nó). cảm ơn!
Ronen Ness

2
Xin chào @Ness, tùy thuộc vào việc bạn có "Sử dụng đường dẫn Danh mục cho URL sản phẩm được bật" trong Hệ thống / Cấu hình / Danh mục / Danh mục / Tối ưu hóa công cụ tìm kiếm. Nếu bạn không, bạn có thể bỏ qua điều này và chỉ sử dụng addUrlRewrite (). Nếu bạn có đường dẫn danh mục được bật, chuyển ID danh mục vào chức năng có nghĩa là URL sản phẩm được hiển thị là URL sản phẩm được cung cấp trước bởi đường dẫn danh mục.
Sarah

@Marius Vâng, nó làm việc cho tôi.
Dhara Bhatti

8

Lấy URL sản phẩm

Có khả năng gây nhầm lẫn do 3 phương pháp bạn có thể sử dụng, tất cả đều có trong Mage_Catalog_Model_ Productt:

public function getUrlPath($category=null)
public function getUrlInStore($params = array())
public function getProductUrl($useSid = null)

Cách tốt nhất để giải thích là chỉ hiển thị kết quả của một số cuộc gọi. Cho một sản phẩm có khóa URL là mondrian-Large-coffee-table-set- multolour trên miền của http: //ADE.local kết quả là:

$product->getUrlPath();
    'mondrian-large-coffee-table-set-multicolour'

$product->getUrlPath($category);
    'tables/mondrian-large-coffee-table-set-multicolour'

// you cannot stop this method adding ___store to the URL, even by setting _store_to_url to false
$product->getUrlInStore();
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour?___store=default'

// you cannot stop this method adding ___store to the URL, even by setting _store_to_url to false
// note - see the "using _ignore_category" section below for an arguable bug with using this param
$product->getUrlInStore(array('_ignore_category' => true));
    'http://made.local/mondrian-large-coffee-table-set-multicolour?___store=default'

$product->getProductUrl();
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'

$product->getProductUrl(true);
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.