在 prestashop 错误中上传类别语言

Uploading category languages in prestashop error

我正在尝试使用 Prestashop 自己的 CSV 导入将类别从 osCommerce 2.2 迁移到最新的 Prestashop。我已经成功上传了英语、芬兰语、德语、意大利语和法语类别的语言。我现在面临俄语问题。 CSV 文件导入正常,直到第 85-86 行,它们是:

85;"Соусы для чипсов";"Чипсы, орехи, и снаксы";;http://localhost/images/pepper.jpg;соусы-для-чипсов

86;"Чипсы, орехи, и снаксы";"Финские продукты питания";"<strong>Внимание! ПРОЧИТАЙТЕ ПРЕЖДЕ, ЧЕМ СДЕЛАТЬ ЗАКАЗ</strong>Поскольку пакеты со снаксами занимают очень много места, нам приходится закладывать в стоимость их доставки двойной вес, т.е., например, для пакета весом 250 г. стоимость доставки будет такой же, как для 500 г. более плотного товара.""<em>Стоимость доставки определяется по объемному весу или по фактическому весу, в зависимости от того, что больше.</em>""<a target=""_blank"" href=""http://www.posti.fi/hinnat/paketitulkomaille/"">http://www.posti.fi</a>";http://localhost/images/sips.jpg;чипсы-орехи-и-снаксы

注意第84行经过:

84;"Переведенные на финский книги";Книги;;http://localhost/images/potter.jpg;переведенные-на-финский-книги

为您澄清 CSV:

ID;Name;Parent;Description;Img_uri;Url_rewrite

它抛出一个很长的错误,但亮点在开头:

Чипсы, орехи, и снаксы (ID: null) cannot be saved
Property Category->link_rewrite is not valid
Соусы для чипсов (ID: 85) cannot be saved
Чипсы, орехи, и снаксы (ID: 86) cannot be saved

由于某种原因 ID 为空,这可能是原因还是症状?

SEO link 重写是从 SQL 中的类别名称转换而来的,如下所示:

LOWER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(cd.categories_name, ' ', '-'), "\'", ''), ',', ''), '.', '-'), '&', ''), '(', '-'), ')', '-'), '!', ''), '/', '-'), '+', '-'), ';', '')) AS URL_rewrite

我知道这是一种非常丑陋的方法,但据我所知,这是我唯一的最佳选择。

注意前 80 行正确通过,不是导入失败的语言,在法语中它抛出了同样的错误,因为有一个“;”描述中的字符,我在这里看不出任何错误,希望你们中的一个能帮助我解决这个问题

提前致谢!

我没有找到合理的解释,所以我四处走动,无论如何都将 link_rewrite 验证更改为 return true。已检查并且 link 有效。希望有一天这对某人有所帮助。

在ROOT/Classes/Validate.php

第 325 行:

public static function isLinkRewrite($link)
{
    if (Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL'))
        return preg_match('/^[_a-zA-Z0-9\-\pL]+$/u', $link);
    return preg_match('/^[_a-zA-Z0-9\-]+$/', $link);
}

改为:

public static function isLinkRewrite($link)
{
    if (Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL'))
    //  return preg_match('/^[_a-zA-Z0-9\-\pL]+$/u', $link);
    //return preg_match('/^[_a-zA-Z0-9\-]+$/', $link);
    return true;
}

记得在上传后还原更改

URL/SEO 选项卡中有一个允许或禁止非拉丁字符(例如西里尔字符)的设置。此代码基本上检查此。