SlideShare a Scribd company logo
Что удобнее использовать - стандартный тип материала product или свой собственный? Product 1. Работает со стандартным каталогом уберкарта. 2. Позволяет набивать в себя дополнительные ССК поля 3. Темизация шаблона вывода  (node-product.tpl.php) 4. Работа с таксономией и views. и т.д. My type 1. Работает со стандартным каталогом уберкарта. 2. Позволяет набивать в себя дополнительные ССК поля 3. Темизация шаблона вывода  (node-product.tpl.php) 4. Работа с таксономией и views. и т.д. Краткий вывод: Разницы в использовании своих типов материалов, либо особой нет, это лишь дело вкуса и пристрастий каждого из разработчиков. В реальных разработках мы иногда сталкиваемся с необходимостью использовать несколько типов продуктов с разными наборами полей к примеру продажа Книг, Копмакт дисков, Журналов либо каких-то других периодических изданий.  У каждого из этих товаров в любом случае имеется свой набор соответствующих полей которые специфичны для того или иного вида к примеру у книги это 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

More Related Content

PPT
Ubercart -nemnogo_primerov_iz_zhizni
PPT
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
PPT
Импорт данных с фреймворком Migrate. Владислав Богатырев.
PPTX
Реализация шаблонов корпоративных приложений в Magento
ODP
Семинар-практикум по Drupal
PPTX
Meet Magento Belarus debug Pavel Novitsky (rus)
PPT
Боремся с "лишними" переходами на сайте, или еще пара слов о попапах и аяксах.
Ubercart -nemnogo_primerov_iz_zhizni
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Реализация шаблонов корпоративных приложений в Magento
Семинар-практикум по Drupal
Meet Magento Belarus debug Pavel Novitsky (rus)
Боремся с "лишними" переходами на сайте, или еще пара слов о попапах и аяксах.

What's hot (20)

PPT
Removing superfluous page loads, or a few more words about popups and ajax
PDF
Что нового в Perl? 5.10 — 5.16
PPT
Yserver
PPTX
Вебинар Томулевича adjacency
PPTX
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
PPT
Rose::DB
PPTX
Стажировка-2015. Разработка. Занятие 14. Twitter Flight
PPTX
Web осень 2013 лекция 4
KEY
Tequila - язык для продвинутой генерации JSON
PDF
Разработка на Perl под Raspberry PI
PPTX
SharePoint Virtualization "Виртуальный SharePoint 2010"
ODP
Building corporate portals with liferay JEEConf 2011
PPTX
I tmozg js_school_jquery
PDF
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
PPT
Javascript
PDF
Лекция #7. Django ORM
PDF
Perl 5.10 и 5.12
PDF
2014-08-02 02 Алексей Цитркоп. Twitter Flight
PDF
Mojo. The web in a box!
Removing superfluous page loads, or a few more words about popups and ajax
Что нового в Perl? 5.10 — 5.16
Yserver
Вебинар Томулевича adjacency
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
Rose::DB
Стажировка-2015. Разработка. Занятие 14. Twitter Flight
Web осень 2013 лекция 4
Tequila - язык для продвинутой генерации JSON
Разработка на Perl под Raspberry PI
SharePoint Virtualization "Виртуальный SharePoint 2010"
Building corporate portals with liferay JEEConf 2011
I tmozg js_school_jquery
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Javascript
Лекция #7. Django ORM
Perl 5.10 и 5.12
2014-08-02 02 Алексей Цитркоп. Twitter Flight
Mojo. The web in a box!
Ad

Viewers also liked (9)

ODP
презентация соц сеть на друпале
PPT
порівняння Drupal та Typo3
PPT
PPT
Galleryapi
PPT
Multilanguage Drupal
PPT
Drupal Do
PPT
Galleryapi
PPT
Drupal Camp2009 Asp.Net Vs Drupal
PDF
Multilangaunguage Drupal
презентация соц сеть на друпале
порівняння Drupal та Typo3
Galleryapi
Multilanguage Drupal
Drupal Do
Galleryapi
Drupal Camp2009 Asp.Net Vs Drupal
Multilangaunguage Drupal
Ad

More from Inna Tuyeva (15)

RTF
ODP
азы мультисайтинга
PPT
продвинутый мультисайтинг
ODP
обслуживание мультисайтинга
PPT
PPT
разработка модуля для Cms Drupal
ODP
Drupal Paranoia
TXT
Paranoia
PPT
Drupal Paranoia
ODT
Drupal Paranoia
PPT
PDF
PPTX
за что мы ненавидим друпал
PPT
веб аналитика в Drupal1
PPT
веб аналитика в Drupal
азы мультисайтинга
продвинутый мультисайтинг
обслуживание мультисайтинга
разработка модуля для Cms Drupal
Drupal Paranoia
Paranoia
Drupal Paranoia
Drupal Paranoia
за что мы ненавидим друпал
веб аналитика в Drupal1
веб аналитика в Drupal

I Net

  • 1. Что удобнее использовать - стандартный тип материала product или свой собственный? Product 1. Работает со стандартным каталогом уберкарта. 2. Позволяет набивать в себя дополнительные ССК поля 3. Темизация шаблона вывода (node-product.tpl.php) 4. Работа с таксономией и views. и т.д. My type 1. Работает со стандартным каталогом уберкарта. 2. Позволяет набивать в себя дополнительные ССК поля 3. Темизация шаблона вывода (node-product.tpl.php) 4. Работа с таксономией и views. и т.д. Краткий вывод: Разницы в использовании своих типов материалов, либо особой нет, это лишь дело вкуса и пристрастий каждого из разработчиков. В реальных разработках мы иногда сталкиваемся с необходимостью использовать несколько типов продуктов с разными наборами полей к примеру продажа Книг, Копмакт дисков, Журналов либо каких-то других периодических изданий. У каждого из этих товаров в любом случае имеется свой набор соответствующих полей которые специфичны для того или иного вида к примеру у книги это ISBN, у журнала периодичность издания, у диска тип или жанр предоставляемой на нем информации. В таком случае нам волей неволей придется использовать несколько типов материалов и помнить что такое product не всегда удобно да и нужно. В таких случаях проще отказаться от типа по умолчанию и создать свои типы «book», «disk», «magazine» зарегистрировать их в уберкарте.
  • 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