11

您可能知道,如果您的产品共享一个 url 键,则 url 键将附加一个数字:

IE

http://www.example.com/main-category/sub-category/product-name-**6260**.html

我如何找到那个 6260 的来源(这是附加到我的网址的 # 之一)?我试过产品id,sku,我找不到它的来源。我问的原因是,如果我能找到它,我可以创建一个字符串替换函数,在我在某些产品列表页面上回显它们之前将其从 url 中清除。

谢谢。

4

3 回答 3

22

在我们到达发生这种情况的代码位置之前,请注意您正在进入一个痛苦的世界。

  1. 关于如何生成这些数字并没有简单的规则。有时是商店 ID,有时是简单的产品 ID。在某些情况下两者都不是

  2. 即使有,非从头开始的 Magento 网站也很常见包含改变这一点的自定义功能

  3. 最终,由于 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字符串抖动可能会更好。

于 2012-11-29T00:04:04.223 回答
2

我几乎不知道为什么会这样,但这对我有用。很可能是因为它使网址不唯一。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 键的产品并且都启用了,那么这可能不适合您。

于 2013-01-31T04:37:15.940 回答
0

有问题!当您查看编辑产品时,您可以看到链接是正确的,但在您的商店中,网址不同。

  • 第 1 步:编辑 URL 并将 SS 添加到自定义 URL 的末尾。按保存。\产品名称.html
  • 第 2 步:转到目录 -> URL 重写
  • 第 3 步:缩小标准以仅包括问题情况。按搜索。
  • 第 4 步:下载 Jib Bit Mouse Recorder/Macro Recorder。它免费我支付。
  • 第 5 步:编辑第一次重写。按删除和确定。
  • 第 6 步:按 JitBit 上的录制。编辑第一次重写。删除。好的。按停止。
  • 第 7 步:下拉播放选择 X 次。写入记录数。按确定。
  • 第 8 步:观看节目为您删除所有记录。
  • 第 9 步:目录 -> 管理产品。从自定义 URL 的末尾删除 SS。不要检查创建重定向。固定的。

我的是 279 条更改该产品的记录。所以花了大约一个小时。

于 2018-09-30T11:58:05.833 回答