Magento 1 - 删除 url 键/产品 url 中的数字

Posted

技术标签:

【中文标题】Magento 1 - 删除 url 键/产品 url 中的数字【英文标题】:Magento 1 - Removing numbers in url key/product url 【发布时间】:2012-11-28 21:27:37 【问题描述】:

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

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

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

谢谢。

【问题讨论】:

您是否查看了管理区域中的 URL 重写?从this SO 上的帖子,以及我自己所见,这与 URL 重写和索引问题有关 我担心的是我正在控制一个拥有 数千个 可配置产品的网站(这就是导致 url 键重复的原因),之前没有人处理过这个问题。我不确定管理员中是否有一个部分可以一口气解决这个问题。我担心的是,与您提到的那篇帖子不同,我的带数字的网址是动态的,我找不到真正的模式。这就是为什么我想知道是否有一种动态方法可以找出动态附加数字的来源。这是我的担忧。显然有一个函数可以控制它...谢谢。 刚刚想了想,可配置产品的URL键与简单产品的URL key有什么不同吗?如果没有,这也会引起问题 那是我的地狱,正确的。简单和分组的产品共享该 url 密钥,并且有数千种此类产品,并且上帝知道它们共享 url 多少次。大多数产品,当我使用函数来提取产品类别网址时,都可以正常工作。但他们中的一些人偷袭了一切。所以我想知道什么功能可以控制这个,或者是否有办法说“附加一个 sku,而不是这个神秘数字”。我想重点是,它是基于# of url key issues,而不是与产品本身有关的东西?例如,如果有 2500 个重复项,一个 url 键将有 2500 个? 【参考方案1】:

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

    没有关于如何生成这些数字的简单规则。有时是商店 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 会自动将1 附加到 URL,然后继续增加它。这使得这些 URL 的生成依赖于它们生成时的系统状态——没有简单的规则。

此文件中其他感兴趣的行是

if (strpos($idPath, 'product') !== false) 
    $suffix = $this->getProductUrlSuffix($storeId);
 else 
    $suffix = $this->getCategoryUrlSuffix($storeId);
    

$suffix 也将用于 URL 的末尾,因此这些方法值得研究。

如果您只想从 URL 中删除数字,则最好使用正则表达式或一些 explode/implode 字符串抖动。

【讨论】:

值得注意的是,1.7 中似乎存在一个错误,导致 Magento 滚动总是为任何具有重复名称的产品生成一个新值。不管自上次运行 reindex 以来是否有任何变化。 抱歉,不小心发帖了。在公共汽车上很难在手机上打字。更新更多细节。 Alan,是你教会了我在 Magento 中所学的东西,所以非常感谢你。 Cags,请注意:1.7。我将对此进行调查并等待您提到的更新。我认为 Alan 是对的,唯一真正的解决方案是销毁附加到 url 的 3-4 位数字,然后打印出一个“干净”的 url,这样它就可以保证它会加载而不是遇到 404 错误。谢谢。 我们如何获得url_key,它在catalog_product.list SOAP API 中返回带有数字的url?我目前得到的 url 没有附加数字(chelsea-tee),这在许多产品中仍然很常见。我需要产品的唯一 URL(chelsea-tee-720),我可以使用它直接导航到产品。 @AlanStorm 我已经公开了自定义 API 包装 catalog_product.list 但不知道如何获取可访问的 URL。【参考方案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 键的产品并且都启用了,那么这可能不适合您。

【讨论】:

【参考方案3】:

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

第 1 步:编辑 URL 并将 SS 添加到自定义 URL 的末尾。按 保存。 \product-namess.html 第 2 步:转到目录 -> URL 重写 第 3 步:缩小标准以仅包括问题情况。 按搜索。 第 4 步:下载 Jib Bit 鼠标记录器/宏 录音机。它免费我支付。 步骤 5:编辑第一次重写。按 删除并确定。 第 6 步:在 JitBit 上按录制。编辑第一次重写。 删除。好的。按停止。 步骤 7:在播放旁边下拉选择 X 时代。写入记录数。按确定。 第 8 步:观看 程序为您删除所有记录。 第 9 步:目录 -> 管理 产品。从自定义 URL 的末尾删除 SS。不检查 创建重定向。已修复。

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

【讨论】:

安全使用鼠标记录器。你一生只能用手指点击这么多次。

以上是关于Magento 1 - 删除 url 键/产品 url 中的数字的主要内容,如果未能解决你的问题,请参考以下文章

Magento - 购买可下载产品时删除帐单和运输信息

Magento 1.9 magmi 导入产品图像后,当该产品从管理员保存时,它会删除图像

如何在 Magento 中使用产品 URL 附加类别和子类别 slug

Magento:通过 API 删除产品后更新购物车总数

Magento:产品sku和url

Magento:删除产品特价“从”和“到”日期要求