Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

0 Пользователей и 1 Гость просматривают эту тему.

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #45 : 31 Января 2012, 10:22:14 »
К сожалению не работает....Такое ощущение, что вообще функция не обрабатывается, пробовал с отправкой сообщения, без отправки, пустую без кода), объект не добавляется, письмо не отправляется....Может в системе нужно что-то "включить", чтобы этот файл _custom.php обрабатывался?

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #46 : 31 Января 2012, 10:47:09 »
Что заметил - когда обрабатывается функция добавления в class.php, то после добавления объекта происходит перенаправление на страницу объекта, а когда таже самая функция в _custom.php, то появляется страница http://site.ru/catalog/addCatalogObjectSuper/9/157........Может во втором случае функция как-то "недообрабатывается"?

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #47 : 31 Января 2012, 13:40:32 »
Короче я что подумал - черт с ним с custom'ом), пускай добавляется через class.php. Последний вопрос по теме - нужно чтобы объекту автоматически присваивалось имя его номера. Думал в форме сделать такое поле

   <input style="visibility:hidden" type="text" name="title" value="id" />

Но что ставить на место id?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #48 : 31 Января 2012, 20:59:34 »
насчет проблемы того что гости не видят добавленные товары, надо было заменить строчку

$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

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #49 : 31 Января 2012, 21:38:38 »
СПАСИБО ВАМ ОГРОМНЕЙШЕЕ!!! ВЫ ОЧЕНЬ ВЫРУЧИЛИ!!!

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #50 : 31 Января 2012, 21:41:03 »
Только у меня как обычно что-то да не так) почта не отправляется, но это я наверное что-то не так сделал...

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #51 : 31 Января 2012, 22:06:52 »
а вот не факт)) у меня тоже с ней были проблемы, но так как этот скрипт корректно работал раньше я погрешил на тот сервак на котором тестировал, но возможно проблема в коде или старый код уже не прокатывает с 2.8.5 версией, так что это надо еще проверять. Если будете тестировать и проверять сами, попробуйте с вашим изначальным вариантом отправки через

$Name = "otnoshenialux.ru"; //senders name
$email = "info@otnoshenialux.ru"; //senders e-mail adress
$recipient = "djalimaria@gmail.com"; //recipient
$mail_body = "The new comment on a site. For its editing follow the link: http://otnoshenialux.ru/admin/comments/edit/$message_id"; //mail body
$subject = "New comment"; //subject
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields

if(mail($recipient, $subject, $mail_body, $header)){
  return true;
} else {
  return false;
}

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #52 : 31 Января 2012, 22:17:41 »
Да, вот это работает, единственное что ваш вариант отправляет сразу на страницу объекта, а этот нет, но это уже не существенно. Спасибо вам большое, огромное спасибо, вы действительно оказали большую помощь, здорово что есть к кому обратиться за помощью, тем более в решении таких нестандартных вопросов.

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #53 : 31 Января 2012, 23:13:18 »
Я тут еще один вопрос задавал) Можно ли сделать так чтобы объекту при добавлении присваивалось название его ID? 

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #54 : 31 Января 2012, 23:19:30 »
если не ошибаюсь то:
$title = $object_type_id;
$object_type_id - должен быть объявлен выше title.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #55 : 01 Февраля 2012, 08:51:29 »
Если вопрос состоит в том, чтобы id созданного объекта стал его псевдостатическим адресом или именем, то для этого используются функции

$element->setAltName('name_of_link')
$element->setName('Имя нового объекта');

соответственно setName уже есть в коде и если вам надо изменить псевдостатический адрес на id ново созданного объекта, то пониже строчки
$element->setName($title);
допишите
$element->setAltName($element_id);

А если, вы хотите избавиться от input поля title, которое вводит пользователь при создании объекта, то сделайте его скрытым и пропишите в value любое значение. Так как, используя функции setName() и setAltName() вы это значение уже после создания объекта переименуете в то, что вам надо
« Последнее редактирование: 01 Февраля 2012, 08:56:32 от admin »

*

diii3

  • ***
  • 154
  • +6/-0
    • Просмотр профиля
Re:Добавление объекта каталога посетителем
« Ответ #56 : 01 Февраля 2012, 17:15:00 »
Спасибо большое!