Добавление адреса доставки при регистрации

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.91

Поставим задачу добавить адрес доставки при регистрации пользователя. Для этого нам необходимо обработать событие регистрации и создать при регистрации новый адрес доставки. В форме регистрации выведем поля для требуемого объекта через data getCreateForm() в форме появятся поля для ввода данных адреса вида: <input class="textinputs" type="text" value="" name="data[new][index]"> напишем обработчик события users_registrate, который будет создавать новый адрес доставки и указывать его в аккаунте пользователя. В файл ~/classes/modules/users/custom_events.php добавим строку

<?php
	new umiEventListener("users_registrate", "users", "add_address_for_delivery");
?>

Теперь напишем обработчик add_address_for_delivery. В файл ~/classes/modules/users/__custom.php добавим после строки //TODO: Write here your own macroses

<?php
public function add_address_for_delivery(iUmiEventPoint $oEventPoint){
if ($oEventPoint->getMode() === "before") return true;

if ($oEventPoint->getMode() === "after") {
$user_id = $oEventPoint->getParam("user_id");
$data=getRequest('data');
//var_dump($data);die();
$typesCollection = umiObjectTypesCollection::getInstance();
$typeId = $typesCollection->getBaseType('emarket', 'delivery_address');
$objectsCollection = umiObjectsCollection::getInstance();
$name='Address for customer #'.$user_id;
$id_address=$objectsCollection->addObject($name,$typeId);
$address=$objectsCollection->getObject($id_address);
$data=$data['new'];
foreach($data as $key=>$value){
$address->setValue($key,$value);
$address->commit();
}

$user=$objectsCollection->getObject($user_id);
$address_list=$user->getValue('delivery_addresses');
//var_dump($address_list);die();
$address_list[]=$id_address;
$user->setValue('delivery_addresses',$address_list);
$user->commit();
}
return true;
}
?>

метод будет получать массив new из формы и заполнять созданный объект типа "Адрес доставки".