Добавление страниц через клиентскую часть — различия между версиями
VITL' (обсуждение | вклад) (Новая страница: « category:Описание модулей и макросов Используем кастомный макрос, который пропишем в файле…») |
Mad grant (обсуждение | вклад) |
||
(не показано 5 промежуточных версий 1 участника) | |||
Строка 1: | Строка 1: | ||
− | + | [[Категория:Написание кастомных макросов]] | |
Используем кастомный макрос, который пропишем в файле classes/modules/data/__custom.php | Используем кастомный макрос, который пропишем в файле classes/modules/data/__custom.php | ||
<source lang="php"> | <source lang="php"> | ||
Строка 37: | Строка 37: | ||
$data->saveEditedObject($object_id, true); | $data->saveEditedObject($object_id, true); | ||
} | } | ||
+ | |||
$element->getObject()->commit(); | $element->getObject()->commit(); | ||
$element->commit(); | $element->commit(); | ||
Строка 42: | Строка 43: | ||
$parentElement->commit(); | $parentElement->commit(); | ||
− | + | $referer_url = getServer('HTTP_REFERER'); | |
− | $ | + | $buffer = outputBuffer::current('HTTPOutputBuffer'); |
− | + | $ini = cmsController::getInstance()->getModule("content"); | |
− | $ | + | $ini->redirect($referer_url); |
− | |||
− | $ | ||
} | } | ||
</source> | </source> | ||
+ | Если вы используете систему версии 2.7.4 и ниже, то строку: | ||
+ | <pre> | ||
+ | $buffer = outputBuffer::current('HTTPOutputBuffer'); | ||
+ | </pre> | ||
+ | необходимо удалить. | ||
+ | |||
Необходимо в той же папке создать файл permissions.custom.php с таким содержанием: | Необходимо в той же папке создать файл permissions.custom.php с таким содержанием: | ||
+ | <pre> | ||
<?php | <?php | ||
− | + | $permissions = Array('main' => Array('addNewObject')); | |
?> | ?> | ||
− | + | </pre> | |
− | Макросом %data getCreateForm(23,'umi')% на страницу добавляем форму для добавления страницы. Макрос использует шаблон tpls/data/reflection/umi.tpl . Основной блок reflection_block можно сделать таким: | + | Макросом %data getCreateForm(23,'umi')% на страницу добавляем форму для добавления страницы. Макрос использует шаблон tpls/data/reflection/umi.tpl и отображает только '''видимые''' группы полей в указанном типе данных. Основной блок reflection_block можно сделать таким: |
<source lang="php"> | <source lang="php"> | ||
<form method="post" action="%pre_lang%/data/addNewObject/23/" enctype="multipart/form-data" > | <form method="post" action="%pre_lang%/data/addNewObject/23/" enctype="multipart/form-data" > | ||
Строка 69: | Строка 75: | ||
Остальные блоки стандартного содержания. | Остальные блоки стандартного содержания. | ||
В данном примере используется добавление страницы типа Новость, id=23 (Модуль Шаблоны данных). Id страницы которая будет являться родительской по отношению к создаваемой прописана в input’e с name="parent". Делать ли страницу активной, после создания, определяется в: name="active" , 0 – неактивная, 1 – активная. | В данном примере используется добавление страницы типа Новость, id=23 (Модуль Шаблоны данных). Id страницы которая будет являться родительской по отношению к создаваемой прописана в input’e с name="parent". Делать ли страницу активной, после создания, определяется в: name="active" , 0 – неактивная, 1 – активная. | ||
+ | |||
+ | Более полный пример шаблона '''tpls/data/reflection/umi.tpl''': | ||
+ | <source lang="html4strict"> | ||
+ | <?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; | ||
+ | ?> | ||
+ | </source> |
Текущая версия на 20:41, 4 июня 2013
Используем кастомный макрос, который пропишем в файле 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;
?>