Magento - 按网址加载产品

Nic*_*rty 8 magento

如果产品ID不可用且只有产品的网址,那么如何在Magento中加载产品模型?例如,我想从它友好的URL中检索产品模型,例如

electronics/cameras/olympus-stylus-750-7-1mp-digital-camera.html
Run Code Online (Sandbox Code Playgroud)

我在另一篇文章中找到了以下代码:

$oRewrite = Mage::getModel('core/url_rewrite')->loadByRequestPath(
    $path
);
Run Code Online (Sandbox Code Playgroud)

但它似乎没有正常工作.Magento的文档在这方面非常缺乏; 有谁知道如何做到这一点?

Jim*_*ran 19

这是另一种解决方案.

首先使用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);
Run Code Online (Sandbox Code Playgroud)

然后你可以在路由上调用getProductId()来找到produc的id:

    $iProductId = $oRewrite->getProductId();
Run Code Online (Sandbox Code Playgroud)

最后,如果您需要产品模型对象本身,那么调用它是一件简单的事情:

    $oProduct = Mage::getModel('catalog/product')->load($iProductId);
Run Code Online (Sandbox Code Playgroud)

上面的主要区别和你发布的代码示例是对setStoreId的调用.同一产品可能具有不同的URL,具体取决于它所在的商店,因此路由组件需要具有相应的商店上下文才能找到要显示的产品.

该上扎卡里Schuessler的解决方案的优点是使用URL重写每次都会找到正确的产品,如果该URL的结尾部分是针对不同的产品相同(例如文件夹1 /我的产品名称和文件夹2 /我 - 产品 - 名称是不同的产品).使用URL重写器也适用于"folder1/my-product"指不同商店中的不同产品的情况.这可能适用于您的环境,也可能不适用.