Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Предпросмотр товара в всплывающем окне с ссылкой на сам товар

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 21
Просмотров: 6661
Последний ответ 15 Октября 2014, 15:37:52
от Axiomateria

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

*

DZHETIGAPA

  • **
  • 79
  • +0/-0
    • Просмотр профиля
Поделиться ссылкой
« : 11 Октября 2011, 19:59:37 »
Как можно на юми реализовать следующее: Поделиться ссылкой

Есть ссылка поделиться с друзьями. То есть, когда жмем на ссылку, то появляется окошко с формой, в которой указывается имейл друга, а так же какой текст ему отправить. после заполнения всех полей, как только нажат сабмит, шлется письмо по адресу, который был указан в этой форме.

Как такое можно реализовать? Хотя бы принцип, дальеш я сам пойму.

Заранее благодарен за ответ.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #1 : 11 Октября 2011, 21:15:32 »
пишешь кастом который отправляет письмо , кастому передаешь значения формы (email друга, имя, содержимое письма если нужна только ссылка на данную страницу, то сформируй её в кастоме)

пример отправления письма посмотри в документации, на wiki.umisoft есть примеры, ну и добавь ссылку которая раскрывает скрытую форму в actions которой будет твой кастомный макрос

*

DZHETIGAPA

  • **
  • 79
  • +0/-0
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #2 : 11 Октября 2011, 22:13:32 »
Я как понял это можно реализовать без макросов, а с помощью форм? Верно я предположил?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #3 : 12 Октября 2011, 03:20:56 »
если у тебя в распоряжении есть форма обратной связи то да, по сути она вполне подойдет (но опять же, не для всех случаев или подойдет но надо будет кастомизировать)

*

DZHETIGAPA

  • **
  • 79
  • +0/-0
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #4 : 12 Октября 2011, 15:17:55 »
Ну вот если подумать.  Можно полностью на форме обратной связи сделать. Кому слать пишем через%email%, где email - это идентификатор поля имейла, которое заполняет пользователь. Тело письма аналогично сделать,

Верно я думаю? Я просто пока локально делаю, не могу конкретно проверить работоспособность моей формы.

Только щас обратил внимание, что в шаблоне формы нет поля Кому отправить.. Выходит точно надо как-то кастомизировать модуль. Будем разбираться.
« Последнее редактирование: 12 Октября 2011, 15:46:00 от DZHETIGAPA »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #5 : 12 Октября 2011, 15:51:14 »
есть поле кому, оно генерится автоматом, но можно и руками задать  <input type="hidden" name="system_email_to" value="info@umihelp.ru" />

а в остальном все верно, вопрос только в том, что все что ты отправляешь через формы обратной связи сохраняется в системе (а если у тебя большой проект, то ты можешь значительно увеличить размер базы данных сохраняя каждое "поделиться ссылкой")
 

*

DZHETIGAPA

  • **
  • 79
  • +0/-0
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #6 : 12 Октября 2011, 16:08:37 »
Щас попробую написать свой макрос. Хочу сделать так:. Форму сделаю вручную и после отправки формы будет вызываться макрос. Как я понимаю, макрос я должен написать в файле custom.php и например функция send_mail и запрос к нему будет следующий

document('udata://custom/send_mail/param1/param2/paramn')

Верно я мыслю? А то я свои макросы еще не писал. Только несколько дней юми изучаю.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #7 : 12 Октября 2011, 16:15:30 »
мыслишь верно

*

DZHETIGAPA

  • **
  • 79
  • +0/-0
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #8 : 13 Октября 2011, 00:11:01 »
Вопрос: Написал макрос, но почему-то не пашет и половину страницы не отображает. Попробовал в адресной строке сделать запрос на это макрос. В результате появилось следующее сообщение:

<error code="require-more-permissions">
    Ваших прав недостаточно, чтобы совершить это действие
</error>

В чем дело? Где права надо изменить?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #9 : 13 Октября 2011, 00:24:43 »
если ты пишешь макрос в
/classes/modules/custom.php
то права назначать не надо, а если пишешь макрос в
/classes/modules/какой-нибудь_модуль_например_content/__custom.php,
то необходимо назначить права. Для этого создаешь файл
/classes/modules/какой-нибудь_модуль_например_content/permissions.custom.php
в него копируешь содержимое
/classes/modules/какой-нибудь_модуль_например_content/permissions.php
и в нужную группу прав (в которой содержаться методы доступные для просмотра гостю) добавляешь свой метод.

Например, ты написал кастомный макрос
public function custom_m(){...}
поместил его в
/classes/modules/content/__custom.php
, тогда в файле
/classes/modules/какой-нибудь_модуль_например_content/permissions.custom.php
у тебя будет следущее содержимое

<?php
$permissions = Array(
'content' =>
Array('custom_m')
);
?>

а вообще, лучше приведи сюда код своей функции, может она обращается к чему-то что требует доп. прав

*

DZHETIGAPA

  • **
  • 79
  • +0/-0
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #10 : 13 Октября 2011, 01:41:30 »
Спасибо вам огромной за помощь. В этом разобрался. Но все равно появляется следующая ошибка:

Ошибка синтаксического анализа XML: элемент не найден

Для простоты действий имейл отправителя и получателя одинаков.
public function sendmail($from1="admin@mail.ru"){

            if(!empty($from1)){
                custom::send_mime_mail("ТNAME",$from1,"NAME",$from1, 'CP1251','CP1251',"Письмо уведомление", "Привет, МИР!!!");
            }
 }
private function send_mime_mail($name_from, // имя отправителя
                        $email_from, // email отправителя
                        $name_to, // имя получателя
                        $email_to, // email получателя
                        $data_charset, // кодировка переданных данных
                        $send_charset, // кодировка письма
                        $subject, // тема письма
                        $body // текст письма
                        ) {
            $to = custom::mime_header_encode($name_to, $data_charset, $send_charset)
                 . ' <' . $email_to . '>';
            $subject = custom::mime_header_encode($subject, $data_charset, $send_charset);
            $from =  custom::mime_header_encode($name_from, $data_charset, $send_charset)
                     .' <' . $email_from . '>';
            if($data_charset != $send_charset) {
                $body = iconv($data_charset, $send_charset, $body);
            }
            $headers = "From: $from\r\n";
            $headers .= "Content-type: text/plain; charset=$send_charset\r\n";
            $headers .= "Mime-Version: 1.0\r\n";

            return mail($to, $subject, $body, $headers);
        }

        private function mime_header_encode($str, $data_charset, $send_charset) {
            if($data_charset != $send_charset) {
                $str = iconv($data_charset, $send_charset, $str);
            }
            return '=?' . $send_charset . '?B?' . base64_encode($str) . '?=';
        }
Ввожу в адресной строке следующее:

mysite/udata/custom/sendmail/admin@mail.ru  

И не работает, а пишет ошибку, которую я описал выше.

Если же я в самом макросе удалю все условия и оставлю только это:
public function sendmail($from1="admin@mail.ru"){
        
                custom::send_mime_mail("ТNAME",$from1,"NAME",$from1, 'CP1251','CP1251',"Письмо уведомление", "Привет, МИР!!!");
    
 }
То с аналогичным запросом все работает, письма приходят. Объясните пожалуйста, в чем проблема?

Вроде заработало. Даже не знаю почему не работало. Как-то странно.
« Последнее редактирование: 13 Октября 2011, 02:53:25 от DZHETIGAPA »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #11 : 13 Октября 2011, 02:24:46 »
попробуй вызвать функцию так
mysite/udata/custom/sendmail/(admin@mail.ru)   

*

DZHETIGAPA

  • **
  • 79
  • +0/-0
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #12 : 13 Октября 2011, 02:53:58 »
Вроде заработало. Даже не знаю почему не работало. Как-то странно.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #13 : 13 Октября 2011, 04:19:53 »
заработало при таком запросе
mysite/udata/custom/sendmail/(admin@mail.ru)
?

*

DZHETIGAPA

  • **
  • 79
  • +0/-0
    • Просмотр профиля
Re:Поделиться ссылкой
« Ответ #14 : 13 Октября 2011, 10:33:20 »
Даже при моем запросе щас все работает, хотя ничего не менял.. как-то странно...

Возник вопрос. Если отправляем ссылку другу и перегружаем страницу, то запрос отправляется заново, еще раз перегружаем - опять отправляется. Обычно я решаю эту проблему так:

header("Location: ".$_SERVER['REQUEST_URI']);

Также вставляю эту строчку в макрос, но все равно отправляются повторные запросы.