Я пытаюсь перенести категории из osCommerce 2.2 в новейший Prestashop, используя собственный CSV-импорт 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
По какой-то причине идентификатор является нулевым, это может быть причиной или симптомом?
Переименование ссылок SEO преобразуется из названия категории в SQL следующим образом:
LOWER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(cd.categories_name, ' ', '-'), "\'", ''), ',', ''), '.', '-'), '&', ''), '(', '-'), ')', '-'), '!', ''), '/', '-'), '+', '-'), ';', '')) AS URL_rewrite
Я знаю, что это очень уродливый способ сделать это, но, насколько я знаю, единственный и единственный лучший вариант, который у меня есть.
Отмечая, что первые 80 строк проходят правильно, это не тот язык, который терпит неудачу в этом импорте, на французском языке он выбросил ту же ошибку, потому что был ";" характер в описании, я не вижу ничего плохого здесь, я надеюсь, что один из вас мог бы помочь мне с этим
Заранее спасибо!
Я не нашел для этого рационального объяснения, поэтому я просто обошел и изменил валидацию link_rewrite, чтобы вернуть истину, несмотря ни на что. Проверено, и ссылка работает. Надеюсь, это когда-нибудь поможет кому-то.
В 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 есть параметр, который разрешает или запрещает нелатинские (например, кириллические) символы. Этот код в основном проверяет это.