насчет проблемы того что гости не видят добавленные товары, надо было заменить строчку
$users = $cmsController->getModule("users");
if($users instanceof def_module) {
$users->setDefaultPermissions($element_id);
}
на
permissionsCollection::getInstance()->setDefaultPermissions($element_id);
мэйл отправляю через класс самой umi umiMail
В итоге у меня получилось следущее:
функцию я написал в файл
/classes/modules/catalog/__custom.php<?php
abstract class __custom_catalog {
//TODO: Write here your own macroses
public function addCatalogObjectCust() {
$hierarchy = umiHierarchy::getInstance();
$hierarchyTypes = umiHierarchyTypesCollection::getInstance();
$objectTypes = umiObjectTypesCollection::getInstance();
$cmsController = cmsController::getInstance();
$parent_id = (int) getRequest('param0');
$object_type_id = (int) getRequest('param1');
$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 = $hierarchyTypes->getTypeByName("catalog", "object")->getId();
if(!$object_type_id) {
$object_type_id = $objectTypes->getBaseType("catalog", "object");
}
$object_type = $objectTypes->getType($object_type_id);
if($object_type->getHierarchyTypeId() != $hierarchy_type_id) {
exit($object_type->getHierarchyTypeId().'='.$hierarchy_type_id);
$this->errorNewMessage("Object type and hierarchy type doesn't match");
$this->errorPanic();
}
$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);
$element->setIsActive(true);
$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();
//отправка письма менеджеру
$email_from = 'info@umihelp.ru';//regedit::getInstance()->getVal("//settings/email_from");
$fio_from = 'admin';//regedit::getInstance()->getVal("//settings/fio_from");
$admin_email = 'admin@umihelp.ru';//regedit::getInstance()->getVal("//settings/admin_email");
$someMail = new umiMail();
$someMail->addRecipient($admin_email);
$someMail->setFrom($email_from, $fio_from);
$someMail->setSubject("Add new page on site");
$someMail->setContent($mail_content);
$someMail->commit();
$someMail->send();
if($is_xslt) {
return Array("node:result" => "ok");
} else {
if($element->getIsActive()) {
$referer_url = $hierarchy->getPathById($element_id);
} else {
$referer_url = getServer('HTTP_REFERER');
}
$this->redirect($referer_url);
}
}
};
?>
и создал файл с правами для гостей на эту функцию
/classes/modules/catalog/permissions.custom.php<?php
$permissions = Array(
'view' => Array('addCatalogObjectCust')
);
?>
шаблон для вывода формы на
xslt выглядит так
<form action="/catalog/addCatalogObjectCust/90/71">
<input type="text" name="title" value="имя нового товара" />
<xsl:apply-templates select="document('udata://data/getCreateForm/71')" />
<input type="submit" value="добавить новый объект каталога" />
</form>
параметры у функции
/catalog/addCatalogObjectCust/90/71 в атрибуте формы action:
90 - id родительского раздела куда нужно будет кидать созданную страницу
71 - тип данных "объект каталога", можно посмотреть зайдя в модуль "шаблоны данных" и открыв на редактированию нужный тип данных в адресной строке увидите его id
параметр при вызове
udata://data/getCreateForm/71:
71 - тип данных "объект каталога", можно посмотреть зайдя в модуль "шаблоны данных" и открыв на редактированию нужный тип данных в адресной строке увидите его id