Я нашел этот вопрос, задаваясь вопросом то же самое. И на случай, если это понадобится кому-то другому, я опубликую свои собственные выводы здесь.
Я нашел два способа получения URL продукта без загрузки всего продукта. Поскольку я работал на медленном сервере, мне нужно было найти самый быстрый способ загрузки.
Первый способ:
Первый получает коллекцию продукта на основе идентификатора продукта:
$_item = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('product_url')
->addAttributeToFilter('entity_id', $productId)
->addUrlRewrite()
->load();
foreach($_item as $product){
echo $product->getProductUrl();
}
// returns string "http://www.your-domain.com/[category]/[product_url]"
Второй метод:
Второй метод, использующий метод Kalpesh Metha, был бы таким кодом:
Mage::getResourceSingleton('catalog/product')
->getAttributeRawValue($productId, 'url_key', Mage::app()->getStore());
// returns string "product-url-like-this"
Для этого метода вы можете использовать 'url_key'
или 'url_path'
. Я не обнаружил разницу, хотя.
Разница между методами:
Первый метод занимает немного больше времени (около 15% времени). Второй метод, однако, возвращает только последнюю часть URL. Это означает, что если магазин использует категорию в URL-адресе, он не будет работать, поскольку эта часть не отображается. Это был случай в магазине, над которым я работал.