Управление адресами доставки в настройках пользователя (tpl)

Материал из Umicms
Версия от 12:48, 5 июня 2013; Mad grant (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Стоит задача добавить функционал, который позволит пользователю редактировать, добавлять и удалять адреса доставок на системной странице /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;

?>

После выполнения описанных выше действий, зарегистрированный пользователь сможет на странице, с настройками учетной записи, управлять адресами доставок.