在prestashop错误中上传类别语言

时间:2015-02-23 11:08:54

标签: php csv import prestashop

我正在尝试使用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链接重写是从SQL中的类别名称转换而来的,如下所示:

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

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

注意前80行是正确的,它不是导致这种导入失败的语言,在法语中它会抛出相同的错误,因为有一个“;”在描述中的字符,我在这里看不到任何错误,我希望你们中的一个可以帮助我这个

提前谢谢!

2 个答案:

答案 0 :(得分:0)

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

在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;
}

请记住在上传后还原更改

答案 1 :(得分:0)

“URL / SEO”标签中有一个设置允许或禁止非拉丁语(例如西里尔字母)字符。这段代码基本上都会检查这个。