Посоветуйте, пожалуйста, какое-нибудь решение. Нужно импортировать порядка 15 тыс. нод с 12 полями (файлы - csv). Первые разы все загрузилось нормально, но после последующих удалений/загрузок Feeds перестал нормально работать – часть данных не загружается (в некоторых полях отсутствуют нужные данные), ноды создаются. Пробовал по-разному, на локальной машине, разбил файлы по 250 нод – всё равно данные полностью не загружаются. Ошибок не выдает. Есть ли какое-нибудь решение, пусть долго импортируется, но надежно?
Комментарии
Проблема, как я понимаю, в том, что есть числовые поля с пустыми и нулевыми значениями. Теперь даже если попытаться импортировать файл без пустых и нулевых значений, Feeds работает некорректно. Значения загружаются не верно. У других модулей такая же проблема или это специфика Feeds?
Тоже актуальна альтернатива.
У меня такой CSV:
текст;текст;текст;текст;текст;html;html
Почему-то, как бы я не извращался, две последние ячейки лезут в одно поле. Разделителей в тексте нет, пробовал брать в кавычки — один хрен.
Есть обходной путь, замнить угловые скобки на условные последовательности (в прошлый раз делал #.;# вместо ;), а потом прогнать базу через sed. Но в этот раз на сайт будет периодически добавляться информация, поэтому не вариант. Нужно стабильно рабочее решение без извратов.
В общем, надо выкинуть встроенный парсер и использовать PHP-шный.
*Файл
sites/all/modules/feeds/libraries/ParserCSV.inc
*Закомментировать строки с
// The actual parser. explode() is unfortunately not suitable because the
*По
// in the $fields array.
*Добавить после
$fields = str_getcsv($line, $this->delimiter, '','\\');
Всё, теперь корректно обрабатывается любой текст.
Тут возникает простор для разных вариаций. Например, разделитель можно поставить от фонаря:
$fields = str_getcsv($line, '|', '', '\\');
Либо символ экранирования использовать стандартный (\)
$fields = str_getcsv($line, $this->delimiter, '');