SlideShare una empresa de Scribd logo
1 de 16
Что удобнее использовать - стандартный тип материала product или свой собственный? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Краткий вывод: Разницы в использовании своих типов материалов, либо особой нет, это лишь дело вкуса и пристрастий каждого из разработчиков. В реальных разработках мы иногда сталкиваемся с необходимостью использовать несколько типов продуктов с разными наборами полей к примеру продажа Книг, Копмакт дисков, Журналов либо каких-то других периодических изданий.  У каждого из этих товаров в любом случае имеется свой набор соответствующих полей которые специфичны для того или иного вида к примеру у книги это ISBN, у журнала периодичность издания, у диска тип или жанр предоставляемой на нем информации. В таком случае нам волей неволей придется использовать несколько типов материалов и помнить что такое product не всегда удобно да и нужно. В таких случаях проще отказаться от типа по умолчанию и создать свои типы «book», «disk», «magazine» зарегистрировать их в уберкарте.
Переходим на Url http://my_site/admin/store/products/classes Типы материалов можно создать до установки или включения уберкарта, после включения модулей магазина, главное правильно ввести названия машинного типа. После регистрации данных типов уберкарт автоматически добавит в них филдсет «Product information» с ценами, весом, позицией в каталоге, габаритами, количеством в упаковке количеством добавляемом в корзину по умолчанию. Данный набор может дополнятся либо уменьшаться в зависимости от подключаемых модулей. Неизменными остаются цена, SKU, тип продукта (доставляемый или нет). SKU — уникальный номер товара в Вашем магазине некоторые отказываются от его использования посредством автоматизации присваивания http://www.ubercart.org/contrib/4307
Что лучше использовать для категоризации товаров? Taxonomy: 1. Входит в ядро друпала. 2. Использует для навигации taxonomy/term/tid работающий при отсутсвии вьюсов. 3. Неограниченная вложеность категорий 4. Расширямеость функционала дополнительными модулями типа taxonomy_menu, taxonomoy_image и т.д. Category: 1. Категория — нода. 2. Расширяемость ССК полями 3. Возможность шаблонизации в виде node-category_cat.tpl.php 4. Имеет собственное меню (недостатки аналогичны taxonomy_menu, но нет необходимости устанавливать дополнительный модуль). 5. Возможность отображения товаров на странице категории любой из набора созданных views. 6. Возможность отображать на своей-же странице подкатегории помимо товаров (вообще благодаря шаблонизации имеется возможность вывести неограниченное количество любой информации на странице). 7. Для синхронизации с taxonomy использует обертку которая синхронизирует изменения и дополнения в таблицах term_*. 8.Допускается вложенность контейнера в контейнер.
Платежный модуль своими руками для Drupal 5.х Регистрация страницы результата платежа  5.х Перекрытие кнопки submit на форме оформления заказа: Для 6-й ветки hook_menu выглядит несколько иначе.
Регистрация платежного метода в уберкарт Id — ключ метода Name — имя метода Title — Название которое выводится на странице при выборе метода платежа Desc — описание метода Weight — Вес (необязательно) Callback — функция строящая форму настроек метода платежа Checkout — булевый параметр (истинное предназначение пока не известно)
Форма настроек для платежного метода Будет отображаться по адресу: http://my_site/admin/store/settings/payment/edit/methods
Функция построения формы для отправки данных на сервер приема платежей Вызывает внутри себя функцию получения данных для построения формы см. ниже. Формат построения данной формы напрямую зависит от требований сайта приемки  Платежа, имеет режим для тестирования и режим live
Функция подготовки данных для отправки Различия с get_data_testing только в использовании действующих переменных. Формат подготовки данных может отличаться в зависимости от требований платежного  Метода В данной функции так-же в зависимости от требований собирается и кодируется строка  сигнатуры платежа.
Функции обработки платежа 1. Функция кодирования сигнатуры 2. callback_menu страница отображения результатов платежа 3. Вспомогательная функция (была необходима для подмены http на https по требованиям Платежной системы) 4. Функция кодов ошибок возвращаемых сервером приема платежей.
Dataimport и с чем его едят 1. Права доступа к выполнению импорта. 2. Регистрация меню для  модуля 3. Функция регистрации доступных плагинов для импорта данных 4. Функция обработки настроек импорта для плагина 5. Функция включения batch процесса 6. hook регистрации плагина 7. Ведение уникальности импортируемых данных 8. Обработка уникальности импортируемых данных 9. Хуки для импорта пользователей и комментариев, могут не использоваться.
Пример написания плагина для импорта тем форумов для 6.х Processing — массив с callback функциями участвующими в процессе импорта данных м.б. «process», «delete» каждый ключ может содержать несколько callback Settings_form — функция построения формы на странице импорта (можем задать параметры или условия для успешного выполнения импорта) Fifnished, final — callback для завершения batch процесса (может быть несколько).
 
 
 
function  import_books_row_callback( $row ,  $ret ) { global  $user ; if  ( $row [ 'data' ][ 'price' ] >=  4  && (! empty ( $row [ 'data' ][ 'description' ]) or ! empty ( $row [ 'data' ][ 'parent' ]) or ! empty ( $row [ 'data' ][ 'author' ]) or ! empty ( $row [ 'data' ][ 'series' ]))){ $nid  = dataimport_get_nid( 'books' ,  $row [ 'data' ][ 'id' ]); if  ( $nid ) { $node  = node_load( $nid ); $ret [ 'update' ] =  isset ( $ret [ 'update' ]) ?  $ret [ 'update' ]+ 1  :  1 ; } else  { $node  =  new  StdClass(); $node ->nid =  0 ; $node ->type =  'pbook' ; $node ->status =  1 ; $ret [ 'create' ] =  isset ( $ret [ 'create' ]) ?  $ret [ 'create' ]+ 1  :  1 ; } $node ->uid =  $user ->uid; $node ->shippable =  1 ; $node ->dataimport[ 'type' ] =  'books' ; $node ->dataimport[ 'sku' ] =  $row [ 'data' ][ 'id' ]; $node ->model =  $row [ 'data' ][ 'id' ]; if  ( isset ( $row [ 'data' ][ 'name' ]))  $node ->title =  $row [ 'data' ][ 'name' ]; if  ( isset ( $row [ 'data' ][ 'price' ]))  $node ->sell_price =  $row [ 'data' ][ 'price' ]; //The changed timestamp is always updated for bookkeeping purposes (revisions, searching, ...) if  ( isset ( $row [ 'data' ][ 'isbn' ]))  $node ->field_pbook_isbn[ 0 ][ 'value' ] =  $row [ 'data' ][ 'isbn' ]; if  ( isset ( $row [ 'data' ][ 'author' ]))  $node ->field_pbook_authorstr[ 0 ][ 'value' ] =  $row [ 'data' ][ 'author' ]; if  ( isset ( $row [ 'data' ][ 'description' ])) { $node ->field_pbook_description[ 0 ][ 'value' ] =  $row [ 'data' ][ 'description' ]; $node ->field_pbook_description[ 0 ][ 'format' ]  =  '3' ; } if  ( isset ( $row [ 'data' ][ 'publisher' ]))  $node ->field_pbook_publisherstr[ 0 ][ 'value' ] =  $row [ 'data' ][ 'publisher' ]; if  ( isset ( $row [ 'data' ][ 'year' ]))  $node ->field_pbook_year[ 0 ][ 'value' ] =  $row [ 'data' ][ 'year' ]; if  ( isset ( $row [ 'data' ][ 'series' ]))  $node ->field_pbook_seriesstr[ 0 ][ 'value' ] =  $row [ 'data' ][ 'series' ]; if  ( isset ( $row [ 'data' ][ 'cover' ]))  $node ->field_pbook_cover[ 0 ][ 'value' ] =  $row [ 'data' ][ 'cover' ]; if  ( isset ( $row [ 'data' ][ 'pages' ]))  $node ->field_pbook_pages[ 0 ][ 'value' ] =  $row [ 'data' ][ 'pages' ]; if  ( isset ( $row [ 'data' ][ 'lang' ])) { $node ->field_pbook_lang[ 0 ][ 'value' ] =  $row [ 'data' ][ 'lang' ]; }  else  { $node ->field_pbook_lang[ 0 ][ 'value' ] =  1 ;} if  ( isset ( $row [ 'data' ][ 'parent' ])) { $sku_keys  = explode( ',' ,  $row [ 'data' ][ 'parent' ]); $node ->category =  array (); foreach ( $sku_keys  as  $sku_key ) { if  ( $nid  = dataimport_get_nid( 'categories' , intval( $sku_key ))) { $node ->category[ $nid ] =  new  stdClass(); $node ->category[ $nid ]->nid =  $nid ; $node ->category[ $nid ]->cid =  $nid ; $node ->category[ $nid ]->cnid = db_result(db_query( "SELECT cnid FROM {category} WHERE cid = %d" ,  $nid )); } } } node_save( $node ); } }
Спасибо за внимание! Юрий Глушков [email_address] [email_address] http://ardas.dp.ua

Más contenido relacionado

La actualidad más candente

Успешный программист. Современные тенденции
Успешный программист. Современные тенденцииУспешный программист. Современные тенденции
Успешный программист. Современные тенденцииStas Fomin
 
советы, которые спасут ваш компьютер
советы, которые спасут ваш компьютерсоветы, которые спасут ваш компьютер
советы, которые спасут ваш компьютерanna.korovko
 
Competitions Cloudwatcher_new
Competitions Cloudwatcher_newCompetitions Cloudwatcher_new
Competitions Cloudwatcher_newguest18d24c
 
Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009Liudmila Li
 
Оптимизация сайта на Wordpress: темы, плагины, лайфхаки
Оптимизация сайта на Wordpress: темы, плагины, лайфхакиОптимизация сайта на Wordpress: темы, плагины, лайфхаки
Оптимизация сайта на Wordpress: темы, плагины, лайфхакиcollaborator.pro
 
кто же расстанется со своим
кто же расстанется со своимкто же расстанется со своим
кто же расстанется со своимTimur AITOV
 
Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎Anatoly Sharifulin
 
методика оценки деятельности органов исполнительной власти субъектов рф
методика оценки деятельности органов исполнительной власти субъектов рфметодика оценки деятельности органов исполнительной власти субъектов рф
методика оценки деятельности органов исполнительной власти субъектов рфVictor Gridnev
 
Для конференции "Интранет в России"
Для конференции "Интранет в России"Для конференции "Интранет в России"
Для конференции "Интранет в России"Mikhail Galushko
 
Mediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаMediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаAndrew Dutchak
 
Введение в Silverlight3. На русском
Введение в Silverlight3. На русскомВведение в Silverlight3. На русском
Введение в Silverlight3. На русскомТранслируем.бел
 
гайсина ах
гайсина ахгайсина ах
гайсина ахsashatasha98
 
06 01 сертифицированные продукты
06 01 сертифицированные продукты06 01 сертифицированные продукты
06 01 сертифицированные продуктыLiudmila Li
 
Pr & Social Media for PR Peppers
Pr & Social Media for PR PeppersPr & Social Media for PR Peppers
Pr & Social Media for PR PeppersHOSHVA PR
 
Решение по управлению web-контентом от компании Oracle.
Решение по управлению web-контентом от компании Oracle.Решение по управлению web-контентом от компании Oracle.
Решение по управлению web-контентом от компании Oracle.Anton Shmakov
 
Интернет Контроль Сервер 2.0
Интернет Контроль Сервер 2.0Интернет Контроль Сервер 2.0
Интернет Контроль Сервер 2.0runastik
 

La actualidad más candente (20)

Успешный программист. Современные тенденции
Успешный программист. Современные тенденцииУспешный программист. Современные тенденции
Успешный программист. Современные тенденции
 
советы, которые спасут ваш компьютер
советы, которые спасут ваш компьютерсоветы, которые спасут ваш компьютер
советы, которые спасут ваш компьютер
 
Competitions Cloudwatcher_new
Competitions Cloudwatcher_newCompetitions Cloudwatcher_new
Competitions Cloudwatcher_new
 
Flash Point 2010 Common
Flash Point 2010 CommonFlash Point 2010 Common
Flash Point 2010 Common
 
07 Ws08 R2 Virt
07 Ws08 R2 Virt07 Ws08 R2 Virt
07 Ws08 R2 Virt
 
Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009
 
Оптимизация сайта на Wordpress: темы, плагины, лайфхаки
Оптимизация сайта на Wordpress: темы, плагины, лайфхакиОптимизация сайта на Wordpress: темы, плагины, лайфхаки
Оптимизация сайта на Wordpress: темы, плагины, лайфхаки
 
Schet
SchetSchet
Schet
 
кто же расстанется со своим
кто же расстанется со своимкто же расстанется со своим
кто же расстанется со своим
 
Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎
 
методика оценки деятельности органов исполнительной власти субъектов рф
методика оценки деятельности органов исполнительной власти субъектов рфметодика оценки деятельности органов исполнительной власти субъектов рф
методика оценки деятельности органов исполнительной власти субъектов рф
 
Для конференции "Интранет в России"
Для конференции "Интранет в России"Для конференции "Интранет в России"
Для конференции "Интранет в России"
 
Mediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаMediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіа
 
Введение в Silverlight3. На русском
Введение в Silverlight3. На русскомВведение в Silverlight3. На русском
Введение в Silverlight3. На русском
 
гайсина ах
гайсина ахгайсина ах
гайсина ах
 
Start android
Start androidStart android
Start android
 
06 01 сертифицированные продукты
06 01 сертифицированные продукты06 01 сертифицированные продукты
06 01 сертифицированные продукты
 
Pr & Social Media for PR Peppers
Pr & Social Media for PR PeppersPr & Social Media for PR Peppers
Pr & Social Media for PR Peppers
 
Решение по управлению web-контентом от компании Oracle.
Решение по управлению web-контентом от компании Oracle.Решение по управлению web-контентом от компании Oracle.
Решение по управлению web-контентом от компании Oracle.
 
Интернет Контроль Сервер 2.0
Интернет Контроль Сервер 2.0Интернет Контроль Сервер 2.0
Интернет Контроль Сервер 2.0
 

Destacado (6)

15832945
1583294515832945
15832945
 
Sourcing Finance Uk 2009
Sourcing Finance Uk 2009Sourcing Finance Uk 2009
Sourcing Finance Uk 2009
 
Slideshow
SlideshowSlideshow
Slideshow
 
Lançamento Guia dos Bancos Responsáveis 2012
Lançamento Guia dos Bancos Responsáveis 2012Lançamento Guia dos Bancos Responsáveis 2012
Lançamento Guia dos Bancos Responsáveis 2012
 
Bellezas Invernales
Bellezas InvernalesBellezas Invernales
Bellezas Invernales
 
La France vue du ciel
La France vue du cielLa France vue du ciel
La France vue du ciel
 

Más de Drupal Camp Kyiv

DrupalCamp Kyiv 2009 Official Report
DrupalCamp Kyiv 2009 Official ReportDrupalCamp Kyiv 2009 Official Report
DrupalCamp Kyiv 2009 Official ReportDrupal Camp Kyiv
 
Что нового в Drupal 7
Что нового в Drupal 7Что нового в Drupal 7
Что нового в Drupal 7Drupal Camp Kyiv
 
Безопасный код
Безопасный кодБезопасный код
Безопасный кодDrupal Camp Kyiv
 
Текст доклада о разработке плагина к модулю ССК
Текст доклада о разработке плагина к модулю ССКТекст доклада о разработке плагина к модулю ССК
Текст доклада о разработке плагина к модулю ССКDrupal Camp Kyiv
 
Обслуживание мультисайтинга
Обслуживание мультисайтингаОбслуживание мультисайтинга
Обслуживание мультисайтингаDrupal Camp Kyiv
 
Разработка соц. сети на Друпале
Разработка соц. сети на ДрупалеРазработка соц. сети на Друпале
Разработка соц. сети на ДрупалеDrupal Camp Kyiv
 
За что мы ненавидим Drupal
За что мы ненавидим DrupalЗа что мы ненавидим Drupal
За что мы ненавидим DrupalDrupal Camp Kyiv
 
Многоязычие сайта на Drupal
Многоязычие сайта на DrupalМногоязычие сайта на Drupal
Многоязычие сайта на DrupalDrupal Camp Kyiv
 
Drupal 7 development: first impressions
Drupal 7 development: first impressionsDrupal 7 development: first impressions
Drupal 7 development: first impressionsDrupal Camp Kyiv
 
Веб-аналитика в Drupal2
Веб-аналитика в Drupal2Веб-аналитика в Drupal2
Веб-аналитика в Drupal2Drupal Camp Kyiv
 
Веб-аналитика в Drupal1
Веб-аналитика в Drupal1Веб-аналитика в Drupal1
Веб-аналитика в Drupal1Drupal Camp Kyiv
 
Who is here? DrupalCamp Kyiv 2009 opening
Who is here? DrupalCamp Kyiv 2009 openingWho is here? DrupalCamp Kyiv 2009 opening
Who is here? DrupalCamp Kyiv 2009 openingDrupal Camp Kyiv
 
Разработка модуля для Cms Drupal
Разработка модуля для Cms DrupalРазработка модуля для Cms Drupal
Разработка модуля для Cms DrupalDrupal Camp Kyiv
 
Продвинутый мультисайтинг
Продвинутый мультисайтингПродвинутый мультисайтинг
Продвинутый мультисайтингDrupal Camp Kyiv
 

Más de Drupal Camp Kyiv (20)

DrupalCamp Kyiv 2009 Official Report
DrupalCamp Kyiv 2009 Official ReportDrupalCamp Kyiv 2009 Official Report
DrupalCamp Kyiv 2009 Official Report
 
Что нового в Drupal 7
Что нового в Drupal 7Что нового в Drupal 7
Что нового в Drupal 7
 
Безопасный код
Безопасный кодБезопасный код
Безопасный код
 
1day Opening
1day Opening1day Opening
1day Opening
 
2day Opening
2day Opening2day Opening
2day Opening
 
How to Make a Barcamp
How to Make a BarcampHow to Make a Barcamp
How to Make a Barcamp
 
Текст доклада о разработке плагина к модулю ССК
Текст доклада о разработке плагина к модулю ССКТекст доклада о разработке плагина к модулю ССК
Текст доклада о разработке плагина к модулю ССК
 
Обслуживание мультисайтинга
Обслуживание мультисайтингаОбслуживание мультисайтинга
Обслуживание мультисайтинга
 
Разработка соц. сети на Друпале
Разработка соц. сети на ДрупалеРазработка соц. сети на Друпале
Разработка соц. сети на Друпале
 
За что мы ненавидим Drupal
За что мы ненавидим DrupalЗа что мы ненавидим Drupal
За что мы ненавидим Drupal
 
Многоязычие сайта на Drupal
Многоязычие сайта на DrupalМногоязычие сайта на Drupal
Многоязычие сайта на Drupal
 
Gallery API
Gallery APIGallery API
Gallery API
 
Drupal Do
Drupal DoDrupal Do
Drupal Do
 
Drupal 7 development: first impressions
Drupal 7 development: first impressionsDrupal 7 development: first impressions
Drupal 7 development: first impressions
 
Drupal on ASP.Net
Drupal on ASP.NetDrupal on ASP.Net
Drupal on ASP.Net
 
Веб-аналитика в Drupal2
Веб-аналитика в Drupal2Веб-аналитика в Drupal2
Веб-аналитика в Drupal2
 
Веб-аналитика в Drupal1
Веб-аналитика в Drupal1Веб-аналитика в Drupal1
Веб-аналитика в Drupal1
 
Who is here? DrupalCamp Kyiv 2009 opening
Who is here? DrupalCamp Kyiv 2009 openingWho is here? DrupalCamp Kyiv 2009 opening
Who is here? DrupalCamp Kyiv 2009 opening
 
Разработка модуля для Cms Drupal
Разработка модуля для Cms DrupalРазработка модуля для Cms Drupal
Разработка модуля для Cms Drupal
 
Продвинутый мультисайтинг
Продвинутый мультисайтингПродвинутый мультисайтинг
Продвинутый мультисайтинг
 

I Net

  • 1.
  • 2. Переходим на Url http://my_site/admin/store/products/classes Типы материалов можно создать до установки или включения уберкарта, после включения модулей магазина, главное правильно ввести названия машинного типа. После регистрации данных типов уберкарт автоматически добавит в них филдсет «Product information» с ценами, весом, позицией в каталоге, габаритами, количеством в упаковке количеством добавляемом в корзину по умолчанию. Данный набор может дополнятся либо уменьшаться в зависимости от подключаемых модулей. Неизменными остаются цена, SKU, тип продукта (доставляемый или нет). SKU — уникальный номер товара в Вашем магазине некоторые отказываются от его использования посредством автоматизации присваивания http://www.ubercart.org/contrib/4307
  • 3. Что лучше использовать для категоризации товаров? Taxonomy: 1. Входит в ядро друпала. 2. Использует для навигации taxonomy/term/tid работающий при отсутсвии вьюсов. 3. Неограниченная вложеность категорий 4. Расширямеость функционала дополнительными модулями типа taxonomy_menu, taxonomoy_image и т.д. Category: 1. Категория — нода. 2. Расширяемость ССК полями 3. Возможность шаблонизации в виде node-category_cat.tpl.php 4. Имеет собственное меню (недостатки аналогичны taxonomy_menu, но нет необходимости устанавливать дополнительный модуль). 5. Возможность отображения товаров на странице категории любой из набора созданных views. 6. Возможность отображать на своей-же странице подкатегории помимо товаров (вообще благодаря шаблонизации имеется возможность вывести неограниченное количество любой информации на странице). 7. Для синхронизации с taxonomy использует обертку которая синхронизирует изменения и дополнения в таблицах term_*. 8.Допускается вложенность контейнера в контейнер.
  • 4. Платежный модуль своими руками для Drupal 5.х Регистрация страницы результата платежа 5.х Перекрытие кнопки submit на форме оформления заказа: Для 6-й ветки hook_menu выглядит несколько иначе.
  • 5. Регистрация платежного метода в уберкарт Id — ключ метода Name — имя метода Title — Название которое выводится на странице при выборе метода платежа Desc — описание метода Weight — Вес (необязательно) Callback — функция строящая форму настроек метода платежа Checkout — булевый параметр (истинное предназначение пока не известно)
  • 6. Форма настроек для платежного метода Будет отображаться по адресу: http://my_site/admin/store/settings/payment/edit/methods
  • 7. Функция построения формы для отправки данных на сервер приема платежей Вызывает внутри себя функцию получения данных для построения формы см. ниже. Формат построения данной формы напрямую зависит от требований сайта приемки Платежа, имеет режим для тестирования и режим live
  • 8. Функция подготовки данных для отправки Различия с get_data_testing только в использовании действующих переменных. Формат подготовки данных может отличаться в зависимости от требований платежного Метода В данной функции так-же в зависимости от требований собирается и кодируется строка сигнатуры платежа.
  • 9. Функции обработки платежа 1. Функция кодирования сигнатуры 2. callback_menu страница отображения результатов платежа 3. Вспомогательная функция (была необходима для подмены http на https по требованиям Платежной системы) 4. Функция кодов ошибок возвращаемых сервером приема платежей.
  • 10. Dataimport и с чем его едят 1. Права доступа к выполнению импорта. 2. Регистрация меню для модуля 3. Функция регистрации доступных плагинов для импорта данных 4. Функция обработки настроек импорта для плагина 5. Функция включения batch процесса 6. hook регистрации плагина 7. Ведение уникальности импортируемых данных 8. Обработка уникальности импортируемых данных 9. Хуки для импорта пользователей и комментариев, могут не использоваться.
  • 11. Пример написания плагина для импорта тем форумов для 6.х Processing — массив с callback функциями участвующими в процессе импорта данных м.б. «process», «delete» каждый ключ может содержать несколько callback Settings_form — функция построения формы на странице импорта (можем задать параметры или условия для успешного выполнения импорта) Fifnished, final — callback для завершения batch процесса (может быть несколько).
  • 12.  
  • 13.  
  • 14.  
  • 15. function import_books_row_callback( $row , $ret ) { global $user ; if ( $row [ 'data' ][ 'price' ] >= 4 && (! empty ( $row [ 'data' ][ 'description' ]) or ! empty ( $row [ 'data' ][ 'parent' ]) or ! empty ( $row [ 'data' ][ 'author' ]) or ! empty ( $row [ 'data' ][ 'series' ]))){ $nid = dataimport_get_nid( 'books' , $row [ 'data' ][ 'id' ]); if ( $nid ) { $node = node_load( $nid ); $ret [ 'update' ] = isset ( $ret [ 'update' ]) ? $ret [ 'update' ]+ 1 : 1 ; } else { $node = new StdClass(); $node ->nid = 0 ; $node ->type = 'pbook' ; $node ->status = 1 ; $ret [ 'create' ] = isset ( $ret [ 'create' ]) ? $ret [ 'create' ]+ 1 : 1 ; } $node ->uid = $user ->uid; $node ->shippable = 1 ; $node ->dataimport[ 'type' ] = 'books' ; $node ->dataimport[ 'sku' ] = $row [ 'data' ][ 'id' ]; $node ->model = $row [ 'data' ][ 'id' ]; if ( isset ( $row [ 'data' ][ 'name' ])) $node ->title = $row [ 'data' ][ 'name' ]; if ( isset ( $row [ 'data' ][ 'price' ])) $node ->sell_price = $row [ 'data' ][ 'price' ]; //The changed timestamp is always updated for bookkeeping purposes (revisions, searching, ...) if ( isset ( $row [ 'data' ][ 'isbn' ])) $node ->field_pbook_isbn[ 0 ][ 'value' ] = $row [ 'data' ][ 'isbn' ]; if ( isset ( $row [ 'data' ][ 'author' ])) $node ->field_pbook_authorstr[ 0 ][ 'value' ] = $row [ 'data' ][ 'author' ]; if ( isset ( $row [ 'data' ][ 'description' ])) { $node ->field_pbook_description[ 0 ][ 'value' ] = $row [ 'data' ][ 'description' ]; $node ->field_pbook_description[ 0 ][ 'format' ] = '3' ; } if ( isset ( $row [ 'data' ][ 'publisher' ])) $node ->field_pbook_publisherstr[ 0 ][ 'value' ] = $row [ 'data' ][ 'publisher' ]; if ( isset ( $row [ 'data' ][ 'year' ])) $node ->field_pbook_year[ 0 ][ 'value' ] = $row [ 'data' ][ 'year' ]; if ( isset ( $row [ 'data' ][ 'series' ])) $node ->field_pbook_seriesstr[ 0 ][ 'value' ] = $row [ 'data' ][ 'series' ]; if ( isset ( $row [ 'data' ][ 'cover' ])) $node ->field_pbook_cover[ 0 ][ 'value' ] = $row [ 'data' ][ 'cover' ]; if ( isset ( $row [ 'data' ][ 'pages' ])) $node ->field_pbook_pages[ 0 ][ 'value' ] = $row [ 'data' ][ 'pages' ]; if ( isset ( $row [ 'data' ][ 'lang' ])) { $node ->field_pbook_lang[ 0 ][ 'value' ] = $row [ 'data' ][ 'lang' ]; } else { $node ->field_pbook_lang[ 0 ][ 'value' ] = 1 ;} if ( isset ( $row [ 'data' ][ 'parent' ])) { $sku_keys = explode( ',' , $row [ 'data' ][ 'parent' ]); $node ->category = array (); foreach ( $sku_keys as $sku_key ) { if ( $nid = dataimport_get_nid( 'categories' , intval( $sku_key ))) { $node ->category[ $nid ] = new stdClass(); $node ->category[ $nid ]->nid = $nid ; $node ->category[ $nid ]->cid = $nid ; $node ->category[ $nid ]->cnid = db_result(db_query( "SELECT cnid FROM {category} WHERE cid = %d" , $nid )); } } } node_save( $node ); } }
  • 16. Спасибо за внимание! Юрий Глушков [email_address] [email_address] http://ardas.dp.ua