Перейти к содержимому


Добавить отправление картинок к форме обратной связи


  • Вы не можете ответить в тему
Сообщений в теме: 7

#1 GiantCherry

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 75 сообщений
Репутация: 1
Начинающий
  • ГородСанкт-Петербург

Отправлено 08 February 2014 - 06:47 PM

Подскажите, как добавить картинку к форме обратной связи. Чтоб при отправлении письма админу через форму обратной связи к письму можно было приложить картинку.
  • 0

#2 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 09 February 2014 - 12:11 AM

1. в feedback.tpl.html в <form.. добавить enctype="multipart/form-data"
2. добавить в эту форму input для файла с картинкой (<input type="file" name="myname"....> )
3. в feedback.php добавить обработку $_FILE['myname'] (копирование в постоянное место и вставка ссылки в текст письма, $message_text)
4. в functions.php в функцию xMailTxtHTML добавить то же самое, что описано тут:
http://vsupport.club...dpost__p__29878


PS. Несколько позже:

1. в файле feedback.tpl.html

1.1. строку


<form name="formfeedback" id="formfeedback" method="post" action="index.php">


заменяем


{* BEGIN picture-in-feedback *}
{*<form name="formfeedback" id="formfeedback" method="post" action="index.php">*}
<form enctype="multipart/form-data" name="formfeedback" id="formfeedback" method="post" action="index.php">
{* END picture-in-feedback *}


1.2. перед строкой


{if $smarty.const.CONF_ENABLE_CONFIRMATION_CODE eq 1}


вставляем


{* BEGIN picture-in-feedback *}
<tr><td style="height: 6px;"></td></tr>
<tr><td align="left">Присоединить картинку</td></tr>
<tr><td style="height: 2px;"></td></tr>
<tr><td align="left"><input name="picture" type="file"></td></tr>
<tr><td style="height: 6px;"></td></tr>
{* END picture-in-feedback *}



2. в файле feedback.php перед строкой


if(CONF_ENABLE_CONFIRMATION_CODE){


вставляем


# BEGIN picture-in-feedback
if($_FILES['picture']['name'])
{
copy($_FILES['picture']['tmp_name'], 'core/temp/'.$_FILES['picture']['name']);
$message_text .= '<img src="/core/temp/'.$_FILES['picture']['name'].'">';
}
# BEGIN picture-in-feedback



3. в файле functions.php в функции xMailTxtHTML перед строкой


$mail->Body = $_Text;


вставляем


# BEGIN picture-in-feedback
if (preg_match_all('/src="\/(\S+\/(\S+?\.(jpg|gif|jpeg|png|bmp)))"/', $_Text, $match, PREG_SET_ORDER))
foreach ($match as $m)
{
$_Text = str_replace($m[0],'src="cid:'.$m[2].'"',$_Text);
$mail->AddEmbeddedImage($m[1],$m[2]);
}
# END picture-in-feedback



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


$mail->IsHTML(false);

на

$mail->IsHTML(true);


Либо можно в feedback.php заменить xMailTxtHTML на xMailTxtHTMLDATA, которая только этим и отличается.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 GiantCherry

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 75 сообщений
Репутация: 1
Начинающий
  • ГородСанкт-Петербург

Отправлено 09 February 2014 - 06:53 AM

спасибо огромное. рыл в том же направлении, только в моем решении были ошибки.

на локале увидел фото в темпе, в письме изображение заблокировано.
  • 0

#4 GiantCherry

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 75 сообщений
Репутация: 1
Начинающий
  • ГородСанкт-Петербург

Отправлено 09 February 2014 - 08:30 AM

4. в functions.php в функцию xMailTxtHTML добавить то же самое, что описано тут:
http://vsupport.club...dpost__p__29878


перенес с локали, отправляю тестовое письмо, а там ссылка на картинку. почитал, не пойму, почему не добавляется картинка в тело письма?
  • 1

#5 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 09 February 2014 - 04:23 PM

перенес с локали, отправляю тестовое письмо, а там ссылка на картинку

Модификация функции xMailTxtHTML в том и состоит, чтобы выловить в тексте эту локальную ссылку (по регулярному выражению) и сделать два действия:
1. заменить подстроку <img src="/aaa/bbb.jpg"> на <img src="cid:bbb.jpg">
2. присоединить к письму файл /aaa/bbb.jpg в виде аттача с именем bbb.jpg

Не представляю, что там может не работать, две строки кода. Если, конечно, Вы не файл с русскоязычным названием присоединяете, там код будет чуть другой. Но именно чуть, на пару iconv-ов. Собственно, я ведь выложил подробную инструкцию. Неужели по ней тоже не получилось?
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 GiantCherry

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 75 сообщений
Репутация: 1
Начинающий
  • ГородСанкт-Петербург

Отправлено 09 February 2014 - 06:02 PM

перенес с локали, отправляю тестовое письмо, а там ссылка на картинку

Модификация функции xMailTxtHTML в том и состоит, чтобы выловить в тексте эту локальную ссылку (по регулярному выражению) и сделать два действия:
1. заменить подстроку <img src="/aaa/bbb.jpg"> на <img src="cid:bbb.jpg">
2. присоединить к письму файл /aaa/bbb.jpg в виде аттача с именем bbb.jpg

Не представляю, что там может не работать, две строки кода. Если, конечно, Вы не файл с русскоязычным названием присоединяете, там код будет чуть другой. Но именно чуть, на пару iconv-ов. Собственно, я ведь выложил подробную инструкцию. Неужели по ней тоже не получилось?


а что нужно изменить при присоединении файла с русским названием?

попробую еще раз прочитать, может что упустил. но пока в письме так: <img src="/aaa/bbb.jpg">
  • 0

#7 ovpmusic

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений
Репутация: 0
Начинающий
  • ГородАлушта

Отправлено 14 May 2016 - 11:53 AM

PS. Несколько позже:

А не подскажете, пожалуйста, как то же самое реализовать на DLE используя встроенную в DLE форму обратной связи?
Заранее благодарен за ответ!!!
  • 0

#8 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 14 May 2016 - 12:08 PM

как то же самое реализовать на DLE используя встроенную в DLE форму

Как минимум, задать вопрос в разделе о DLE, а не о ShopCMS.
Если кто-то знает, как это сделать на DLE, то он раздел о DLE читает.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)