Feeds не умеет обновлять термины по tid, только по name. Поэтому если в словаре есть термины с одинаковыми именами, то возникнут проблемы.
Чтобы обновлять существующие термины по tid, нужно:
1. Обновить Feeds до dev версии от 02.12.2014 или свежее.
2. В настройках процессора выбрать опцию Update existing terms:
3. В маппинг помимо tid добавить name с опцией Used as unique (в файле импорта этого поля быть не должно):
Поле description не обязательно, добавлено для примера.
4. Создать модуль с кодом:
/**
* Implements hook_feeds_after_parse().
*/
function MODULENAME_feeds_after_parse(FeedsSource $source, FeedsParserResult $result) {
if ($source->id == 'машинное_имя_импортера') {
foreach ($result->items as &$item) {
$item['name'] = taxonomy_term_load($item['tid'])->name;
}
}
}
Можно вместо кода воспользоваться Feeds Tamper.
5. Сбросить кэш.
Profit.
Пример csv файла:
tid;description
1;description for term 1
2;description for term 2
Комментарии
Привет!
А подскажи, как можно использовать для этого Feeds Tamper? Не могу сообразить чото..
>> Поэтому если в словаре есть термины с одинаковыми именами, то возникнут проблемы.
они и так возникнут :) feeds будет каждый раз находить один и тот же термин по имени.
Делается с помощью модуля Field Validation, без кода.
Достаточно указать поле как уникальное. Обновлял так 250 000 записей)))
Добрый вечер.
Курчатов, не могли бы Вы чуть подробнее - как связаны Field Validation и Feeds?
Поясню про Field Validation.
Этот модуль позволяет сделать любое текстовое поле уникальным для feeds. Соответственно в feeds появляется возможность делать поиск по этому уникальному полю.
На пример требуется обновить цену в соответствии с артикулом из csv.
Артикул при этом простое текстовое поле, которое feeds не считает уникальным.
Ставим Field Validation, делаем артикул уникальным полем => profit.
Feeds ищет товар по артикулу и меняет цену.
Добавить комментарий