Управление адресами доставки в настройках пользователя (tpl) — различия между версиями
Материал из Umicms
VITL' (обсуждение | вклад) (Новая страница: «Стоит задача добавить функционал, который позволит пользователю редактировать, добавлят…») |
Mad grant (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 60: | Строка 60: | ||
} else { | } else { | ||
$this->redirect($this->pre_lang . "/users/settings/"); | $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) | ||
+ | ); | ||
} | } | ||
} | } | ||
Строка 66: | Строка 101: | ||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
− | $permissions = array('purchasing' => array('delivery_edit','delivery_edit_do','delivery_add_do', 'delivery_del')); | + | $permissions = array('purchasing' => array('delivery_edit','delivery_edit_do','delivery_add_do', 'delivery_del', 'customerDeliveryList')); |
?> | ?> | ||
</source> | </source> | ||
Строка 112: | Строка 147: | ||
После выполнения описанных выше действий, зарегистрированный пользователь сможет на странице, с настройками учетной записи, управлять адресами доставок. | После выполнения описанных выше действий, зарегистрированный пользователь сможет на странице, с настройками учетной записи, управлять адресами доставок. | ||
+ | [[Категория:Модуль Интернет магазин]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Верстка в TPL]] |
Текущая версия на 12:48, 5 июня 2013
Стоит задача добавить функционал, который позволит пользователю редактировать, добавлять и удалять адреса доставок на системной странице /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;
?>
После выполнения описанных выше действий, зарегистрированный пользователь сможет на странице, с настройками учетной записи, управлять адресами доставок.