Редактирование страниц с клиентской части сайта — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «В данной статье Добавление страниц через клиентскую часть был описан механизм добавлен…»)
(нет различий)

Версия 22:19, 26 января 2011

В данной статье Добавление страниц через клиентскую часть был описан механизм добавлении объектов каталога с клиентской части сайта. А в текущей статье будет рассказано, как отредактировать объект, также с клиентской части сайта.

Добавим в файл /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>