Magento - загрузить товар по URL - PullRequest
8 голосов
/ 13 февраля 2012

Как можно загрузить модель продукта в Magento, если идентификатор продукта недоступен и указан только URL-адрес продукта? Например, я хочу получить модель продукта из ее дружественного URL-адреса, например

electronics/cameras/olympus-stylus-750-7-1mp-digital-camera.html

Я нашел следующий код в другом сообщении :

$oRewrite = Mage::getModel('core/url_rewrite')->loadByRequestPath(
    $path
);

но, похоже, он работает неправильно. В этой области очень не хватает документации на Magento; Кто-нибудь знает, как этого добиться?

Ответы [ 2 ]

19 голосов
/ 13 февраля 2012

Вот альтернативное решение.

Сначала используйте модель перезаписи URL-адреса, чтобы найти маршрут, соответствующий вашему продукту:

    $vPath = 'electronics/cameras/olympus-stylus-750-7-1mp-digital-camera.html';
    $oRewrite = Mage::getModel('core/url_rewrite')
                    ->setStoreId(Mage::app()->getStore()->getId())
                    ->loadByRequestPath($vPath);

Затем вы можете вызвать getProductId () на маршруте, чтобы найти идентификатор продукта:

    $iProductId = $oRewrite->getProductId();

Наконец, если вам нужен сам объект модели продукта, тогда просто позвонить:

    $oProduct = Mage::getModel('catalog/product')->load($iProductId);

Основное различие между приведенным выше и примером кода, который вы опубликовали, заключается в обращении кsetStoreId.Один и тот же продукт может иметь разные URL-адреса в зависимости от того, в каком хранилище он находится, поэтому компоненту маршрутизации необходимо иметь соответствующий контекст магазина, прежде чем он сможет найти продукт для отображения.

Преимущество этого по сравнению с решением Захари Шуесслера заключается в том, чтос помощью переписывающего устройства URL каждый раз будет обнаруживаться нужный продукт, если конечные части URL-адреса одинаковы для разных продуктов (например, folder1 / my-product-name и folder2 / my-product-name - разные продукты).Использование средства перезаписи URL также работает в ситуациях, когда «folder1 / my-product» относится к разным продуктам в разных магазинах.Это может относиться или не относиться к вашей среде.

3 голосов
/ 13 февраля 2012

Мне любопытно, почему вам нужно это сделать, поскольку это может быть не лучшим решением. Это должно быть достаточно просто, используя метод addAttributeToFilter () в коллекции:

$path = 'folder/folder/my-product-name';

// Get the product permalink
$productName = explode('/', $path);
$productName = end($productName);

// Filter the url_path with product permalink
$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToFilter('url_path', $productName)
         ->getFirstItem();

Zend_Debug::dump($products->getData());exit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...