Редактирование страниц с клиентской части сайта
Материал из Umicms
В данной статье Добавление страниц через клиентскую часть был описан механизм добавлении объектов каталога с клиентской части сайта. А в текущей статье будет рассказано, как отредактировать объект, также с клиентской части сайта.
Добавим в файл /classes/modules/data/__custom.php метод editform(), который выведет форму редактирования объекта:
public function editform() { if(!$page_id = htmlspecialchars(getRequest('id'))) return false; $hierarchy = umiHierarchy::getInstance(); $element = $hierarchy->getElement($page_id); if($element instanceof umiHierarchyElement) { $object_id = $element->getObjectId(); $permissions = permissionsCollection::getInstance(); $cmsController = cmsController::getInstance(); $user_id = $permissions->getUserId(); if(!$permissions->isOwnerOfObject($object_id, $user_id)) return false; $data = $cmsController->getModule("data"); return $data->getEditForm($object_id, 'default'); } }
Также необходимо добавить метод, который будет отвечать за сохранение данных:
public function saveobjectcustom() { if(!$data = getRequest('data')) return false; $arr_key = array_keys($data); $object_id = (int) $arr_key[0]; $permissions = permissionsCollection::getInstance(); $cmsController = cmsController::getInstance(); $user_id = $permissions->getUserId(); if(!$permissions->isOwnerOfObject($object_id, $user_id)) return false; $objects = umiObjectsCollection::getInstance(); $object = $objects->getObject($object_id); if($object instanceof umiObject){ $cmsController = cmsController::getInstance(); $data = $cmsController->getModule("data"); $data->saveEditedObject($object_id); $object->commit(); $referer_url = getServer('HTTP_REFERER'); $buffer = outputBuffer::current('HTTPOutputBuffer'); $ini = cmsController::getInstance()->getModule("content"); $ini->redirect($referer_url); } }
Если говорить про TPL-шаблоны, то в шаблоне \tpls\data\reflection\default.tpl блок reflection_block должен быть примерно следующий:
$FORMS['reflection_block'] = <<<END <i>Редактирование объекта</i> <form enctype="multipart/form-data" method="post" action="%pre_lang%/data/saveobjectcustom/"> %groups% <input type="submit" value="Сохранить" /> </form> END;
В административной части сайта создаем страницу контента, допустим с идентификатором 'editobject', в контенте этой страницы
прописываем следующий макрос:
%data editform()%
А для объектов каталога, добавляем ссылку:
<a href="/editobject/?id=%id%">Редактировать</a>
