Каков наиболее эффективный способ получения URL-адреса продукта только по его идентификатору? В некоторых местах нашего кода есть такие вещи, как, например Mage::getModel('catalog/product')->load($id)->getProductUrl()
, чтобы получить URL-адрес продукта, учитывая количество событий и т. Д., Связанных с продуктом, это кажется довольно расточительным, есть ли более простой метод? Возможность также указать идентификатор категории было бы неплохо.
Кроме того, существует ли эффективный способ сделать то же самое для одного атрибута продукта, такого как имя?
product
magento-1
url
performance
best-practice
Питер О'Каллаган
источник
источник
Ответы:
Интересно узнать, сможем ли мы получить URL продукта без загрузки всего продукта. Извините, что отвечаю на ваш дополнительный вопрос, а не на главный вопрос, так как я тоже не уверен, сможем ли мы его получить :)
Для получения одного атрибута без загрузки всего продукта, вы можете использовать,
getAttributeRawValue()
если вы используете Magento CE версии 1.6+Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);
Согласно комментарию @ philwinkle ниже, здесь приведен более оптимизированный код:
ОБНОВЛЕНИЕ: Получить URL продукта по идентификатору без загрузки всего продукта:
источник
getResourceSingleton
вместо этого. $ storeId не обязательно должен быть идентификатором, он также может бытьMage_Core_Model_Store
объектом, так что вы можете использоватьMage::app()->getStore()
inline, чтобы ускорить процесс.url_key
это может не сработать, потому что magento создаст другую перезапись URL из url_keyЯ думаю, что было бы полезно сделать это через коллекцию. Если вам не нужна полная информация о продукте, вы можете загрузить ее через коллекцию и загружать только ту информацию, которая вам нужна. Код будет следующим.
Примечание:
addUrlRewrite
чтобы вы могли получить URL продукта позже, он также может принимать идентификатор категории в качестве параметра, без этого URL не будет содержать категорию.Вы по-прежнему вызываете функцию,
getProductUrl()
которая в конечном итоге используетMage_Catalog_Model_Product_Url
, но для этого нужны только идентификатор, request_path и ключ url, поэтому он должен работать без полного продукта.источник
Я полагаю, что наиболее эффективный способ получить переписанный URL-адрес продукта (без загрузки продукта) - это посмотреть непосредственно на перезапись URL-адреса talbe.
Чтобы получить полный путь к категории, используйте
Редактировать: проверено на «url_key», для других атрибутов
getAttributeRawValue
должно соответствовать.getRequestPathByIdPath
getAttributeRawValue
load(productId)
источник
Я нашел этот вопрос, задаваясь вопросом то же самое. И на случай, если это понадобится кому-то другому, я опубликую свои собственные выводы здесь.
Я нашел два способа получения URL продукта без загрузки всего продукта. Поскольку я работал на медленном сервере, мне нужно было найти самый быстрый способ загрузки.
Первый способ:
Первый получает коллекцию продукта на основе идентификатора продукта:
Второй метод:
Второй метод, использующий метод Kalpesh Metha, был бы таким кодом:
Для этого метода вы можете использовать
'url_key'
или'url_path'
. Я не обнаружил разницу, хотя.Разница между методами:
Первый метод занимает немного больше времени (около 15% времени). Второй метод, однако, возвращает только последнюю часть URL. Это означает, что если магазин использует категорию в URL-адресе, он не будет работать, поскольку эта часть не отображается. Это был случай в магазине, над которым я работал.
источник