Добавление страниц через клиентскую часть

Материал из 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;
?>