您可能知道,如果您的产品共享一个 url 键,则 url 键将附加一个数字:
IE
http://www.example.com/main-category/sub-category/product-name-**6260**.html
我如何找到那个 6260 的来源(这是附加到我的网址的 # 之一)?我试过产品id,sku,我找不到它的来源。我问的原因是,如果我能找到它,我可以创建一个字符串替换函数,在我在某些产品列表页面上回显它们之前将其从 url 中清除。
谢谢。
您可能知道,如果您的产品共享一个 url 键,则 url 键将附加一个数字:
IE
http://www.example.com/main-category/sub-category/product-name-**6260**.html
我如何找到那个 6260 的来源(这是附加到我的网址的 # 之一)?我试过产品id,sku,我找不到它的来源。我问的原因是,如果我能找到它,我可以创建一个字符串替换函数,在我在某些产品列表页面上回显它们之前将其从 url 中清除。
谢谢。
在我们到达发生这种情况的代码位置之前,请注意您正在进入一个痛苦的世界。
关于如何生成这些数字并没有简单的规则。有时是商店 ID,有时是简单的产品 ID。在某些情况下两者都不是
即使有,非从头开始的 Magento 网站也很常见包含改变这一点的自定义功能
最终,由于 Magento 的人类可读/SEO 友好的 URL 位于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 会自动将 a 附加1
到 URL,然后继续增加它。这使得这些 URL 的生成依赖于它们生成时的系统状态——没有简单的规则。
此文件中其他感兴趣的行是
if (strpos($idPath, 'product') !== false) {
$suffix = $this->getProductUrlSuffix($storeId);
} else {
$suffix = $this->getCategoryUrlSuffix($storeId);
}
这$suffix
也将用于 URL 的末尾,因此这些方法值得研究。
如果您想要做的只是从 URL 中删除数字,那么使用正则表达式或一些explode
/implode
字符串抖动可能会更好。
我几乎不知道为什么会这样,但这对我有用。很可能是因为它使网址不唯一。Magento 版本。1.7.0.2 突然开始为我的新产品名称添加数字作为后缀,即使它们的 url 键和名称与旧产品不同。凭直觉,我去了System -> Configuration -> Catalog -> Search Engine Optimizations -> Product URL Suffix
并将默认设置更改.html
为-prod.html
. 我想您可以将其更改为您想要的任何后缀。然后我重新索引了我的网站,刷新了缓存,然后很快!所有数字都从产品网址中消失了。产品网址现在都具有格式custom-product-name-prod.html
。规范标签也显示custom-product-name-prod.html
,所以我很高兴。
不知道它是否适用于其他人,但我希望它会。请注意,我确实有具有重复 URL 的新旧产品,并且在执行此过程之前我已禁用旧产品。因此,如果您有 2 个具有相同 url 键的产品并且都启用了,那么这可能不适合您。
有问题!当您查看编辑产品时,您可以看到链接是正确的,但在您的商店中,网址不同。
我的是 279 条更改该产品的记录。所以花了大约一个小时。