在prestashop中上载类别语言时出错


Uploading category languages in prestashop error

我正试图使用Prestashop自己的CSV导入将类别从osCommerce 2.2迁移到最新的Prestashop。我已经成功上传了英语、芬兰语、Deutch、意大利语和法语类别语言。我现在面临一个俄语问题。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链接重写是从SQL中的类别名称转换而来的,如下所示:

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

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

注意到前80行通过得很好,这并不是导入失败的语言,在法语中,它抛出了同样的错误,因为描述中有一个";"字符,我看不出有什么错误,我希望你们中的一个人能帮我处理这个

提前谢谢!

我没有找到合理的解释,所以我只是四处查看并更改了link_rewrite验证,无论如何都返回true。已检查,链接有效。希望有一天能帮助到别人。

在ROOT/Classes/Valide.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选项卡中有一个允许或不允许非拉丁字符(例如西里尔字母)的设置。这段代码主要检查这一点。