Задача импорта контента часто бывает нетривиальной для веб разработчика. Писать импорт "с нуля" для каждого случая - далеко не оптимальный вариант, поэтому мы рекомендуем использовать уже существующие решения, например - Migrate, Feeds.
Рассмотрим детальнее модуль Feeds. Архитектурно он состоит из набора плагинов. Основные плагины - это:
Fetcher - выполняет роль поставщика данных для дальнейшего разбора и импорта;
Parser - осуществляет разбор данных и формирует массивы элементов для дальнейшего импорта;
Processor - обрабатывает данные от разборщика, определяет в какие поля записывать полученные данные и собственно сохраняет/обновляет контент.
В этой статье мы рассмотрим напсание плагина для разборщика (Parser). Импортировать будем XML-файл, который был получен с помощью модуля Views Data Export. Возможно кто-то скажет, что нет смысла писать свой плагин, ибо Feeds "из коробки" предоставляет свой плагин разбора XML. Это так, но для того, чтобы заставить его работать, нужно существенно переделать вывод VDE. Написание своего разборщика менее трудозатратно.
Итак, создадим модуль custom_parser. Содержание файла custom_parser.info:
name = Custom Parser description = Contains feeds plugins for XML import. core = 7.x version = 7.x-1.0 files[] = CustomParserXML.inc
В файле custom_parser.module объявляем hook_feeds_plugins(), в котором описываем наш плагин разборщика:
/**
* Implements hook_feeds_plugins().
*/
function custom_parser_feeds_plugins() {
return array(
'CustomParserXML' => array(
'name' => t('Custom XML parser'),
'description' => t('Parses XML as we want.'),
'handler' => array(
'parent' => 'FeedsParser',
'class' => 'CustomParserXML',
'file' => 'CustomParserXML.inc',
),
),
);
}
