Мигрирайте началната страница на Ubercart
Модулът Migrate е рамка за мигриране (импортиране) на данни към Drupal от произволен източник.
Тези, които са работили с ubercart, знаят, че този модул използва собствена отделна таблица за съхраняване на обща (основна) информация за продукта. Принципът на работа е прост – при зареждане на възела се задейства hook_load() и данните от таблиците се зареждат в текущия $node обект. Когато промените информация във формуляра за създаване/редактиране на продукт, новите стойности незабавно се променят в обекта $node, след което hook_insert() или hook_update() се обработват и данните влизат в таблицата. Като цяло това не е нова практика (повече). Защо го описах подробно - така че да стане ясен един очевиден и важен детайл - "за да промените цената на ubercart на продукт, просто трябва да промените стойността му в обекта $nodeпреди да извикате функцията node_save".
Така че механизмът е ясен. Целените извиквания "node_save" мигрират по време на импортиране. Проблемът е, че извън кутията той няма представа за такива свойства на продукта на ubercart като „model“, „list_price“, „cost“, „sell_price“ и т.н., и т.н. Нищо не можеш да направиш, ще трябва да го "научиш".
migrate има поддръжка за своите целеви добавки. Класът за импортиране по подразбиране за възли е MigrateDestinationNode. Нека създадем наш собствен клас MigrateDestinationProductNode, наследявайки всички методи и свойства на родителя (не искаме да преработваме цялата обработка на импортиране на възли):
Списъкът с налични полета за импортиране се показва от MigrateDestinationNode::fields($migration); Тук ще го променим (просто го добавете):
Е, общо взето, това е всичко, което имам за днес :-)
Реализацията на този клас може да бъде поставена в същия файл, където създавате своя клас за миграция. Сега нашата миграция ще бъде наясно с основните полета на ubercart. По-рано в мояв класа за импортиране сте използвали следната конструкция:
сега просто използвайте новия клас:
Ако migrateUI е активиран, тогава новите полета ще бъдат достъпни за „обвързване“: