Управление адресами доставки в настройках пользователя (tpl)
Материал из Umicms
Стоит задача добавить функционал, который позволит пользователю редактировать, добавлять и удалять адреса доставок на системной странице /users/settings/ . Для реализации данной задачи добавим в файл classes/modules/emarket/__custom.php , следующие методы:
public function delivery_edit($template = "edit") {
if(!$template) $template = "default";
$object_id = (int) $_REQUEST['param0'];
list($template_block) = def_module::loadTemplates("tpls/emarket/delivery/{$template}.tpl", "delivery_edit_block");
$block_arr = Array();
$block_arr['id'] = $object_id;
return def_module::parseTemplate($template_block, $block_arr);
}
public function delivery_edit_do($template = "default") {
$objectsCollection = umiObjectsCollection::getInstance();
$cmsController = cmsController::getInstance();
$object_id = (int) getRequest('param0');
if(!permissionsCollection::getInstance()->isOwnerOfObject($object_id)) {
return "%data_edit_foregin_object%";
}
$object = $objectsCollection->getObject($object_id);
$data_module = $cmsController->getModule('data');
$data_module->saveEditedObject($object_id);
$object->commit();
$s_redirect_url = getServer('HTTP_REFERER');
if (strlen($s_redirect_url) && false) {
$this->redirect($s_redirect_url);
} else {
$this->redirect($this->pre_lang . "/users/settings/");
}
}
public function delivery_add_do() {
$controller = cmsController::getInstance();
$collection = umiObjectsCollection::getInstance();
$types = umiObjectTypesCollection::getInstance();
$typeId = $types->getBaseType("emarket", "delivery_address");
$customer = customer::get();
$addressId = $collection->addObject("Address for customer #".$customer->id, $typeId);
$dataModule = $controller->getModule("data");
if($dataModule) {
$dataModule->saveEditedObject($addressId, true, true);
}
$customer->delivery_addresses = array_merge( $customer->delivery_addresses, array($addressId) );
$this->redirect($this->pre_lang . '/users/settings/');
}
public function delivery_del() {
$object_id = (int) getRequest('param0');
if (permissionsCollection::getInstance()->isOwnerOfObject($object_id)) {
umiObjectsCollection::getInstance()->delObject($object_id);
}
$s_redirect_url = getServer('HTTP_REFERER');
if (strlen($s_redirect_url)) {
$this->redirect($s_redirect_url);
} else {
$this->redirect($this->pre_lang . "/users/settings/");
}
}
public function customerDeliveryList($template = 'default') {
$order = $this->getBasketOrder();
list($tpl_block, $tpl_item) = def_module::loadTemplates("./tpls/emarket/delivery/{$template}.tpl",
'delivery_address_block', 'delivery_address_item');
$customer = customer::get();
$addresses = $customer->delivery_addresses;
$items_arr = array();
$collection = umiObjectsCollection::getInstance();
if(is_array($addresses)) foreach($addresses as $address) {
$addressObject = $collection->getObject($address);
$item_arr = array(
'attribute:id' => $address,
'attribute:name' => $addressObject->name
);
$items_arr[] = def_module::parseTemplate($tpl_item, $item_arr, false, $address);
}
$types = umiObjectTypesCollection::getInstance();
$typeId = $types->getBaseType("emarket", "delivery_address");
if($tpl_block) {
return def_module::parseTemplate($tpl_block, array('items' => $items_arr, 'type_id' => $typeId));
} else {
return array(
'attribute:type-id' => $typeId,
'xlink:href' => 'udata://data/getCreateForm/' . $typeId,
'items' => array('nodes:item' => $items_arr)
);
}
}
в папке classes/modules/emarket/ создадим файл permissions.custom.php следующего содержания:
<?php
$permissions = array('purchasing' => array('delivery_edit','delivery_edit_do','delivery_add_do', 'delivery_del', 'customerDeliveryList'));
?>
В шаблоне tpls/users/register/default.tpl, в конце содержания блока 'settings_block' (после тэга </form>) добавим макрос:
%emarket customerDeliveryList('edit')%
А в папку tpls/emarket/delivery/ добавим шаблон edit.tpl следующего содержания:
<?php
$FORMS = Array();
$FORMS['delivery_address_block'] = <<<END
<form action="%pre_lang%/emarket/delivery_add_do/" method="post">
Адреса доставки:
<ul>
%items%
</ul>
<br />
Добавить новый адрес доставки:
%data getCreateForm(%type_id%, 'purchase')%
<p>
<input type="submit" value="Добавить"/>
</p>
</form>
END;
$FORMS['delivery_address_item'] = <<<END
<li>%data getPropertyGroupOfObject(%id%, 'common', 'purchase')% <a href="/emarket/delivery_edit/%id%/">Редактировать</a> <a href="/emarket/delivery_del/%id%/"">Удалить</a></li>
END;
$FORMS['delivery_edit_block'] = <<<END
<form action="%pre_lang%/emarket/delivery_edit_do/%id%/" method="post" enctype="multipart/form-data">
<table border="0" width="420">
%data getEditForm(%id%, 'users')%
</table>
<p><input type="submit" value="Сохранить" /></p>
</form>
END;
?>
После выполнения описанных выше действий, зарегистрированный пользователь сможет на странице, с настройками учетной записи, управлять адресами доставок.