Форма поиска

Не получается?

Не получается решить проблему с Друпалом?

Готовы помочь делом и советом. Стоимость часа - 500 руб.

Запросить помощь

Поделитесь ссылкой:

Программный импорт с помощью feeds

Возникла задача - сделать интерфейс для редактора сайта, позволяющий выполнять импорт данных из файла CSV в материалы Друпала. Проще всего для этого использовать модуль Feeds, имеющий массу полезных расширений.

Сделаем форму загрузки файла для редактора сайта:

function module_form($form, &$form_state) {
  $form['info'] = array(
    '#markup' => '<div class="rinfo">Выберите файл CSV, загрузите его и нажмите "Обновить".</div>',
  );
 
  $form['reg_file'] = array(
    '#type' => 'managed_file',
    '#title' => 'Файл CSV',
    '#required' => TRUE,
    '#upload_location' => 'public://registry',
    '#upload_validators' => array(
      'file_validate_size' => array(10*1024*1024),
      'file_validate_extensions' => array('csv'),
    ),
  );
 
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Обновить',
  );
 
  return $form;
}

В #upload_location указан путь, по которому будет записан файл, в #upload_validators заданы ограничения: формат csv и максимальный размер 10 Мб. В остальном, обычная форма.

Часто перед импортом, надо проделать какие-то манипуляции с файлом CSV. Например, старые версии Excel не умели сохранять CSV в формате UTF-8. А может быть, требуется выкинуть какие-то строки из заголовка таблицы.

Сделам это в функции отправки формы.

 function module_form_submit($form, &$form_state) {
 
  // Создаем объект Друпала для загруженного редактором файла
  $src = file_load($form_state['values']['reg_file']);
 
  // Создаем временный файл, который будем использовать для импорта
  $dest = drupal_tempnam(file_directory_temp(), 'reg');
 
  // Открываем исходный файл для чтения
  $fsrc = fopen($src->uri, "r");
  if ($fsrc) {
    // а временный - для записи
    $fdest = fopen($dest, "w");
    if ($fdest) {
      $i = 0;
      while (($line = fgets($fsrc)) !== false) {
 
        // делаем что нам надо с каждой строкой. к примеру - меняем кодировку, 
        // удаляем выборочно строки и т.д. 
        $line = mb_convert_encoding($line, 'utf-8');
        fputs($fdest, $line);
      }
      fclose($fdest);
    }
    fclose($fsrc);
    file_delete($src);
  }
 
  // А теперь запускаем импорт. Здесь importer - это имя сценария импорта из списка feeds
  // по адресу /admin/structure/feeds  
  $source = feeds_source("importer");
 
  // Загружаем конфигурацию сборщика
  $fetcher_config = $source->getConfigFor($source->importer->fetcher);
  // подсовываем ему наш csv файл
  $fetcher_config['source'] = $dest;
  // и назначаем измененную конфигурацию
  $source->setConfigFor($source->importer->fetcher, $fetcher_config);
  $source->save();
  // поехали
  $source->startImport();
} 

В итоге, редактор сайта получает простую и ясную форму, через которую он может выбрать файл и синхронизировать содержание сайта с файлом CSV.

Полезна ли для вас эта информация?: 
Голосов еще нет
 

Комментарии

Интересная статья ..

Размещение и поддержка сайтов на Drupal

Предлагаем услуги по размещению и поддержке сайтов, разработанных как в нашем бюро, так в других веб-студиях.

Мы готовы взять на себя все работы по поддержке вашего сайта или электронного магазина и гарантируем его доступность и безопасность.

Подробнее ...

Предметная фотосъемка

Выполним профессиональную фотосъемку вашей продукции, офиса, производства, участка или любых других объектов.

Оплата услуг

Оплатить услуги разработки, модернизации, поддержки и размещения сайтов можно любыми удобными вам способами как в интернете, так и оффлайн. Оформляются все бухгалтерские документы.

Оплата услуг