- Алгоритм, который упростит вам жизнь
- Алгоритм импорта данных в интернет-магазин
- Реализация
- Принцип алгоритма
- Заметки для ведущего
- План урока
- Упражнения
- Оценка
- Пример урока
- Как импортировать контент
- Данные модульного теста темы
- PlaceKitten
- Импорт данных в интернет-магазины
- How to predefine demo imports?
- How to automatically assign «Front page», «Posts page» and menu locations after the importer is done?
- А как насчет использования локальных файлов импорта (из папки темы)?
- Как обрабатывать различные «настройки после импорта» в зависимости от того, какой предопределенный импорт был выбран?
- Могу ли я добавить немного кода перед импортом виджетов?
- Как отключить создание уменьшенных изображений (миниатюр) при импорте контента
- Как изменить расположение, заголовок и другие параметры страницы плагина?
- Как установить демо-данные?
- Я активировал плагин. Где находится страница «Импорт демо-контента»?
- Где сохраняются файлы импорта демо и файлы журналов?
- Как заранее определить импорт демо?
- Как автоматически назначить «Главную страницу», «Страницу сообщений» и расположение меню после завершения импорта?
- А как насчет использования локальных файлов импорта (из папки темы)?
- Как обрабатывать различные «настройки после импорта» в зависимости от того, какой предопределенный импорт был выбран?
- Могу ли я добавить немного кода перед импортом виджетов?
- Как отключить создание уменьшенных изображений (миниатюр) при импорте контента
- Как изменить расположение, заголовок и другие параметры страницы плагина?
- 1. Импорт базы данных в формате в PostgreSQL
- 3. Экспорт данных в .csv-файл
- 4. Экспорт данных выборки в .csv-файл
Алгоритм, который упростит вам жизнь
В первую очередь, полностью контролируется код модулей импорта, всегда можно оперативно внести изменения. Второе, что тоже очень важно, — это интеграция модулей в линейку ПО.
Что особенного в модулях импорта? Это большое количество параметров, которые влияют на процесс импорта данных. Ниже приведена упрощенная схема алгоритма импорта данных в модулях CatalogLoader.
Алгоритм импорта данных в интернет-магазин
Реализация
На следующем изображении показан стандартный диалог выгрузки из ПО CatalogLoader в OpenCart:
Стандартные параметры для OpenCart:
— Отключать товары (определяет возможность отключать “исчезнувшие” товары).
— Префикс артикулов, которые не нужно обновлять.
— Префикс базы данных.
— Путь к файлу Catalogloader_handler.php.
— Путь к файлу delete_cache.php (характерно именно для OpenCart).
Стоит отметить, что стандартный модуль импорта, который предоставляется пользователям, не обладает всем набором параметров, доступных в алгоритме. Это сделано сознательно для того, чтобы не загромождать интерфейс и чтобы у пользователей не возникало дополнительных вопросов. Этих параметров достаточно для подавляющего большинства проектов. И только части необходимы специальные параметры, которые доступны в специальном режиме.
На следующем изображении показан стандартный диалог выгрузки в Битрикс через протокол 1С-Exchange:
Особенности:
— поддержка протокола 1С-Exchange.
— поддержка режима «отладки». Часто этот режим является единственным вариантом импорта в Битрикс.
Принцип алгоритма
Принцип алгоритма построен на следующей идее. Входными данными для алгоритма является локальная база данных с новым состоянием интерент-магазина (мы это называем КЛП-базой). Т.е. после завершения процесса импорта КЛП-база “перетечет” в требуемую базу данных CMS. Полностью или нет, с какими-то особенностями или нет — это уже зависит от настроек самого процесса импорта данных, которые определяет пользователь.
Ниже приведены техническая информация, которая будет интересна интеграторам и разработчикам, — параметры, которые влияют на ход процесса импорта данных.
Конечно, везде есть много нюансов, не всегда и не для каждой CMS получается поддержать все параметры алгоритма. Это может быть обусловлено протоколом обмена, архитектурой базы данных или особенностями реализации CMS. Представленный подход позволяет достаточно гибко настраивать процессы импорта данных в интернет-магазины и справляется с большими объемами данных до сотен тысяч позиций.
Данный подход был реализован для импорта данных в следующие CMS:
Заметки для ведущего
- Для этого урока идеально подходит онлайн-соединение. Импорт контента зависит от подключения к Интернету.
- Если вам нужно провести этот урок в автономном режиме, рассмотрите возможность экспорта XML-файла («Инструменты» > «Экспорт») в локальную среду разработки WordPress и демонстрации в той же локальной среде, как импортировать этот файл.
План урока
- Поговорите о том, когда вам может понадобиться демонстрационный контент. Спросите, какое впечатление было у участников, когда демонстрационный контент представлял собой не читаемый человеком язык, а текст lorem ipsum.
- Обсудите множество типов контента и макетов, необходимых при демонстрации возможностей WordPress.
- Продемонстрируйте, как сохранять необработанные XML-файлы из необработанного представления GitHub в браузере.
- Продемонстрируйте, как использовать импортер WordPress.
- Обсудите, что XML-файл представляет собой набор указаний для одного веб-сайта по импорту контента, размещенного в другом месте. XML-файл содержит не данные, а инструкции по получению данных.
Упражнения
Импорт данных модульного теста темы
- Скачать демо-контент
- Импортируйте демонстрационный контент на свой сайт
- Используйте демонстрационный контент, чтобы делать снимки экрана
Оценка
Содержимого Lorem Ipsum достаточно
- Правда
- Ложь
Мы можем использовать FakerPress по мере необходимости
- Правда
- Ложь
Какие команды поддерживают демо-контент?
- Темы
- Гутенберг
- Оба
Пример урока
К счастью, команда Themes и участники Gutenberg создали файлы для этой цели.
Как импортировать контент
Перейдите на свой локальный сайт WordPress в меню «Инструменты» > «Импорт». Возможно, вам придется установить плагин импортера
Выберите «Запустить импортер»
Импортируйте файл.
Вам будет предложено выбрать, как назначить авторов из первоисточника.
Разрешить WordPress запустить импорт.
Данные модульного теста темы
Перейдите Файл > Сохранить чтобы сохранить эту страницу прямо на свой локальный компьютер. Импортируйте свой themeunittestdata.wordpress.xml файл.
Впечатляет то, что любой демонстрационный контент, введенный с помощью этого плагина, также можно легко удалить с помощью этого плагина, в отличие от данных тестирования темы.
PlaceKitten
Команда обучения использует PlaceKitten для добавления дополнительных изображений, а также Openverse
и Каталог фотографий WordPress.
Импорт данных в интернет-магазины
Что же мы подразумеваем под импортом данных в интернет-магазины? Для пояснений опишите сценарий, который наиболее типичен для владельцев интернет-магазинов.
Обычно владельцы интернет-магазинов хотят импортировать актуальные данные от поставщиков. Им необходимо для того, чтобы актуализировать состояние баз данных своего интернет-магазина, чтобы у них быстро появлялись новинки, чтобы те товары, которые уже не продаются у поставщика, не были доступны для заказа в их интернет-магазине. И повторять этот процесс они хотят как можно чаще.
Данные поставщика — это:
— категории (с их иерархией или без),
— товары с описаниями, параметрами и атрибутами, изображениями, их комбинациями, если они есть,
— Международный статус, количество на складе, цена закупки, цена продажи, скидки, сделать заказ.
Именно об этих данных будет идти речь. Возможные два варианта работы с данными:
1) интернет-магазин пустой, и нам не нужно учитывать, что в нем находится;
2) интернет-магазин уже заполнен.
Будем рассматривать второй вариант, потому что он наиболее полно отображает специфику процесса импорта данных для интернет-магазинов.
Что обычно хочет владелец интернет-магазина? Требования с его стороны к автоматизации импорта данных такие:
— если появилась новая категория на поставщике, необходимо, чтобы она тоже была создана у него в магазине;
— чтобы товары, которые отсутствуют в его магазине и присутствуют у поставщика, появились (имеется ввиду с описаниями, характеристиками, картинками, вариантами цвета и т.д.) в нужной категории и (или) категории “Новинки”;
— если товар присутствует в магазине заказчика, но отсутствует на складе поставщика, то нужно этот товар отключить (деактивировать) либо изменить статус на “нет на складе” (это нужно, чтобы товар стал недоступным для заказа);
— если товар присутствует и в магазине и у поставщика, то нужно обновить цены и количество (если такие данные есть).
На самом деле менеджер интернет-магазина хочет большего от импорта. Это так называемые скрытые требования, про которые никто не говорит вслух, но как бы все подразумевают уже при приемке проекта или эксплуатации в первый месяц.
Такими скрытыми требованиями для импорта данных в интернет-магазин являются следующие пункты:
— чтобы товары, которые пользователь вносит самостоятельно в интернет-магазин, процесс автоматического импорта не “менял” (не удалял, не деактивировал);
— чтобы правка описаний товаров, которые обновляются из склада поставщика, которые он делает с помощью копирайтеров, не пропадала (это важно для SEO);
— чтобы у новых категорий и товаров формировались правильные и красивые ЧПУ-“URL rewrite”;
— менять цену с учетом своей маржи, которая зависит от категории и популярности товара;
— получать отчеты о том, какие новые товары появились, а которых уже нет в продаже;
— чтобы процесс обновления данных в интернет-магазине был простой и занимал мало времени (несколько или 1 клик);
— если товар присутствует в системе поставщика в более чем в одной категории, то нужно привязать этот товар в соответствующие категории на стороне интернет-магазина;
— если товары, которые мы импортируем в интернет-магазин, это комбинационные товары (например, ботинок “красный цвет, 42 размер, 2300 рублей” и “черный цвет, 43 размер, 3100 рублей” и т.д.), надо, чтобы они обрабатывались корректно.
Все требования, которые описаны выше, вызваны спецификой e-commerce, и алгоритм, который будет импортировать данные, должен учитывать их в полном объеме.
Как выполнить эти требования, какие инструменты могут быть использованы?
— пользоваться стандартным импортом CMS (обычно из файлов из csv / xls / xml / yml и др.);
— импортировать через механизм обмена 1С-Битрикс (1С-Битрикс, UMI, HostCMS, и др., где есть обмен с 1С);
— программировать свой собственный механизм импорта.
Анализ каждого из предложенных вариантов будет представлен ниже.
Импорт данных через csv
— вещь сама по себе очень простая и должна работать надежно. Правда, как показывает практика, это не всегда так. Возникают вопросы, если надо импортировать что-то более сложное чем набор “имя, описание, картинка, артикул, цена”. Что делать с характеристиками, опциями и т.д.? Сегодня этот вариант импорта данных в CMS запрограммирован не всегда хорошо в большинстве реализаций и всегда требует доработок. Плюс ко всему — это промежуточные файлы (их же надо сформировать), требования к хостингу (ограничения). И самый главный минус — ручная работа, а точнее, много скучной и однотипной ручной работы, которую мало кто любит делать.
Импорт данных через механизм обмена 1С-Битрикс.
Сама по себе идея очень хорошая. 1 С есть у всех, а если ее нет, то сам протокол можно эмулировать. Но вот реализация на стороне интернет-магазинов заставляет задавать много вопросов. Если смотреть в сторону эталонного для всех Битрикса, то можно просто сказать, что на объемах более 10 тысяч товаров этот механизм уже дает сбой. Сбои бывают разные. Например, может отсутствовать поддержка ZIP. Могут быть проблемы с объемом доступной памяти для php-процесса. Скорость — это самая больная тема для импорта в Битрикс через 1С. Почему так медленно сложно сказать, но на сегодня это так. Например, битрикс по умолчанию импортирует не в стандартный инфоблок товаров, а в инфоблок, который специально создается для 1С. Плюс при работе через 1С мы имеем проигрыш во времени, т.е данные загружаются два раза — первый раз в 1С, второй раз в Битрикс. Если смотреть на другие CMS, то там реализации этого протокола находятся в состоянии, когда пользоваться им простым людьми без помощи программистов невозможно.
Программирование собственного механизма.
Импортировать этим путем сложно и дорого, однако реализация дарит массу преимуществ, недоступных сегодня из коробки в предлагаемых решениях. На наш взгляд, если стоит задача выполнять пункты, обозначенные в требованиях к импорту данных в полном объеме, то только этот вариант способен удовлетворить требования.
Следующие факторы являются ключевыми при выборе инструмента для импорта:
— частота обновления данных,
— объем передаваемых данных,
— скорость обновления данных,
— детализации информации,
— бюджет,
— компетенции и загруженность команды.
Т.е. получается вот такой график для выбора.
По поводу бюджетов ситуация неоднозначная и зависит в первую очередь от стоимости команды интегратора. На графике показана расстановка бюджетов и предложений на российском рынке. Завышенная стоимость интеграции 1С-Bitrix обусловлена нехваткой специалистов требуемого уровня 1С и Битрикс на рынке, что и вызывает соответственно удорожание цены разработки и поддержки решения. C SV-интеграция возможна и приемлема при малых объемах данных или при отсутствии бюджета, или при малой детализации импорта данных.
О том, как реализовать поддержку “прямого импорта в базу данных” более 10 популярных CMS интернет-магазинов, будет рассказано в следующих статьях.
-
How to predefine demo imports?
-
function TDI_import_files() { return array( array( 'import_file_name' => 'Demo Import 1', 'import_file_url' => 'http://www.your_domain.com/tdi/demo-content.xml', 'import_widget_file_url' => 'http://www.your_domain.com/tdi/widgets.json', 'import_customizer_file_url' => 'http://www.your_domain.com/tdi/customizer.dat', 'import_preview_image_url' => 'http://www.your_domain.com/tdi/preview_import_image1.jpg', 'import_notice' => __( 'After you import this demo, you will have to setup the slider separately.', 'your-textdomain' ), ), array( 'import_file_name' => 'Demo Import 2', 'import_file_url' => 'http://www.your_domain.com/tdi/demo-content2.xml', 'import_widget_file_url' => 'http://www.your_domain.com/tdi/widgets2.json', 'import_customizer_file_url' => 'http://www.your_domain.com/tdi/customizer2.dat', 'import_preview_image_url' => 'http://www.your_domain.com/tdi/preview_import_image2.jpg', 'import_notice' => __( 'A special note for this import.', 'your-textdomain' ), ), ); } add_filter( 'theme-demo-import/import_files', 'TDI_import_files' );
- You can do that, with the
theme-demo-import/after_import
action hook. Код будет выглядеть примерно так:function TDI_after_import_setup() { // Assign menus to their locations. $main_menu = get_term_by( 'name', 'Top Menu', 'nav_menu' ); set_theme_mod( 'nav_menu_locations', array( 'primary-menu' => $main_menu->term_id, ) ); // Assign front page and posts page (blog page). $front_page_id = get_page_by_title( 'Home' ); $blog_page_id = get_page_by_title( 'Blog' ); update_option( 'show_on_front', 'page' ); update_option( 'page_on_front', $front_page_id->ID ); update_option( 'page_for_posts', $blog_page_id->ID ); } add_action( 'theme-demo-import/after_import', 'TDI_after_import_setup' );
-
А как насчет использования локальных файлов импорта (из папки темы)?
- Вам нужно использовать тот же фильтр, что и в приведенном выше примере, но с немного другими ключами массива:
local_*
. Значения должны быть абсолютными путями (а не URL-адресами) к вашим файлам импорта. Чтобы использовать локальные файлы импорта, находящиеся в папке вашей темы, используйте приведенный ниже код. Примечание. Убедитесь, что файлы импорта доступны для чтения!function TDI_import_files() { return array( array( 'import_file_name' => 'Demo Import 1', 'local_import_file' => trailingslashit( get_template_directory() ) . 'tdi/demo-content.xml', 'local_import_widget_file' => trailingslashit( get_template_directory() ) . 'tdi/widgets.json', 'local_import_customizer_file' => trailingslashit( get_template_directory() ) . 'tdi/customizer.dat', 'import_preview_image_url' => 'http://www.your_domain.com/tdi/preview_import_image1.jpg', 'import_notice' => __( 'After you import this demo, you will have to setup the slider separately.', 'your-textdomain' ), ), array( 'import_file_name' => 'Demo Import 2', 'local_import_file' => trailingslashit( get_template_directory() ) . 'tdi/demo-content2.xml', 'local_import_widget_file' => trailingslashit( get_template_directory() ) . 'tdi/widgets2.json', 'local_import_customizer_file' => trailingslashit( get_template_directory() ) . 'tdi/customizer2.dat', 'import_preview_image_url' => 'http://www.your_domain.com/tdi/preview_import_image2.jpg', 'import_notice' => __( 'A special note for this import.', 'your-textdomain' ), ), ); } add_filter( 'theme-demo-import/import_files', 'TDI_import_files' );
-
Как обрабатывать различные «настройки после импорта» в зависимости от того, какой предопределенный импорт был выбран?
-
function TDI_after_import( $selected_import ) { echo "This will be displayed on all after imports!"; if ( 'Demo Import 1' === $selected_import['import_file_name'] ) { echo "This will be displayed only on after import if user selects Demo Import 1"; // Set logo in customizer set_theme_mod( 'logo_img', get_template_directory_uri() . '/assets/images/logo1.png' ); } elseif ( 'Demo Import 2' === $selected_import['import_file_name'] ) { echo "This will be displayed only on after import if user selects Demo Import 2"; // Set logo in customizer set_theme_mod( 'logo_img', get_template_directory_uri() . '/assets/images/logo2.png' ); } } add_action( 'theme-demo-import/after_import', 'TDI_after_import' );
-
Могу ли я добавить немного кода перед импортом виджетов?
- Конечно, можно, используйте
theme-demo-import/before_widgets_import
действие. Вы также можете настроить импорт различных предопределенных демонстраций, как в примере выше. Вот простой пример кодаtheme-demo-import/before_widgets_import
действие:function TDI_before_widgets_import( $selected_import ) { echo "Add your code here that will be executed before the widgets get imported!"; } add_action( 'theme-demo-import/before_widgets_import', 'TDI_before_widgets_import' );
- Вы можете изменить вступительный текст плагина, используя
theme-demo-import/plugin_intro_text
фильтр:function TDI_plugin_intro_text( $default_text ) { $default_text .= '<div class="TDI__intro-text">This is a custom text added to this plugin intro text.</div>'; return $default_text; } add_filter( 'theme-demo-import/plugin_intro_text', 'TDI_plugin_intro_text' );
Чтобы добавить текст в отдельный «поле», вам следует обернуть его в div с классом «TDI__intro-text», как в примере кода выше.
-
Как отключить создание уменьшенных изображений (миниатюр) при импорте контента
-
Это значительно сократит время, необходимое для импорта контента (изображений), но будут импортированы только изображения исходного размера.
Вы можете отключить его с помощью фильтра, поэтому просто добавьте этот код в файл function.php вашей темы:
add_filter( 'theme-demo-import/regenerate_thumbnails_in_content_import', '__return_false' );
-
Как изменить расположение, заголовок и другие параметры страницы плагина?
- Вам как автору темы не нравится расположение страницы плагина «Импорт демо-контента» в Внешний вид -> Импорт демо-контента
? Вы можете изменить это с помощью фильтра ниже. Помимо местоположения, вы также можете изменить заголовок или страницу/меню, а также некоторые другие параметры.function TDI_plugin_page_setup( $default_settings ) { $default_settings['parent_slug'] = 'themes.php'; $default_settings['page_title'] = esc_html__( 'Theme Demo Import' , 'theme-demo-import' ); $default_settings['menu_title'] = esc_html__( 'Import Demo Content' , 'theme-demo-import' ); $default_settings['capability'] = 'import'; $default_settings['menu_slug'] = 'theme-demo-import'; return $default_settings; } add_filter( 'theme-demo-import/plugin_page_setup', 'TDI_plugin_page_setup' );
Выбор темы для WordPress-сайта является одним из самых важных моментов при его создании. Так, подбирая тот или иной шаблон, пользователь в первую очередь интересует его конечный внешний вид, т.е. как в итоге будет выглядеть будущий веб-ресурс. Для этого необходимо, чтобы, помимо красивого шаблона, еще и было что отображать, т.е. контент. Устанавливая “чистую” копию WordPress, Вы из контента получаете всего одну страницу и одну запись.
Для того, чтобы целиком увидеть будущую картину, необходимо заполнить сайт данными: создать несколько страниц и записей с текстом, добавить фото и т.д. Все это, конечно, можно сделать вручную, но для этого потребуется много времени.
Разработчики WordPress предусмотрели то, что многие пользователи не захотят заморачиваться, думая, что добавить себе на сайт в качестве тестовых данных. Специально для этого и было разработано решение, которое буквально одним кликом наполняет сайт всеми необходимыми разделами контента.
Как установить демо-данные?
Во-первых, необходимо загрузить специальный , содержащий в себе демо-контент. Далее в админ-панели следует перейти Инструменты -> Импорт.
На странице импорта, в строке WordPress, нужно нажать на ссылку Установить. После недолгого процесса установки текст ссылки будет изменен на Запустить импорт. Для запуска процесса ее необходимо нажать.
В окне, которое открылось, система попросит указать имя XML-файла с данными. Выбираем ранее загруженный файл с именем themeunittestdata.wordpress.xml и нажимаем кнопку Загрузить и импортировать файл.
В процессе импорта Вас попросят указать некоторую информацию. Во-первых, Вы можете переназначить импортируемые материалы существующему пользователю своего сайта. В противном случае система автоматически создаст нескольких пользователей. Если Вам не нужны на сайте другие пользователи, то в поле или назначить статьи другому пользователю
выберите пользователя, уже созданного на сайте.
Последнее, что Вам необходимо решить, — это импортировать ли файлы вложений. В основном это изображения, прикрепленные к тем или иным материалам.
Для начала импорта контента нужно нажать кнопку Отправить.
По прошествии нескольких минут тестовый контент будет полностью добавлен на Ваш сайт, о чем Вы будете уведомлены соответствующим сообщением.
В итоге на Вашем сайте будет создано около 40 записей, включающих как текст, так и изображения различных размеров. Также будет добавлено около 60 рубрик, более сотни меток (тегов), более десятка страниц и комментариев.
Нажмите, пожалуйста, на одну из кнопок, чтобы узнать понравилась статья или нет.
После активации плагина вы найдете фактическую страницу импорта в Внешний вид -> Импортировать демонстрационный контент.
-
Я активировал плагин. Где находится страница «Импорт демо-контента»?
-
Где сохраняются файлы импорта демо и файлы журналов?
- Файлы, используемые при импорте демо, будут сохранены в каталоге загрузки WordPress по умолчанию. Примером этого каталога может быть:
../wp-content/uploads/2016/03/
. -
Как заранее определить импорт демо?
-
function TDI_import_files() { return array( array( 'import_file_name' => 'Demo Import 1', 'import_file_url' => 'http://www.your_domain.com/tdi/demo-content.xml', 'import_widget_file_url' => 'http://www.your_domain.com/tdi/widgets.json', 'import_customizer_file_url' => 'http://www.your_domain.com/tdi/customizer.dat', 'import_preview_image_url' => 'http://www.your_domain.com/tdi/preview_import_image1.jpg', 'import_notice' => __( 'After you import this demo, you will have to setup the slider separately.', 'your-textdomain' ), ), array( 'import_file_name' => 'Demo Import 2', 'import_file_url' => 'http://www.your_domain.com/tdi/demo-content2.xml', 'import_widget_file_url' => 'http://www.your_domain.com/tdi/widgets2.json', 'import_customizer_file_url' => 'http://www.your_domain.com/tdi/customizer2.dat', 'import_preview_image_url' => 'http://www.your_domain.com/tdi/preview_import_image2.jpg', 'import_notice' => __( 'A special note for this import.', 'your-textdomain' ), ), ); } add_filter( 'theme-demo-import/import_files', 'TDI_import_files' );
- Вы можете сделать это с помощью
theme-demo-import/after_import
крючок действия. Код будет выглядеть примерно так:function TDI_after_import_setup() { // Assign menus to their locations. $main_menu = get_term_by( 'name', 'Top Menu', 'nav_menu' ); set_theme_mod( 'nav_menu_locations', array( 'primary-menu' => $main_menu->term_id, ) ); // Assign front page and posts page (blog page). $front_page_id = get_page_by_title( 'Home' ); $blog_page_id = get_page_by_title( 'Blog' ); update_option( 'show_on_front', 'page' ); update_option( 'page_on_front', $front_page_id->ID ); update_option( 'page_for_posts', $blog_page_id->ID ); } add_action( 'theme-demo-import/after_import', 'TDI_after_import_setup' );
-
А как насчет использования локальных файлов импорта (из папки темы)?
-
Вам нужно использовать тот же фильтр, что и в приведенном выше примере, но с немного другими ключами массива:
local_*
. Значения должны быть абсолютными путями (а не URL-адресами) к вашим файлам импорта. Чтобы использовать локальные файлы импорта, находящиеся в папке вашей темы, используйте приведенный ниже код.Примечание. Убедитесь, что файлы импорта доступны для чтения!
function TDI_import_files() { return array( array( 'import_file_name' => 'Demo Import 1', 'local_import_file' => trailingslashit( get_template_directory() ) . 'tdi/demo-content.xml', 'local_import_widget_file' => trailingslashit( get_template_directory() ) . 'tdi/widgets.json', 'local_import_customizer_file' => trailingslashit( get_template_directory() ) . 'tdi/customizer.dat', 'import_preview_image_url' => 'http://www.your_domain.com/tdi/preview_import_image1.jpg', 'import_notice' => __( 'After you import this demo, you will have to setup the slider separately.', 'your-textdomain' ), ), array( 'import_file_name' => 'Demo Import 2', 'local_import_file' => trailingslashit( get_template_directory() ) . 'tdi/demo-content2.xml', 'local_import_widget_file' => trailingslashit( get_template_directory() ) . 'tdi/widgets2.json', 'local_import_customizer_file' => trailingslashit( get_template_directory() ) . 'tdi/customizer2.dat', 'import_preview_image_url' => 'http://www.your_domain.com/tdi/preview_import_image2.jpg', 'import_notice' => __( 'A special note for this import.', 'your-textdomain' ), ), ); } add_filter( 'theme-demo-import/import_files', 'TDI_import_files' );
-
Как обрабатывать различные «настройки после импорта» в зависимости от того, какой предопределенный импорт был выбран?
-
function TDI_after_import( $selected_import ) { echo "This will be displayed on all after imports!"; if ( 'Demo Import 1' === $selected_import['import_file_name'] ) { echo "This will be displayed only on after import if user selects Demo Import 1"; // Set logo in customizer set_theme_mod( 'logo_img', get_template_directory_uri() . '/assets/images/logo1.png' ); } elseif ( 'Demo Import 2' === $selected_import['import_file_name'] ) { echo "This will be displayed only on after import if user selects Demo Import 2"; // Set logo in customizer set_theme_mod( 'logo_img', get_template_directory_uri() . '/assets/images/logo2.png' ); } } add_action( 'theme-demo-import/after_import', 'TDI_after_import' );
-
Могу ли я добавить немного кода перед импортом виджетов?
- Конечно, можно, используйте
theme-demo-import/before_widgets_import
действие. Вы также можете настроить импорт различных предопределенных демонстраций, как в примере выше. Вот простой пример кодаtheme-demo-import/before_widgets_import
действие:function TDI_before_widgets_import( $selected_import ) { echo "Add your code here that will be executed before the widgets get imported!"; } add_action( 'theme-demo-import/before_widgets_import', 'TDI_before_widgets_import' );
- Вы можете изменить вступительный текст плагина, используя
theme-demo-import/plugin_intro_text
фильтр:function TDI_plugin_intro_text( $default_text ) { $default_text .= '<div class="TDI__intro-text">This is a custom text added to this plugin intro text.</div>'; return $default_text; } add_filter( 'theme-demo-import/plugin_intro_text', 'TDI_plugin_intro_text' );
Чтобы добавить текст в отдельный «поле», вам следует обернуть его в div с классом «TDI__intro-text», как в примере кода выше.
-
Как отключить создание уменьшенных изображений (миниатюр) при импорте контента
- Это значительно сократит время, необходимое для импорта контента (изображений), но будут импортированы только изображения исходного размера. Вы можете отключить его с помощью фильтра, поэтому просто добавьте этот код в файл function.php вашей темы:
add_filter( 'theme-demo-import/regenerate_thumbnails_in_content_import', '__return_false' );
-
Как изменить расположение, заголовок и другие параметры страницы плагина?
- Вам как автору темы не нравится расположение страницы плагина «Импорт демо-контента» в «Внешний вид» -> «Импорт демо-контента» .
? Вы можете изменить это с помощью фильтра ниже. Помимо местоположения, вы также можете изменить заголовок или страницу/меню, а также некоторые другие параметры.function TDI_plugin_page_setup( $default_settings ) { $default_settings['parent_slug'] = 'themes.php'; $default_settings['page_title'] = esc_html__( 'Theme Demo Import' , 'theme-demo-import' ); $default_settings['menu_title'] = esc_html__( 'Import Demo Content' , 'theme-demo-import' ); $default_settings['capability'] = 'import'; $default_settings['menu_slug'] = 'theme-demo-import'; return $default_settings; } add_filter( 'theme-demo-import/plugin_page_setup', 'TDI_plugin_page_setup' );
В процессе обучения аналитике данных у человека неизбежно возникает вопрос о миграции данных из одной среды в другую. Поскольку одним из необходимых навыков для аналитика данных является знание SQL, а одной из наиболее популярных СУБД является PostgreSQL, предлагаю рассмотреть импорт и экспорт данных на примере этой СУБД.
В своё время, столкнувшись с импортом и экспортом данных, обнаружилось, что какой-то более-менее структурированной инфы мало: этот момент обходят на всяких там курсах по аналитике, подразумевая, что это очень простые моменты, которым не следует уделять внимание.
В данной статье приведены примеры импорта в PostgreSQL непосредственно самой базы данных в формате sql, а также импорта и экспорта данных в наиболее простом и распространенном формате .csv, в котором в настоящее время хранятся множество существующих датасетов. Формат .json хоть и является также очень распространенным, рассмотрен не будет, поскольку, по моему скромному мнению, с ним все-таки лучше работать на Python, чем в SQL.
1. Импорт базы данных в формате в PostgreSQL
Скачиваем (получаем из внутреннего корпоративного источника) файл с базой данных в выбранную папку. В данном случае путь:
Имя файла: demo-big-20170815
Далее выполняем команду для загрузки БД из sql-файла:
"C:\Program Files\PostgreSQL\10\bin\psql" -U postgres -f demo-big-20170815.sql
Где сначала указывается путь, по которому установлен PostgreSQL на компьютере, -U
– имя пользователя, -f
— название файла БД.
Отметим, что в зависимости от размера базы данных загрузка может занимать до нескольких десятков минут. Конец загрузки будет отмечен следующим видом:
theme-demo-import/plugin_intro_text
theme-demo-import/before_widgets_import
theme-demo-import/before_widgets_import
2. Импорт данных из csv-файла
function TDI_before_widgets_import( $selected_import ) {
В выбранной БД создается таблица с полями, типы которых должны соответствовать «колонкам» в выбранном .csv-файле.
echo "Add your code here that will be executed before the widgets get imported!";
}
add_action( 'theme-demo-import/before_widgets_import', 'TDI_before_widgets_import' );
function TDI_plugin_intro_text( $default_text ) {
$default_text .= '<div class="TDI__intro-text">This is a custom text added to this plugin intro text.</div>';
return $default_text;}
add_filter( ‘theme-demo-import/plugin_intro_text’, ‘TDI_plugin_intro_text’ );
Далее воспользуемся SQL shell (psql) для подключения к нужной БД и для подачи команд на импорт данных. При открытии SQL shell (psql) она стандартно спросит про имя сервера, имя подключаемой БД, порт и пользователя. Ввести нужно только имя БД и пароль пользователя, всё остальное проходим нажатием ентра. Создается подключение к нужной БД – airtickets.
Ну и вводим команды на импорт данных из файла:
Где– название созданной в БД таблицы, из – путь, где хранится csv-файл, add_filter( 'theme-demo-import/regenerate_thumbnails_in_content_import', '__return_false' );
– разделитель, используемый в импортируемом .csv-файле, сам формат файла и, указывающий на заголовки «колонок».
Один интересный момент. Написание команды строчными (маленькими) буквами привело к тому, что psql ругнулся, выдал ошибку и предложил написать команду прописными буквами.
function TDI_plugin_page_setup( $default_settings ) {
$default_settings['parent_slug'] = 'themes.php';
$default_settings['page_title'] = esc_html__( 'Theme Demo Import' , 'theme-demo-import' );
$default_settings['menu_title'] = esc_html__( 'Import Demo Content' , 'theme-demo-import' );
$default_settings['capability'] = 'import';
$default_settings['menu_slug'] = 'theme-demo-import';
return $default_settings;
}
add_filter( 'theme-demo-import/plugin_page_setup', 'TDI_plugin_page_setup' );
3. Экспорт данных в .csv-файл
Предположим, нам надо сохранить таблицу airports_data из уже упоминаемой выше БД demo.
Для этого подключимся к БД demo через SQL shell (psql) и наберем команду, указав уже знакомые параметры разделителя, типа файла и заголовка:
4. Экспорт данных выборки в .csv-файл
Иногда возникает необходимость сохранить в .csv-файл не полностью всю таблицу, а лишь некоторые данные, соответствующие некоторому условию. Например, нам нужно из БД demo таблицы flights выбрать поля flight_id, flight_no, departure_airport, arrival_airport, где departure_airport = ‘SVO’. Данный запрос можно вставить сразу в команду psql:
Вот такой небольшой гайд получился.