如您所知,如果您的产品共享网址密钥,则网址密钥会附加一个数字:
即
http://www.example.com/main-category/sub-category/product-name-**6260**.html
如何找到6260的源(这是我的网址附加的#之一)?我试过产品ID,sku,我找不到它的来源。我问的原因是因为如果我能找到它,我可以创建一个字符串替换函数,以便在我在某些产品列表页面上回显之前将其从url中清除。
感谢。
答案 0 :(得分:22)
在我们到达代码中的位置之前,请注意您正在进入痛苦的世界。
关于如何生成这些数字,没有简单规则。在某些情况下,它是商店ID,有些情况下它是简单的产品ID。在某些情况下,它既不是
即使有,但是从零开始的Magento网站通常会包含更改此功能的自定义功能
归根结底,由于Magento的人类可读/ SEO友好网址位于core_url_rewrite
表格中,因此人们可以插入任意文字
除了厄运的警告,您正在寻找的模型是Mage::getSingleton('catalog/url')
。这包含了生成Magento目录和产品重写的大部分逻辑。所有这些方法都以请求路径通过getUnusedPath
方法结束。
#File: app/code/core/Mage/Catalog/Model/Url.php
public function getUnusedPath($storeId, $requestPath, $idPath)
{
//...
}
此方法包含在URL末尾创建唯一编号的逻辑。完全追踪它完全超出了Stack Overflow帖子的范围,但这条线尤其令人启发/沮丧。
$lastRequestPath = $this->getResource()
->getLastUsedRewriteRequestIncrement($match[1], $match[4], $storeId);
if ($lastRequestPath) {
$match[3] = $lastRequestPath;
}
return $match[1]
. (isset($match[3]) ? ($match[3]+1) : '1')
. $match[4];
特别是这两行
$match[3] = $lastRequestPath;
//...
. (isset($match[3]) ? ($match[3]+1) : '1')
//...
如果不明显,有些情况下Magento会自动将1
附加到URL,然后继续增加它。这使得这些URL的生成在生成时依赖于系统状态 - 没有简单的规则。
此文件中的其他感兴趣的行
if (strpos($idPath, 'product') !== false) {
$suffix = $this->getProductUrlSuffix($storeId);
} else {
$suffix = $this->getCategoryUrlSuffix($storeId);
}
这个$suffix
也将在URL的末尾使用,因此这些方法值得研究。
如果你要做的只是删除网址中的数字,那么使用正则表达式或某些explode
/ implode
字符串jiggering可能会更好。
答案 1 :(得分:2)
我几乎不知道为什么会这样,但这对我有用。很可能是因为它使网址不唯一。 Magento ver。 1.7.0.2突然开始添加数字作为我的新产品名称的后缀,即使他们的网址和名称与旧产品不同。在预感时,我转到System -> Configuration -> Catalog -> Search Engine Optimizations -> Product URL Suffix
并将默认.html
更改为-prod.html
。我想你可以把它改成你想要的任何后缀。然后我重新索引了我的网站,刷新了缓存,然后!所有数字都从产品网址中消失了。产品网址现在都具有格式custom-product-name-prod.html
。规范标签还显示custom-product-name-prod.html
,所以我很开心。
不知道它是否适用于其他人,但我希望它能。请注意,我确实拥有包含重复URL的旧产品和新产品,并且在执行此过程之前我已禁用旧产品。因此,如果您有2个产品具有相同的网址密钥并且两个都已启用,那么这可能对您无效。
答案 2 :(得分:0)
有问题!当您在编辑产品中查看时,您会看到链接是正确的,但是在您的商店中,URL是不同的。
我的更改该产品的记录为279条。所以花了大约一个小时。