Проблема: модуль Node Import добавляет материалы на сайт из CSV файла. Нужно, чтобы была возможность не только добавлять новые, но и обновлять существующие материалы.
Т.е. если в CSV файле находится материал с уже имейющимся названием (или кодом), то существующая информация обновляется.
Решение. Патчить модуль Node Import. Как это сделать написано вроде бы здесь
http://drupal.org/node/422282
А вот что там написано я не совсем понимаю (да да я использую google translate). Помогите пожалуйста.
[Решение] Если кто-то это читает просьба обращать на дату публикации.
1. Качаем Модуль Node Import версии 6.x-1.0-rc4 6.x-1.x-dev (у меня получилось с dev)
2. Читаем беседу этих умных людей http://drupal.org/node/422282
3. В этой беседе несколько вариантов патча модуля
1) по задаваемомоу ключевому полю
2) по NID
3) по SKU - для Ubercart
Для моих нужд достаточно варианта 1). В посте 13 этой умной беседы есть ссылка на файл:
http://drupal.org/files/issues/node_import_update-422282_0.patch
Там написано (для тех кто до сих пор не знает :)), какие файлы нужно изменить в модуле, т.е.
supported/node.inc
node_import.inc
Знаком + отмечено какие строки добавить, знаком - какие удалить.
На вот эти строки
'values' => $values,
плюем 2 раза.
Конкретно к моей задаче. Есть таблица товаров со столбцами.
| Название | Код | Каталог | Цена |
|Лапата E14| E14 | Лопаты | 15.08 |
Обновлять товары я буду по столбцу Код. Обращаю внимание, что этот столбец в CSV файле не должен быть первым.
Далее запускаем пропатченый модуль и в (кажться) 8-м шаге указываем ключевое поле Код. Все
Если кто-то может сказать на эту тему еще что-то -- прошу.
Комментарии
http://drupaldance.com/lessons/patching
Не понимаю volocuga при чем тут это. Там по ходу нужно кусок кода скопировать в модуль. А куда именно я не понял. И в какую именно версию модуля это вставить в рабочую или в dev. И нужно ли в CSV файле новый стролбец с именем NID делать?
Отношение прямое.Я вам дал ссылку,где описано РУССКИМ,как патчить специальным клиентом.Можно также патчить вручную,что иногда весьма утомительно.
В файле патча плюсиками обозначены строки,которые нужно добавить в файл,который патчится,а минусиками - те которые нужно удалить.Всё просто
Подробнее об этом (готовьте гуглепереводчик) http://drupal.org/patch
А что значит вот это:
@@ -56,14 +56,21 @@
'values' => $values,
);
Тут ни + ни -
Нас интересуют ТОЛЬКО плюсики и минусики. Есть также служебные коды,из которых нам важны те,которые указывают для какого файла тот или иной кусок патча.
volocuga, спасибо за оперативную инфу по + и -. Пропатчил ручками.
А вот как пропатчить модуль TortoiseCSV пока не вкурил. Вот есть распакованный модуль, есть патч и есть эта программка. И как это все склеить?
VasyOK Нашел решение?
Я тоже хочу заставить Node import обновлять ноды. Как смог почитал по ссылке. Но мало что понял.
man patch почитайте лучше, всё коротко и ясно
Из того дистрибутива для патчей утилита Merge,с заплаткой иконка
Psyh, разжевал, как смог. Решение написал сверху.
Merge посмотрю.
Спасибо большое. Разберусь с текущими задачами, примусь за node import.
Обновление почему то не работает. Выбирал и артикул(sku) и описание... Один фиг добавляет новые продукты. Нашел такой вот модуль патченный http://www.ubercart.org/contrib/5221#comment-46436
Он обновляет нормально, но вот не задача, когда жмешь start import, он начинает обновлять и обновлять, и это длится до бесконечности, по кругу. В итоге он обновляет продукты, но почему то у продукта пропадает taxonomy.
Я этот модуль с Уберкатром и не пробовал. В приведенной мной ссылке про Уберкарт говорится отдельно и я не понял что. Да я малость ошибся там нет модуля, который обновляет по SKU но думаю можно прибавить к товару поле Код и обновлять по нему.
А в приведенной вами ссылке тоже как видимо несколько вариантов патчинга. Вы их все попробовали? Попробуйте и обязательно напишите что у вас получилось.
Я пробовал именно патченный модуль от чела zeezhao
и вот так вот плохо он себя ведет.
Добавил новое поле code, сделал его как ключевое по которому обновлять, и нифига не обновляет он =(((
А поробуйте сделать новый тип документа Товар (без Уберкарта), довить к нему поле КОД и провести импорт с парой значений. Если не работает значит что-то неправильно делаете.
Тоже самое. Я беру node_import dev версии, беру первый патч, командой patch он у меня не хочет патчится, делал руками патч.
И нифига не обновляется =(((
А что значит обновление: по задаваемомоу ключевому полю и по NID?
По ключевому полю, то я понимаю так: если ключевое поле осталось неизменным а остальные поля изменились, то нода изменяется. Если ключевое поле изменилось, то создается новая нода.
Так?
S_anches, на днях постараюсь описать более конкретно как я решал свою проблему.
Psyh, как обновлять по NID я не знаю. Ключевое воле, значит не должно быть двух записей с одним ключевым полем, т.е. оно должно быть уникальным. И если к ппримеру меняете цены на товары ключевое поле менять не надо.
Вроде вы правильно понимаете.
Так, S_anches написал вот здесь http://www.drupal.ru/node/38194 очень очень подробно. Даже пропатченый модуль туда кинул. И добавляет и обновляет. Пока без Уберкарта. Уберкарт на очереди.
Я сделал так.
В файле supported/node.inc уже пропатченном, поменял:
if (isset($options['key'])) {
$key = $options['key'];
$key_cckfield = $fields[$key]['cck:fieldname'];
$key_value = $values[$key];
if (isset($key_value)) {
$field = content_fields($key_cckfield);
$key_dbinfo = content_database_info($field);
$row = db_fetch_array(db_query("SELECT nid, vid FROM {uc_products} WHERE $key = \"$key_value\" LIMIT 1", $key_dbinfo['table'], $key_dbinfo['columns']['value']['column'], $key_value));
}
if (!empty($row)) {
$values['nid'] = $row['nid'];
$values['vid'] = $row['vid'];
}
}
поменял строку $row на строку от сюда: http://drupal.org/node/422282#comment-2126666
И всё, теперь продукты обновляются по SKU.
P.S. Тут я привел уже готовую строку. В коментарии по ссылке выше, там в запросе к базе стоит {drupal.uc_products}, уберите "drupal." или замените drupal на имя своей базы данных.
To VasyOK: Спасибо за помощь, щас посмотрю.
S_anches, VasyOK, Спасибо вам!