UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: diii3 от 25 Декабря 2011, 22:13:29

Название: Добавление объекта каталога посетителем
Отправлено: diii3 от 25 Декабря 2011, 22:13:29
Здравствуйте! Подскажите, пожалуйста, нужно сделать так чтобы посетитель сайта мог добавлять объекты в каталог. Шаблон сайта на XSLT.  Может быть есть ссылки на похожую инструкцию или что-то типа того. понимаю, что так просто наверно не объяснишь, буду благодарен за любую помощь. Спасибо.
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 26 Декабря 2011, 05:51:12
почему) как раз такой макрос есть в umi, посмотри в файле /classes/modules/catalog/class.php макрос addCatalogObject() она как раз добавляет товар в систему со стороны сайта. Для того чтобы она все ок сохранила надо сделать такой шаблон для формы добавлений (Пишу на память так что стопроцентной точности не обещаю)

<form action="/catalog/addCatalogObject/[parent_id]/[object_type_id]">
<input type="text" name="titile" value="имя нового товара" />
<xsl:apply-teplates select="document('udata://data/getCreateForm/772')/udata" />
<input  type="submit" value="добавить новый товар" />
</form>

[object_type_id] - необязательный, но если у вас товар является подтипом относительно типа данных "Объект каталога", то надо его указать
772 в макросе getCreateForm это id типа данных, для которого необходимо вывести форму добавления, он же object_type_id так что это один и тот же параметр, но если в атрибуте action для тега form его можно не указывать, то для макроса  getCreateForm  все равно придеться иначе система не поймет какие поля выводить для заполнения

P.S. Вроде ничего не забыл, но честно говоря не проверял этот способ с 2.8.1 версии, так что пробуйте и отписывайтесь сюда по результатам
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 26 Декабря 2011, 23:19:00
Спасибо огромнейшее! Думал тысячу лет буду этот вопрос решать, а тут готовое решение. Как попробую, сразу отпишусь. У однозначно очень полезный форум! Спасибо еще раз.
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Декабря 2011, 14:56:55
Не работает, к сожалению, вот что пишет:

Fatal error: Call to a member function getTplId() on a non-object in /home/o/otnoshenru/public_html/classes/modules/catalog/class.php on line 496
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 01 Января 2012, 21:15:15
496 строка в class.php:

$domain_id   = $parentElement->getDomainId();
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 04 Января 2012, 14:26:26
Вроде заработало)) Спасибо!
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 05 Января 2012, 10:29:36
сам разобрался? я так понял у тебя была проблема с тем, что не определялся родительский элемент?
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 05 Января 2012, 10:42:29
он видно сначала не понял куда вносить информацию.....теперь возникла еще одна проблема - система не формирует форму добавления. то есть выдает название (ну мы же указали title), а форму, которая должна формироваться ниже не выводит....буду признателен если поможете разобраться. спасибо.
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 05 Января 2012, 11:33:37
чем именно помочь? не формирует форму, проверяй макрос, шаблон и id типа данных по которым должна формироваться эта форма или проблема появилась после каких-то действий?
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 05 Января 2012, 13:14:06
глупый вопрос задам) - <xsl:apply-teplates select="document('udata://data/getCreateForm/772')/udata" /> автоматически формирует форму или ее нужно самостоятельно формировать?
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 05 Января 2012, 13:54:00
Я имею ввиду - обязательно ли описывать к ней шаблон или он автоматически может быть сгенерирован с помощью <xsl:apply-teplates select="document('udata://data/getCreateForm/772')/udata" /> ?
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 05 Января 2012, 14:05:14
Ура! Вроде во всем разобрался)) Спасибо!
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 06 Января 2012, 16:49:29
Еще один вопрос появился) - когда идет добавление незарегистрированным пользователем, то появляется раздел "авторизация". Собственно нужно, чтобы добавление было без авторизации. Я поставил права для гостя на редактирование каталога, однако ничего не изменилось. Если знаете подскажите , пожалуйста, как здесь нужно действовать.
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 07 Января 2012, 07:22:13
функция добавления наверно вынесена в раздел прав которые все еще не разрешен пользователю и гостю, попробуй создать permissions.custom.php и там прописать эту функцию в массив прав в который входят функции типа getObjectsList и т.д.
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 07 Января 2012, 18:55:22
Я в этом деле новичок и если честно я не очень понимаю как, где и что писать...Мне нужно создать файл с именем permissions.custom.php и туда скопировать функцию из class.php?
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 09 Января 2012, 19:43:35
Может быть есть пример этого файла (permissions.custom.php)? 
Название: Re:Добавление объекта каталога посетителе
Отправлено: Vladimir от 09 Января 2012, 20:10:52
Все просто.
У вас есть класс permissions.php в папке с модулем
Дублируете его, переименовываете в permissions.custom.php
Далее смотрите, в какой ветке масива есть публичные методы, например, getObjectsList и в эту же ветку вписываете ИМЯ своего кастомного макроса. Если оно уже упоминается в другой ветке, оттуда его удаляете.
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 10 Января 2012, 00:16:56
Спасибо большое! Объект теперь добавляется. Единственное что - при добавлении он не отображается сразу на сайте, то есть приходится заходить в админку и ставить галочку в правах на доступ. Подскажите, пожалуйста, как это можно исправить? Планируется что будет все автоматически добавлятся и это очень важно. Спасибо.
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 12 Января 2012, 17:43:35
Может нужно какие-то права добавить пользователю "Гость"?
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 14 Января 2012, 18:18:54
в правах , в смысле снизу при редактировании этого товара?
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 14 Января 2012, 19:11:02
Нужно сделать так, чтобы объект добавлялся со стороны сайта незарегистрированным пользователем. Он, собственно, и добавляется, но не отображается на сайте, так как внизу у него не стоит галочка видимости (при редактировании товара). Ее конечно можно ставить вручную, но нужно чтобы объекты добавлялись без участия администратора сайта, поэтому такой способ неприемлем.

И вот где, кому, какие права давать и что собственно делать мне совершенно не ясно)
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 14 Января 2012, 21:43:14
попробуй пользователю "Гость" добавить права, на редактирование товара, хотя может это и не помочь, тут возможно надо будет править скрипт который добавляет товар
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 14 Января 2012, 21:45:29
сделал, к сожалению, не помогло...а скрипт как править? подскажите пожалуйста
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 14 Января 2012, 22:30:16
надо самому пробывать, тут скорее всего вопрос в строчке 474 в файле /classes/modules/class.php
$users->setDefaultPermissions($element_id);

а вот на что её заменить сходу не скажу, надо проверить вначале, да и еще если что-то менять, то надо сделать клон этого макроса в __custom.php файл и там уже менять и уже к кастомному файлу обращаться из шаблона, а то при обновлении перезатрет
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 14 Января 2012, 23:33:48
Спасибо вам большое за помощь. Только, к сожалению, я далек от таких тонкостей и даже не представляю каким образом сделать подобное. Но, в любом случае, спасибо.
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 14 Января 2012, 23:35:59
diii3 завтра продолжим наш разговор, сейчас уже ухожу от компьютера, может смогу помочь наглядными примерами
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 14 Января 2012, 23:36:43
Спасибо огромное!
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 21 Января 2012, 21:07:42
Я снова по этой теме) Вот у меня вопрос такой - если нельзя сделать так чтобы добавлялось без премодерации, то можно ли сделать, чтобы после нажатия на кнопку добавления человек попадал не на страницу объекта каталога, где ему выходит надпись авторизация, а на созданную другую страницу? Ну то есть где будет указанно, что "Ваш объект будет добавлен после рассмотрения" или тому подобное. Или сделать обработку страницы "Авторизация" и написать там то, что нужно?
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 26 Января 2012, 20:54:31
Вопрос с автоматическим добавлением, я думаю, будет снят, тут видно без регистрации посетителей не обойтись, ну и ладно. Из этого вышло следующее - нужно сделать уведомление на почту о добавлении нового объекта, можно ли как-то это организовать, без лишних сложностей? Я задавал подобный вопрос несколько месяцев назад по поводу уведомления на почту о новых комментариях  к постам блога, но здесь наверно по другому как-то должно работать.
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 27 Января 2012, 11:51:52
да нет суть такая же самая, только так как в функции добавления нет event point то, скорее всего надо скопировать функцию как свою кастомную и просто прописать в нее код отправки письма так же как в функции отправки письма при добавлении комментария в блоге
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 28 Января 2012, 16:45:41
то есть мне нужно в папке classes/modules/catalog в файл __custom.php добавить весь код public function addCatalogObject() из class.php и в него добавить код на примере этого:

$message_id  = $event->getParam('message_id');
 
   $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;
   }
}      

Я правильно понял?)
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 28 Января 2012, 16:58:47
суть да, только я бы убрал строчку
$message_id  = $event->getParam('message_id');
так как это уже функция не для обработки события и $event у неё просто не будет, $message_id вы уже получали выше при создании нового объекта

и вот так
if(mail($recipient, $subject, $mail_body, $header)){
      return true;
   } else {
      return false;
   }
я почту еще не отправлял, всегда пользовался api классом для отправки почты, но на работоспособность этой функции мой личный опыт конечно вряд ли повлияет))
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 28 Января 2012, 17:05:57
Спасибо большое!! Попробую. Только я не понял - второй код указанный вами тоже убрать из общего кода?
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 28 Января 2012, 17:50:26
Что-то не получается отправка( Вот весь код, может я что-то не так понял?

<?php
   abstract class __custom_catalog {
      //TODO: Write here your own macroses
   };
   
   
   function addCatalogObject() {
      $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");
      }

      if($parentElement instanceof umiHierarchyElement) {
         if($type_id = $hierarchy->getDominantTypeId($parent_id)) {
            $object_type_id = $type_id;
         }
      }


      $object_type = $objectTypes->getType($object_type_id);
      if($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);

      $users = $cmsController->getModule("users");
      if($users instanceof def_module) {
         $users->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();

      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);
      }
      
      
      
      
      $Name = "vladcity33.ru"; //senders name
   $email = "info@vladcity33.ru"; //senders e-mail adress
   $recipient = "diii3@yandex.ru"; //recipient
   $mail_body = "The new comment on a site."; //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;
   }   
      
      
      
      
   };

   
   
   
   
   
   
?>
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 28 Января 2012, 19:21:04
часть с отправкой почты не отрабатывается, так как выше стоит блок который делает редирект

 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);
      }

этот блок должен быть самым последним
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 28 Января 2012, 20:19:39
Не работает, к сожалению, вот весь код, может я что-то упустил?

<?php
   abstract class __custom_catalog {
      //TODO: Write here your own macroses
   };
   
   
   function addCatalogObject() {
      $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");
      }

      if($parentElement instanceof umiHierarchyElement) {
         if($type_id = $hierarchy->getDominantTypeId($parent_id)) {
            $object_type_id = $type_id;
         }
      }


      $object_type = $objectTypes->getType($object_type_id);
      if($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);

      $users = $cmsController->getModule("users");
      if($users instanceof def_module) {
         $users->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();


      
      
      
      
      $Name = "vladcity33.ru"; //senders name
   $email = "diii3@yandex.ru"; //senders e-mail adress
   $recipient = "diii3@yandex.ru"; //recipient
   $mail_body = "The new comment on a site."; //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;
   }   
      
      
   
         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);
      }
   
      
      
   };

   
   
   
   
   
   
?>


Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 00:15:58
Я вот что подумал - может добавлять   function addCatalogObject()  нужно именно внутри в класс

 abstract class __custom_catalog {
      //TODO: Write here your own macroses
   };

??
Название: Re:Добавление объекта каталога посетителем
Отправлено: BaceH от 31 Января 2012, 00:46:29
совершенно верно :)
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 00:50:19
Блин, все равно не работает)
Название: Re:Добавление объекта каталога посетителем
Отправлено: BaceH от 31 Января 2012, 01:24:14
<?php
   abstract class __custom_catalog {
      //TODO: Write here your own macroses


function addCatalogObject() {
...
   }
};
точка с запятой ставиться только после скобки закрывающей класс, после функции ;  ставить не нужно.
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 09:13:37
Да, спасибо)
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 09:18:19
Вы знаете, что интересно - получается отправка, если добавить непосредственно в функцию addCatalogObject в class.php.........Может _custom.php вообще не обрабатывается?  Я даже пробовал в этом файле убирать часть кода, а объект как добавлялся, так и добавляется....Получается, что система обрабатывает функцию в class.php, а не _custom.php?
Название: Re:Добавление объекта каталога посетителем
Отправлено: BaceH от 31 Января 2012, 09:38:45
addCatalogObject стандартная функция, измените имя к примеру addCatalogObjectSuper, при вызове также используйте это имя.
добавте к вызову public  function addCatalogObjectSuper() ...
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 09:52:38
Вызов вы имеет ввиду в форме добавления объекта?

<form  method="post" action="/catalog/addCatalogObject/{$catnam}/{$catid}" enctype="multipart/form-data" class="formtastic tender_placement_object">

Или в файле _custom.php?
Название: Re:Добавление объекта каталога посетителем
Отправлено: BaceH от 31 Января 2012, 09:57:18
файле _custom.php прописываете

<?php
   abstract class __custom_catalog {
      //TODO: Write here your own macroses

public  function addCatalogObjectSuper(){
...
}

};
?>
форме добавления:
<form  method="post" action="/catalog/addCatalogObjectSuper/{$catnam}/{$catid}" enctype="multipart/form-data" class="formtastic tender_placement_object">
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 10:22:14
К сожалению не работает....Такое ощущение, что вообще функция не обрабатывается, пробовал с отправкой сообщения, без отправки, пустую без кода), объект не добавляется, письмо не отправляется....Может в системе нужно что-то "включить", чтобы этот файл _custom.php обрабатывался?
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 10:47:09
Что заметил - когда обрабатывается функция добавления в class.php, то после добавления объекта происходит перенаправление на страницу объекта, а когда таже самая функция в _custom.php, то появляется страница http://site.ru/catalog/addCatalogObjectSuper/9/157........Может во втором случае функция как-то "недообрабатывается"?
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 13:40:32
Короче я что подумал - черт с ним с custom'ом), пускай добавляется через class.php. Последний вопрос по теме - нужно чтобы объекту автоматически присваивалось имя его номера. Думал в форме сделать такое поле

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

Но что ставить на место id?
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 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
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 21:38:38
СПАСИБО ВАМ ОГРОМНЕЙШЕЕ!!! ВЫ ОЧЕНЬ ВЫРУЧИЛИ!!!
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 21:41:03
Только у меня как обычно что-то да не так) почта не отправляется, но это я наверное что-то не так сделал...
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 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;
}
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 22:17:41
Да, вот это работает, единственное что ваш вариант отправляет сразу на страницу объекта, а этот нет, но это уже не существенно. Спасибо вам большое, огромное спасибо, вы действительно оказали большую помощь, здорово что есть к кому обратиться за помощью, тем более в решении таких нестандартных вопросов.
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 31 Января 2012, 23:13:18
Я тут еще один вопрос задавал) Можно ли сделать так чтобы объекту при добавлении присваивалось название его ID? 
Название: Re:Добавление объекта каталога посетителем
Отправлено: BaceH от 31 Января 2012, 23:19:30
если не ошибаюсь то:
$title = $object_type_id;
$object_type_id - должен быть объявлен выше title.
Название: Re:Добавление объекта каталога посетителем
Отправлено: admin от 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() вы это значение уже после создания объекта переименуете в то, что вам надо
Название: Re:Добавление объекта каталога посетителем
Отправлено: diii3 от 01 Февраля 2012, 17:15:00
Спасибо большое!