产品网址是从以下位置打印的:
Mage_Catalog_Model_Product::getProductUrl
该方法正在检查网址是否必须包含类别,使用Mage::registry('current_category')
但集合通常会在唯一查询中加载URL重写(检查方法Mage_Catalog_Model_Resource_Product_Collection::addUrlRewrite($categoryId = '')
)
,然后Mage_Catalog_Model_Product::getProductUrl
从$ product数据中使用该“ request_path”。
因此,可能的窍门可能是这样的:
// if we are in search results
if( ! Mage::registry('current_category')){
$myDesiredCategoryId = current($product->getCategoryIds()); // you could just use the first category registered with this product or define some other strategy
$canonicalCategory = Mage::getModel('catalog/category')->load($myDesiredCategoryId);
Mage::register('current_category', $canonicalCategory);
$product->setRequestPath(null);
$productUrlWithCategory = $product->getUrlModel()->getUrl($product);
Mage::unregister('current_category');
}
这不是最快的方法(集合中的每个产品现在都需要在单独的查询中加载URL重写),但是如果您正在寻找一种快速的解决方案,那可能是最简单的方法