Magento - 删除url key/product url中的数字

Joe*_*oel 11 url numbers magento

您可能知道,如果您有共享网址密钥的产品,则网址密钥会附加一个数字:

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

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

谢谢.

Ala*_*orm 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)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

此方法包含用于在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];
Run Code Online (Sandbox Code Playgroud)

特别是这两行

$match[3] = $lastRequestPath;
//...
. (isset($match[3]) ? ($match[3]+1) : '1')
//...
Run Code Online (Sandbox Code Playgroud)

如果不是很明显,有些情况下Magento会自动将1一个URL 附加到一个URL,然后继续增加它.这使得这些URL的生成在生成时依赖于系统状态 - 没有简单的规则.

此文件中的其他兴趣点是

if (strpos($idPath, 'product') !== false) {
    $suffix = $this->getProductUrlSuffix($storeId);
} else {
    $suffix = $this->getCategoryUrlSuffix($storeId);
}    
Run Code Online (Sandbox Code Playgroud)

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

如果您要做的就是从URL中删除数字,那么使用正则表达式或某些explode/ implode字符串jiggering 可能会更好.