Ubercart — это программный модуль с открытым исходным кодом, полностью интегрирующий Интернет-магазин с CMS Drupal. Ubercart считается одним из лучших в мире решений для электронной коммерции.
Как правило много вопросов вызывает массовый импорт товаров с картинками.
В моем случае был excel файл со списком товаров и их атрибутами (наименование, описание, цены, авторы, ссылки на картинки и т.п.).
Excel файл в чистом виде довольно таки трудно скормить для импорта, поэтому я сохранил его в виде *.csv файла.
Я щас опишу что дальше с ним делать:)
Я использовал модуль node_import и написал свой модуль-надстройку.
В модуле-надстройке добавляем хук hook_node_import_fields() он отвечает за дополнительные поля.
my_field_n — это машинное имя дополнительного поля.
MY FIELD N — это то как поле будет отображаться пользователю при импорте.
my_image_filepath — должен содержать прямой путь до файла с картинкой.
далее добавляем хук hook_node_import_prepare(). Здесь можно проверять на валидность поля и подготовить их к импорту.
здесь мы проверяем наши поля(my_field_n), если что-то не так, то выдаем ошибку, иначе записываем в настоящие поля (field_n).
Кстати, если поле CCK'шное, то обращаться к нему нужно так $node->field_n[0]['value']
для импорта картинок я написал отдельную функцию:
в хуке hook_node_import_prepare() использовать так:
$preview отвечает за предпросмотр. то биш этот код в предпросмотре выполняться не будет, а только после того как пользователь начнет импорт.
вот и все.
жду вашей критики:)
Как правило много вопросов вызывает массовый импорт товаров с картинками.
В моем случае был excel файл со списком товаров и их атрибутами (наименование, описание, цены, авторы, ссылки на картинки и т.п.).
Excel файл в чистом виде довольно таки трудно скормить для импорта, поэтому я сохранил его в виде *.csv файла.
Я щас опишу что дальше с ним делать:)
Я использовал модуль node_import и написал свой модуль-надстройку.
В модуле-надстройке добавляем хук hook_node_import_fields() он отвечает за дополнительные поля.
Copy Source | Copy HTML
- function my_module_node_import_fields($type) {
- if (_uc_product_node_import_is_product($type)) {
- $fields = array(
- 'my_field_0' => 'MY FIELD 0',
- 'my_field_1' => 'MY FIELD 1',
- ...
- 'my_field_n' => 'MY FIELD N',
- 'my_image_filepath' => 'MY Image filepath',
- );
- return $fields;
- }
my_field_n — это машинное имя дополнительного поля.
MY FIELD N — это то как поле будет отображаться пользователю при импорте.
my_image_filepath — должен содержать прямой путь до файла с картинкой.
далее добавляем хук hook_node_import_prepare(). Здесь можно проверять на валидность поля и подготовить их к импорту.
Copy Source | Copy HTML
- function my_module_node_import_prepare(&$node, $preview = FALSE) {
- $errors = array();
-
- if (!isset($node->my_field_0) || empty($node->my_field_0)) {
- $errors[] = t('ERROR! on MY FIELD 0');
- } else $node->field_0 = $node->my_field_0;
- if (!isset($node->my_field_1) || empty($node->my_field_1)) {
- $errors[] = t('ERROR! on MY FIELD 1');
- } else $node->field_1 = $node->my_field_1;
- ...
- if (!isset($node->my_field_n) || empty($node->my_field_n)) {
- $errors[] = t('ERROR! on MY FIELD N');
- } else $node->field_n = $node->my_field_n;
-
- return $errors;
- }
здесь мы проверяем наши поля(my_field_n), если что-то не так, то выдаем ошибку, иначе записываем в настоящие поля (field_n).
Кстати, если поле CCK'шное, то обращаться к нему нужно так $node->field_n[0]['value']
для импорта картинок я написал отдельную функцию:
Copy Source | Copy HTML
- function _my_module_create_image_field($filepath, $nid) {
- $file_temp = file_get_contents($filepath);
- $file_temp = file_save_data($file_temp, file_directory_path() . '/images/' . basename($filename), FILE_EXISTS_RENAME);
-
- $image_field['0']['fid'] = 'upload';
- $image_field['0']['title'] = basename($file_temp);
- $image_field['0']['nid'] = $nid;
- $image_field['0']['filename'] = basename($file_temp);
- $image_field['0']['filepath'] = $file_temp;
- $image_field['0']['filemime'] = mime_content_type($file_temp);
- $image_field['0']['filesize'] = filesize($file_temp);
-
- return $image_field;
- }
в хуке hook_node_import_prepare() использовать так:
Copy Source | Copy HTML
- if (!$preview){
- if (isset($node->my_image_filepath)){
- if (file_exists($node->naeyc_image_filepath)){
- $node->field_image_cache = _my_module_create_image_field($node->my_image_filepath, $node->nid);
- } else $errors[] = $node->my_image_filepath . t(' file is not exists.');
- }
- }
$preview отвечает за предпросмотр. то биш этот код в предпросмотре выполняться не будет, а только после того как пользователь начнет импорт.
вот и все.
жду вашей критики:)