I am trying to load a rewrite rule based on a product’s URL path.
I am using the loadByRequestPath() method in Mage_Core_Model_Url_Rewrite to accomplish this. However, no matter what I supply this method I get the following result (Check comment in code):
public function loadByRequestPath($path)
{
Zend_Debug::dump($path); // returns the path to my module
$this->setId(null);
$this->_getResource()->loadByRequestPath($this, $path);
$this->_afterLoad();
$this->setOrigData();
$this->_hasDataChanges = false;
return $this;
}
Here is my module code:
$productRewrite = Mage::getModel('core/url_rewrite') ->loadByRequestPath($product->getUrlPath());
Oddly, I get this back:
Array ( [0] => rewrites/getProductRewrites
[1] => rewrites/getProductRewrites/ )
Array ( [0] => 01003-product-name )
So loadByRequestPath() is getting called twice for whatever reason. $productRewrite still returns an empty object.
I have verified that $product->getUrlPath() returns the correct path. (As seen in the second array)
I am on Magento 1.6.1.
Your question is still a little unclear, so this answer might not address the specific problem you’re seeing.
Magento’s core team hasn’t done a great job of communicating these sorts of things over the years, but
loadByRequestPathis one of those methods that’s best thought of as a “private api”. Not in the OOP sense, but in the “this is a method used to implement core system functionality, and probably won’t work like you think it should work, so use at your own risk”.The PHP code you’re trying to use
won’t work with a default installation of Magento because the rewrite object doesn’t have a store ID set. Trying something like this should work. (assuming the sample data, with an installed store object that has an ID of “1” and that the product in question exists in that store)
The
loadByRequestPathmethod assumes that a rewrite already has a store ID set, as it’s part of Magento’s larger dispatching process. (self-link to article describing the role of rewrites in Magento’s routing system)All that said, the problem you’re describing is somewhat confusing. You say that
returns
While I’m sure you know what the phrase “path to my module” means, it’s a meaningless term in the larger magento universe. Being more specific about the literal value will help people understand what you mean.
Additionally, you also say
but you’re not clear on the value of “the correct path”.
My guess would be the path you’re seeing in
Zend_Debug::dumpis the call that’s coming through as a part of the standard dispatch and not your later call using$product->getUrlPath(). However, the lack of clarity in your question makes that hard to tell.If setting the store ID doesn’t get you what you want, update your question with a full explanation of how you’re running your code, and what you see displayed. With that information more people will be able to help you.