Как пропатчить модуль Node Import? Знания английского приветствуются. [Вроде решено]

Главные вкладки

Аватар пользователя VasyOK VasyOK 27 ноября 2009 в 12:20

Проблема: модуль 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
Знаком + отмечено какие строки добавить, знаком - какие удалить.
На вот эти строки

@@ -56,14 +56,21 @@
'values' => $values,

плюем 2 раза.

Конкретно к моей задаче. Есть таблица товаров со столбцами.
| Название | Код | Каталог | Цена |
|Лапата E14| E14 | Лопаты | 15.08 |

Обновлять товары я буду по столбцу Код. Обращаю внимание, что этот столбец в CSV файле не должен быть первым.

Далее запускаем пропатченый модуль и в (кажться) 8-м шаге указываем ключевое поле Код. Все

Если кто-то может сказать на эту тему еще что-то -- прошу.

Комментарии

Аватар пользователя VasyOK VasyOK 27 ноября 2009 в 14:03

Не понимаю volocuga при чем тут это. Там по ходу нужно кусок кода скопировать в модуль. А куда именно я не понял. И в какую именно версию модуля это вставить в рабочую или в dev. И нужно ли в CSV файле новый стролбец с именем NID делать?

Аватар пользователя volocuga volocuga 27 ноября 2009 в 16:14

Отношение прямое.Я вам дал ссылку,где описано РУССКИМ,как патчить специальным клиентом.Можно также патчить вручную,что иногда весьма утомительно.
В файле патча плюсиками обозначены строки,которые нужно добавить в файл,который патчится,а минусиками - те которые нужно удалить.Всё просто

Подробнее об этом (готовьте гуглепереводчик) http://drupal.org/patch

Аватар пользователя volocuga volocuga 28 ноября 2009 в 1:55

Нас интересуют ТОЛЬКО плюсики и минусики. Есть также служебные коды,из которых нам важны те,которые указывают для какого файла тот или иной кусок патча.

Аватар пользователя VasyOK VasyOK 29 ноября 2009 в 9:50

volocuga, спасибо за оперативную инфу по + и -. Пропатчил ручками.

А вот как пропатчить модуль TortoiseCSV пока не вкурил. Вот есть распакованный модуль, есть патч и есть эта программка. И как это все склеить?

Аватар пользователя psyh psyh 1 декабря 2009 в 23:04

VasyOK Нашел решение?
Я тоже хочу заставить Node import обновлять ноды. Как смог почитал по ссылке. Но мало что понял.

Аватар пользователя volocuga volocuga 2 декабря 2009 в 1:19

"VasyOK" wrote:
А вот как пропатчить модуль TortoiseCSV пока не вкурил.

Из того дистрибутива для патчей утилита Merge,с заплаткой иконка

Аватар пользователя S_anches S_anches 13 декабря 2009 в 18:43

Обновление почему то не работает. Выбирал и артикул(sku) и описание... Один фиг добавляет новые продукты. Нашел такой вот модуль патченный http://www.ubercart.org/contrib/5221#comment-46436
Он обновляет нормально, но вот не задача, когда жмешь start import, он начинает обновлять и обновлять, и это длится до бесконечности, по кругу. В итоге он обновляет продукты, но почему то у продукта пропадает taxonomy.

Аватар пользователя VasyOK VasyOK 13 декабря 2009 в 23:06

Я этот модуль с Уберкатром и не пробовал. В приведенной мной ссылке про Уберкарт говорится отдельно и я не понял что. Да я малость ошибся там нет модуля, который обновляет по SKU но думаю можно прибавить к товару поле Код и обновлять по нему.

А в приведенной вами ссылке тоже как видимо несколько вариантов патчинга. Вы их все попробовали? Попробуйте и обязательно напишите что у вас получилось.

Аватар пользователя VasyOK VasyOK 14 декабря 2009 в 15:08

А поробуйте сделать новый тип документа Товар (без Уберкарта), довить к нему поле КОД и провести импорт с парой значений. Если не работает значит что-то неправильно делаете.

Аватар пользователя S_anches S_anches 14 декабря 2009 в 19:23

Тоже самое. Я беру node_import dev версии, беру первый патч, командой patch он у меня не хочет патчится, делал руками патч.

Аватар пользователя psyh psyh 16 декабря 2009 в 12:40

А что значит обновление: по задаваемомоу ключевому полю и по NID?

По ключевому полю, то я понимаю так: если ключевое поле осталось неизменным а остальные поля изменились, то нода изменяется. Если ключевое поле изменилось, то создается новая нода.
Так?

Аватар пользователя VasyOK VasyOK 16 декабря 2009 в 17:52

S_anches, на днях постараюсь описать более конкретно как я решал свою проблему.

Psyh, как обновлять по NID я не знаю. Ключевое воле, значит не должно быть двух записей с одним ключевым полем, т.е. оно должно быть уникальным. И если к ппримеру меняете цены на товары ключевое поле менять не надо.

Вроде вы правильно понимаете.

Аватар пользователя S_anches S_anches 17 декабря 2009 в 11:42

Я сделал так.
В файле 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: Спасибо за помощь, щас посмотрю.