Редактирование страниц с клиентской части сайта
В данной статье Добавление страниц через клиентскую часть был описан механизм добавлении объектов каталога с клиентской части сайта. А в текущей статье будет рассказано, как отредактировать объект, также с клиентской части сайта.
Добавим в файл /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>