Управление адресами доставки в настройках пользователя (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; ?>
После выполнения описанных выше действий, зарегистрированный пользователь сможет на странице, с настройками учетной записи, управлять адресами доставок.
