【问题标题】:Use non-lating characters for product and category URL key in magento在 magento 中使用非拉丁字符作为产品和类别 URL 键
【发布时间】:2010-12-07 08:47:10
【问题描述】:

Magento 将产品和类别的 URL 键中的非拉丁字符转换为拉丁字符。如何使用非拉丁字符?

Mage/Catalog/Model/Product/Url.php 中的formatUrlKey 使用Mage/Catalog/Helper/Product/Url.php 中的$_convertTable。我已尝试更改代码,但无法让 Magento 保存非拉丁 URL 并在管理员中正确显示它们。

按照您的建议,我已从 $_convertTable 中删除了希伯来字母。 问题是 formatUrlKey 用 '-' 替换不是 0-9 或 a-z 的字符:

public function formatUrlKey($str)
{
    $urlKey = preg_replace('#[^0-9a-z]+#i', '-', Mage::helper('catalog/product_url')->format($str));
    $urlKey = strtolower($urlKey);
    $urlKey = trim($urlKey, '-');

    return $urlKey;
}

所以我重写了这个方法并将其更改为:

$urlKey = preg_replace('#[^0-9a-zא-ת]+#i', '-', Mage::helper('url')->format($str));

现在,magento 可以正确保存并显示 url 字符串,但它在浏览器中不起作用。 尝试访问产品 url 时出现 404。

如果我只使用 strtolower 和 trim 而不是 preg_replace:

$urlKey = urlencode($str);

它也不起作用,因为 magento 多次调用 formatUrlKey。 我不明白为什么。

谢谢

【问题讨论】:

    标签: url magento


    【解决方案1】:
    【解决方案2】:

    由于 Magento 只是从表中进行盲目转换,因此从表中删除条目将阻止 Magento 尝试转换它们。覆盖辅助类并删除您不想看到的条目,您应该会顺利进行。

    就在管理面板中正确显示它们而言,如果您保存这些非拉丁字符,这是否是一个单独的问题?更具体的信息会有所帮助。

    【讨论】:

    • 如果我将 formatUrlKey 函数更改为不更改 str 并手动保存 url 编码的字符串 (%D7%90%D7%91%D7%92),它会在前端正确显示为אבג 和产品页面的链接有效。
    猜你喜欢
    • 1970-01-01
    • 2010-10-06
    • 2013-05-05
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多