Drupal → Пропустить импорт определённых записей в Feeds

25.11.2014

Два способа не импортировать определённые записи через Feeds:

Способ 1 — на стадии парсинга данных:

/**
 * Implements hook_feeds_after_parse().
 */
function MODULENAME_feeds_after_parse(FeedsSource $source, FeedsParserResult $result) {
  if ($source->id == 'my_importer_machine_name') {
    foreach ($result->items as $key => $item) {
      // Пропускаем импорт термина с идентификатором 123
      if ($item['tid'] == 123) {
        unset($result->items[$key]);
      }
    }
  }
}

Способ 2 — на стадии сохранения сущности:

/**
 * Implements hook_feeds_presave().
 */
function MODULENAME_feeds_presave(FeedsSource $source, $entity, $item) {
  if ($source->id == 'my_importer_machine_name') {
    // Пропускаем импорт термина с идентификатором 123
    if ($entity->tid == 123) {
      $entity->feeds_item->skip = TRUE;
    }
  }
}
Написанное актуально для
Feeds 2
Похожие записи

Комментарии

Привет, столкнулся с такой проблемой, поле типа termrefereces. Задача проимпортировать с вложениями "1lvl/2lvl/3lvl", и создавать не только термин но и родителей, если они не существуют. Просто указать последний термин "lvl3" не подходит потому, что он может быть не один с таким название в таксономии.
Как бы ты решал такую задачу?

Кстати а вы не интерисовались импортом переводов нод через Feeds так чтобы связать сразу с нодой источником? Буду премного благодарен если осветите данный вопрос

А как можно проверить поле товара? Например, если поле товара "Поставщик" равно "Склад", то запись пропускаем. Это из MODULENAME_feeds_presave можно сделать? Или другой хук нужен?

можно

А может подскажите как обратиться к произвольному полю товара из этого хука?

так же как и везде - $entity->имя_поля

Здравствуйте!

Подскажите, пожалуйста, а как проконтролировать ещё до парсинга условие, что имя импортируемого файла содержит, например, "abcde", и не запускать импорт, если это условие не соблюдено?

Спасибо!

повесьте #validate на форму импорта

xandeadx, cпасибо за совет! Вот, что-то подобное получилось.

function my_module_form_alter(&$form, &$form_state, $form_id) {
    if ($form_id == 'feeds_import_form') {
        
        $form['#validate'][] = 'my_module_import_form_validate';
        
    }
}

function my_module_import_form_validate($form, &$form_state)
{
    $importer_id = $form_state['complete form']['#importer_id'];
    
    if ($importer_id == 'my_importer_id') {
        
        $upload_filename = $form_state['values']['feeds']['FeedsFileFetcher']['file']->filename;
        
        if (strpos($upload_filename, 'abcde') === false) {
            
            form_set_error('feeds][FeedsFileFetcher', 'Не тот файл!');
            
        }
    }
}

Добавить комментарий