Добавление страниц через клиентскую часть
Материал из Umicms
Используем кастомный макрос, который пропишем в файле classes/modules/data/__custom.php
public function addNewObject() { $hierarchy = umiHierarchy::getInstance(); $hierarchyTypes = umiHierarchyTypesCollection::getInstance(); $objectTypes = umiObjectTypesCollection::getInstance(); $cmsController = cmsController::getInstance(); $parent_id = (int) getRequest('parent'); if (!$object_type_id = (int) getRequest('param0')) return ""; $title = htmlspecialchars(trim(getRequest('title'))); $parentElement = $hierarchy->getElement($parent_id); $tpl_id = $parentElement->getTplId(); $domain_id = $parentElement->getDomainId(); $lang_id = $parentElement->getLangId(); $hierarchy_type_id = $objectTypes->getType($object_type_id)->getHierarchyTypeId(); $element_id = $hierarchy->addElement($parent_id, $hierarchy_type_id, $title, $title, $object_type_id, $domain_id, $lang_id, $tpl_id); permissionsCollection::getInstance()->setDefaultPermissions($element_id); $element = $hierarchy->getElement($element_id, true); (getRequest('active'))?$element->setIsActive(true):$element->setIsActive(false); $element->setIsVisible(false); $element->setName($title); $data = $cmsController->getModule("data"); if($data instanceof def_module) { $object_id = $element->getObjectId(); $data->saveEditedObject($object_id, true); } $element->getObject()->commit(); $element->commit(); $parentElement->setUpdateTime(time()); $parentElement->commit(); $referer_url = getServer('HTTP_REFERER'); $buffer = outputBuffer::current('HTTPOutputBuffer'); $ini = cmsController::getInstance()->getModule("content"); $ini->redirect($referer_url); }
Если вы используете систему версии 2.7.4 и ниже, то строку:
$buffer = outputBuffer::current('HTTPOutputBuffer');
необходимо удалить.
Необходимо в той же папке создать файл permissions.custom.php с таким содержанием:
<?php
$permissions = Array('main' => Array('addNewObject'));
?>
Макросом %data getCreateForm(23,'umi')% на страницу добавляем форму для добавления страницы. Макрос использует шаблон tpls/data/reflection/umi.tpl и отображает только видимые группы полей в указанном типе данных. Основной блок reflection_block можно сделать таким:
<form method="post" action="%pre_lang%/data/addNewObject/23/" enctype="multipart/form-data" > Название страницы: <input type="text" name="title" /> <table> %groups% <table> <input style="visibility:hidden" type="checkbox" checked="checked" name="parent" value="42" /> <input style="visibility:hidden" type="checkbox" checked="checked" name="active" value="0" /> <input type="submit" /> </form>
Остальные блоки стандартного содержания. В данном примере используется добавление страницы типа Новость, id=23 (Модуль Шаблоны данных). Id страницы которая будет являться родительской по отношению к создаваемой прописана в input’e с name="parent". Делать ли страницу активной, после создания, определяется в: name="active" , 0 – неактивная, 1 – активная.
Более полный пример шаблона tpls/data/reflection/umi.tpl:
<?php $FORMS = Array(); $FORMS['reflection_block'] = <<<END <i>Добавление объекта</i> <form method="post" action="%pre_lang%/data/addNewObject/23/" enctype="multipart/form-data" > Название страницы: <input type="text" name="title" /> <table> %groups% <table> <input style="visibility:hidden" type="checkbox" checked="checked" name="parent" value="42" /> <input style="visibility:hidden" type="checkbox" checked="checked" name="active" value="0" /> <input type="submit" value="Добавить" /> </form> END; $FORMS['reflection_group'] = <<<END <hr /> <b>%title%</b><br /> <table border="0" width="500"> %fields% </table> END; $FORMS['reflection_field_string'] = <<<END <tr> <td> %title%: </td> <td> <input type="text" name="%input_name%" value="%value%" size="50" /> </td> </tr> END; $FORMS['reflection_field_text'] = <<<END <tr> <td> %title%: </td> <td> <textarea name="%input_name%" style="width: 200px">%value%</textarea> </td> </tr> END; $FORMS['reflection_field_wysiwyg'] = <<<END <tr> <td> %title%: </td> <td> <textarea name="%input_name%" style="width: 200px">%value%</textarea> </td> </tr> END; $FORMS['reflection_field_int'] = <<<END <tr> <td> %title%: </td> <td> <input type="text" name="%input_name%" value="%value%" size="15" /> </td> </tr> END; $FORMS['reflection_field_relation'] = <<<END <tr> <td> %title%: </td> <td> <select name="%input_name%"> <option /> %options% </select> </td> </tr> END; $FORMS['reflection_field_img_file'] = <<<END <tr> <td> %title%: </td> <td> <table width="100%"> <tr> <td> <input type="file" name="%input_name%" /> </td> <td> %data getPropertyOfObject(%object_id%, '%name%', 'avatar')% </td> </tr> </table> </td> </tr> END; ?>
