Откомменченное

2009 27 января

Вложения в форме обратной связи стандартного com_contact (!J1.0.хх !J1.5)

Тривиальная задача - в стандартной форме обратной связи сделать возможность прикрепления файлов к письму. Для этого будем использовать стандартную функцию mosMail, у которой, среди прочих, есть параметр $attachment, поскольку вся функция mosmail завязана на phpmailer. Итак по порядку.
Добавляем в components\com_contact\contact.html.php в форму обратной связи кнопку выбора файла
1
<input name="file" type="file" id="file">
Файл components\com_contact\contact.php в функции function sendmail() делаем что-то вроде
1
23
45
67
89
10
//USE STANDART ATTACHMENT FUNCTION
$tempdir = $mosConfig_absolute_path."/images/";$namefile = $_FILES['file']['name'];
$filetemp = $tempdir.$namefile;move_uploaded_file($_FILES['file']['tmp_name'], $tempdir.$namefile);
$attachment = $tempdir.$namefile;$success = mosMail( $email, $name, $contact[0]->email_to, $mosConfig_fromname .': '. $subject, $text, $mode=0, $cc=NULL, $bcc=NULL, $attachment);
if (!$success) { mosErrorAlert( _CONTACT_FORM_NC );
}
Аспекты с загрузкой файла на сервер, проверки типа и формата и прочее - не затрагиваю, ибо пишем по необходимости в каждом конкретном случае. То есть что самое главное - задать значением переменной $attachment как путь к файлу на сервере. В приведенном примере - это файл, загруженный из формы обратной связи. Для Joomla 1.5 класса JMail все в принципе аналогично, почитать можно здесь E-Mail Class. Provides a common interface to send e-mail from the Joomla! Framework Чуть более подробно по 1.5: 1 - В саму форму не забываем добавить enctype="multipart/form-data" 2 - не забываем про абсолютные пути к папке для временного файла
1
$tempdir = JPATH_ROOT."/images/";
3 - собственно функция вложения теперь упрощена, после того как мы получили файл в переменную
1
2
$attachment достаточно написать 
$mail->addAttachment( $attachment );
перед
1
$sent = $mail->Send();
и все, получили почтовое письмо с вложением

Комментарии

0 Юрий пишет нам 04.04.2009 18:37
Куда мы пишем $tempdir = JPATH_ROOT."/images/";
Цитировать Сообщить модератору
0 Beliyadm отвечает 04.04.2009 18:45
пишем туда куда нам нужно, мой фрагмент в controller.php примерно таков Код://USE STANDART ATTACHMENT FUNCTION
$tempdir = JPATH_ROOT."/images/";
$namefile = $_FILES['file']['name'];
$filetemp = $tempdir.$namefile;
move_uploaded_file($_FILES['file']['tmp_name'], $tempdir.$namefile);
$attachment = $tempdir.$namefile;
$mail->addAttachment( $attachment );

$sent = $mail->Send();
Цитировать Сообщить модератору
0 Юрий пишет нам 04.04.2009 18:50
Спасибо, ваш код сработал. Кстати, у меня joomla 1.5
Цитировать Сообщить модератору
0 Юрий пишет нам 04.04.2009 18:58
А как сделать, чтобы после отправки вложения, файл удалялся с сервера?
Цитировать Сообщить модератору
0 Beliyadm отвечает 04.04.2009 19:03
После успешной отправки файл самостоятельно удаляеться с сервера
Цитировать Сообщить модератору
0 Beliyadm пишет нам 04.04.2009 18:58
Благодарю, он и у меня работает и вторая часть поста как раз про версию 1.5. Но единственно не забываем проверять формат файла (расширение) и пользователю в шаблоне писать "доступны следующие форматы: doc, jpg etc", а то загрузят всякую гадость :)
Цитировать Сообщить модератору
0 Юрий пишет нам 04.04.2009 19:08
У меня файл почему-то загружается не в каталог сайта, а в корень хостинга, поэтому он наверное не может его удалить
Цитировать Сообщить модератору
0 Beliyadm отвечает 08.04.2009 07:45
проверьте еще раз переменную локального пути временной директории - должны быть указаны абсолютные пути!
Цитировать Сообщить модератору
0 Fedenev пишет нам 17.06.2009 03:34
Вообще понять не могу куда, что вставить на версии 1.5.11.... Поясните более подробно, помогите. Мне очень нужна такая функция!
Цитировать Сообщить модератору
0 Fedenev пишет нам 17.06.2009 04:01
Вот что выдает Fatal error: Call to a member function addAttachment() on a non-object in /home/virtwww/http/components/com_contact/controll er.php on line 21 код вставил в controller.php после <?php Куда конкретнее его вставить?
Цитировать Сообщить модератору
0 Beliyadm отвечает 24.06.2009 23:10
Покажите весь кусок вставляемого\модифицированного кода. Работа стандартной функции addAttachment опробована лично мной на 3-х разных сайтах с движком версии 1.5.10 - нигде проблем не замечено
Цитировать Сообщить модератору
0 Татьяна пишет нам 26.06.2009 00:17
Пожалуйста, посоветуйте, как можно исправить: Joomla 1/0/12. Вставила код: //USE STANDART ATTACHMENT FUNCTION $tempdir = JPATH_ROOT.”/images/”; $namefile = $_FILES['file']['name']; $filetemp = $tempdir.$namefile; move_uploaded_file($_FILES['f ile']['tmp_name'], $tempdir.$namefile); $attachment = $tempdir.$namefile; $mail->addAttachment( $attachment ); $sent = $mail->Send(); В итоге, при нажатии на кнопку отправить выскакивают следующие ошибки: Warning: Division by zero in /home/.../components/com_contact/contact.php on line 446 Warning: Division by zero in /home/.../components/com_contact/contact.php on line 446 Fatal error: Call to a member function addAttachment() on a non-object in /home/.../components/com_contact/contact.php on line 451
Цитировать Сообщить модератору
0 Федор пишет нам 21.07.2009 04:59
Поставил вроде все как написано. Сообщение уходит, прикрепленного файла нет:(
Цитировать Сообщить модератору
0 Beliyadm отвечает 21.07.2009 08:03
Хорошо, я завтра в топике для версии 1.5 движка сделаю чуть более развернутый ответ с примерами кода, следите за эфиром )).
Цитировать Сообщить модератору
0 Федор пишет нам 21.07.2009 16:58
Можно ссылку сюда выложить на топик, please.
Цитировать Сообщить модератору
0 Максим пишет нам 11.08.2009 12:09
Поясните подробнее что и куда вставлять. У меня Joomla 1.5.8 файла components\\com_contact\\contact.html.php вообще нету. есть components\\com_contact\\contact.php, пробовал туда вставить и так и сяк, показывает белую страницу... Поясните неграмотным как прикрепление фото сделать.
Цитировать Сообщить модератору
0 Beliyadm отвечает 11.08.2009 16:41
Для линейки 1.5 необходимо смотреть файл controller.php
Цитировать Сообщить модератору
0 ParaNoid_ пишет нам 19.09.2009 20:43
Письмо приходит без вложения, ошибок нет. Пожалуйста, подскажите, где зарыта собака :) Joomla 1.0.15 LE
Цитировать Сообщить модератору
0 Beliyadm отвечает 19.09.2009 21:59
Завтра постараюсь для версий 1.0 и 1.5 выложить обновленные файлы компонента, чтобы смотрели на готовых примерах
Цитировать Сообщить модератору
0 Илья пишет нам 26.11.2009 20:36
Ой мама чур меня чур разрешать заливку данных на сервер всем))) Пишешь свой mail и пошли все нах )))
Цитировать Сообщить модератору
0 Beliyadm отвечает 26.11.2009 20:41
Ну для начала проверку отправляемых вложений никто не отменял, это все за рамками данной темы и на совести админа сайта. И по поводу собственно факта вложений в форме обратной связи - не от хорошей жизни, просто таково было пожелание заказчика, успешно реализованное. И отправить письмо с сайта с вложением зачастую быстрее, нежели запускать почтовый клиент, писать письмо и тд. И в том случае если очень не хочется светить адрес email получателя - другого варианта нет. Да и мало ли требований возникает
Цитировать Сообщить модератору
0 Илья пишет нам 26.11.2009 23:29
Ну если пожелания заказчика... а если проще (не думать о том что могут сей функции воспользоваться недоброжелатель и как это максимально защитить) использовать стороннее расширение форм, а ля chronoforms . Включить аякс включить кэш и все хроноформс будет оптимизированным и защищенным. Там поболе функций проверка на уровне клиента и сервера, ограничения и тп и тд... Зачем изобретать колесо товарисчи, нужно его настраивать под себя =)))
Цитировать Сообщить модератору
0 Beliyadm отвечает 26.11.2009 23:33
Ну так как бы аттачи в phpmailer это стандартная фича, и проверки в движке имеются, достаточно потратить полчаса на разбор ситуацию и вкрутить в стандартную форму обратной связи, что в принципе я и сделал. Мне проще делать так, нежели ставить и разбираться в стороннем расширении (которое тоже неизвестно какие баги имеет). Чем меньше отходов от стандартного функционала, предоставляемого движком, тем лучше
Цитировать Сообщить модератору
0 Bugs B отвечает 11.12.2009 17:53
Здравствуйте я перечитал ваш форум, и мне нужна ваша помощь, у меня Joomla 1.5.9 и виртуальный магазин VM 1.1.3 настроен как каталог, поясняю ситуацию мне нужно сделать так чтобы человек с правами администратора не входя в движок сайта мог добавить товар и прикрепить к нему файлы (TXT, EXE, ESL, JPG, итд) любого формата, я сделал кнопку которая его приводит в админку VM 1.1.3 добавления товаров, там я убрал все лишние поля и кнопки оставил только все нужное и также сделал кнопку которая после добавления товара выводит его обратно на сайт, все работает, но вот ума не приложу как можно сделать поле для прикрепления файлов, чтобы чел админ нажал на кнопку указал файл на компе нажал прикрепить и файл прикрепился , а все остальные пользователи зайдя на сайт , в каталог , карточка товара увидел только ссылки на скачку и мог скачать этот документ! ЗАРАНИЕ БОЛЬШОЕ СПАСИБО, прошу помогите мне это организовать или хотябы дайте верное направление в гугле неделю живу Извините за флоуд
Цитировать Сообщить модератору
0 Beliyadm отвечает 11.12.2009 17:56
Добрый день. Данный вопрос относится больше к функционалу Virtuemart, с которым не очень хорошо знаком. Если есть определенное понимание php то достаточно в гугле найти описание действий для загрузки файлов на сайт. В принципе в моей статье приведен код, в котором надо только сделать исправление - перемещать загруженный файл из временного каталога в определенный для хранения и записывать имя изображения в БД. Более и детальней, увы, не подскажу
Цитировать Сообщить модератору
0 Epiphanes пишет нам 10.01.2010 20:22
Качественно пишите :)
Цитировать Сообщить модератору
0 Николай пишет нам 18.01.2010 04:11
частично я нашел причину - это используемый шаблон. Я использовал dominion от RocketTheme. В нем используется собственный файл формы контакта (в папке шаблона "...\html\com_contact\contact", правда он копия штатного файла формы), в нем я добавил выбор файла. А controller.php используется штатный, в нем я прописал собственно код вложения файла. И вот где-то в промежутке от формы шаблона к controller.php информация о вложении теряется... Может подскажете, где? или хотя бы в каком направлении искать... P.s. Если использовать какой-нибудь из штатных шаблонов joomla, то все работает.
Цитировать Сообщить модератору
0 Beliyadm отвечает 18.01.2010 04:17
Достаточно странная ситуация, ибо если даже другой шаблон - то только шаблон и не более, контроллер остается родной. Возможно разработчики заложили в шаблон обратной связи ajax отработку, к примеру, потому все рушится, весьма затрудняюсь сказать, что может служить причиной, если пришлете на beliyadm"собака"гмейлком архив данного шаблона - постараюсь завтра поставить и посмотреть на практике, что может мешать
Цитировать Сообщить модератору
0 Николай отвечает 27.01.2010 19:43
Здравствуйте! Удалось посмотреть шаблон?
Цитировать Сообщить модератору
0 Beliyadm отвечает 27.01.2010 19:50
Да, все прекрасно работает. Вопрос наверно в том, что вы редактировали шаблон контакта в файле components\com_contact\views\contact\tmpl\default_ form.php в то время как в шаблоне есть папка html и надо править форму файла templates\rt_dominion_j15\html\com_contact\contact \default_form.php
Цитировать Сообщить модератору
0 Николай отвечает 27.01.2010 21:19
Хм... Именно так я и делал, редактировал templates\rt_dominion_j15\html\com_contact\contact \default_form.php Я же написал в исходном сообщении, цитирую:"...В нем (шаблоне) используется собственный файл формы контакта (в папке шаблона «…\html\com_contact\contact», правда он копия штатного файла формы), в нем я добавил выбор файла. А controller.php используется штатный, в нем я прописал собственно код вложения файла." Ну, если у Вас все работает, значит буду пытаться выправить собственные руки.
Цитировать Сообщить модератору
0 J_N пишет нам 10.02.2010 02:02
Cорри протупил не туда всунул enctype=\"multipart/form-data\" не в форму а в поле (, удалите мои писульки, и извините за мою невнимательность, но есть один вопрос почему то два письма отправляеться отправлялось одно а с файлом два, и как проверить являеться ли файл рисунком?
Цитировать Сообщить модератору
0 Beliyadm отвечает 10.02.2010 02:20
У нас в обработчик приходит глобальный массив $_FILES, в гугле находим его структуру, там есть и расширение файлов, и объем, название, дата и так далее. В том же гугле можно при желании легко найти класс на php для обработки загруженных изображений на лету (конвертация размеров, типов и так далее). В подробности не вдаюсь, бо это к Joomla никакого отношения не имеет. Главное загрузить файл на сервер а что вы там дальше с ним будете делать - дело ваше
Цитировать Сообщить модератору
0 Kolledj пишет нам 15.05.2010 17:05
У меня не работает отправка сообщений через форму (письма не доходят) сайт стоит на линуксе, когда был на Денвере, все работало. (Письма с регистрацией на сайте доходят) Подскажите почему
Цитировать Сообщить модератору
0 Beliyadm отвечает 15.05.2010 19:01
Скорей всего на новом сервере у вас другой путь должен быть в $tempdir (временной папке для хранения файлов) либо что-то не то с правами (CHMOD) на этот каталог. Рекомендую посмотреть еще error.log, может в него пишется сообщения по ошибке
Цитировать Сообщить модератору
0 Jeka пишет нам 13.11.2010 15:24
Привет. Помогите пожалуйста! Fatal error: Call to a member function addAttachment() on a non-object in /home/c/cl22573/public_html/components/com_ipricec alc/controller.php on line 134 Файл с формой Скачать default.zip с WebFile.RU Файл контрол Скачать controller.php с WebFile.RU Заранее благодарен!!!
Цитировать Сообщить модератору
0 Beliyadm отвечает 13.11.2010 16:57
При чем тут компонент com_ipricecalc, когда речь про стандартную обратную связь
Цитировать Сообщить модератору
0 Jeka отвечает 13.11.2010 18:35
Ну подумал по аналогии подскажете. Спасибо!
Цитировать Сообщить модератору
0 Beliyadm отвечает 13.11.2010 19:21
Так по аналогии банально и используем, приведен элементарный пример обработчика загрузки файла из формы, без проверки на тип, размер и прочее В гугле по запросу "php загрузка файлов" можно найти массу более подробных примеров с описанием. Единственно применительно к движку - в каком файле и каком куске происходит обработка формы, не более
Цитировать Сообщить модератору
0 palexa пишет нам 02.04.2011 20:57
привет, а можно пальцем тыкнуть, для J1.5 после какой строчки в controller.php писать этот код ? //USE STANDART ATTACHMENT FUNCTION $tempdir = JPATH_ROOT.»/images/»; $namefile = $_FILES['file']['name']; $filetemp = $tempdir.$namefile; move_uploaded_file($_FILES['f ile']['tmp_name'], $tempdir.$namefile); $attachment = $tempdir.$namefile; $mail->addAttachment( $attachment ); $sent = $mail->Send();
Цитировать Сообщить модератору
0 Евгений пишет нам 24.10.2011 22:24
Сергей пожалуйста, подскажите куда все-таки вставлять //USE STANDART ATTACHMENT FUNCTION в Joomla 1.5? Просто инструкция весьма сумбурная. В интернете по этой теме информации мало и было бы хорошо, если бы вы раскрыли ее полностью. За ранее спасибо!
Цитировать Сообщить модератору
0 Beliyadm отвечает 30.10.2011 20:40
Евгений - за время, прошедшее с этого поста, в сети появился миллион с тележкой расширений стандартных контактов, что позволяют грузить файлы и многое другое. Тем более что приведенный мной код далеко не оптимален.
Цитировать Сообщить модератору
0 Роман пишет нам 14.05.2012 04:35
Хм у меня форма заработала странно: Отправка работает только в режиме Smtp-сервер Хостинг 1gb.ru можно прикрепить только изображение, остальные вложения не приходят Изображение приходит на почту, указывается его размер, его наличие,но там пусто... в письме... сморишь - белый экран... скачать нельзя
Цитировать Сообщить модератору
0 Роман пишет нам 14.05.2012 04:36
ну и хотелось бы возможность прикрутить что то типа Recaptcha
Цитировать Сообщить модератору
0 Роман пишет нам 14.05.2012 04:46
хм... изображения появились) больше ничего прислать не дает кроме jpg
Цитировать Сообщить модератору
0 Нурбек пишет нам 06.03.2014 23:42
как сделать стандарную форму обратной связи joomla 2.5 с прикреплением файлов
Цитировать Сообщить модератору
0 Beliyadm отвечает 13.03.2014 15:15
По идее аналогичным образом, есть свойство attachment, подробнее здесь sending email
Цитировать Сообщить модератору
0 twins пишет нам 09.05.2014 18:35
Всем у кого возникли проблемы со вставкой кода для 1.5 Привожу следующую инструкцию: 1) Открываете файл по адресу:/components/com_contact/controller.php Пос ле сточки 196 (после $mail->setBody( $body );) вставляете следующее: $tempdir = JPATH_ROOT.DS.'images'; $namefile = $_FILES['file']['name']; $filetemp = $tempdir.$namefile; move_uploaded_file($_FILES['f ile']['tmp_name'], $tempdir.$namefile); $attachment = $tempdir.$namefile; $mail->addAttachment( $attachment ); и в конце у вас должно идти $sent = $mail->Send(); 2) Открываете файл по адресу components/com_contact/views/contact/tmpl/default_ form.php В строчке 32,- <form action="" method="post" name="emailForm" id="emailForm" class="form-validate" > дописываете enctype="multipart/form-data" В итоге должно получится <form action="" method="post" name="emailForm" id="emailForm" class="form-validate"enctype="multipart/form-data" > 3) Там же components/com_contact/views/contact/tmpl/default_ form.php После 52 строчки вставляете Вот в принципе и все, если не будет работать выставите права на корневую папку сайте(это папка с названием вашего сайта:например pbelkov.net, права 777). И все у вас заработает
Цитировать Сообщить модератору
0 twins пишет нам 09.05.2014 18:37
Там же после "После 52 строчки вставляете" информация не сохранилась в комментах, поэтому дублирую: 3) Там же components/com_contact/views/contact/tmpl/default_ form.php После 52 строчки вставляете:
Цитировать Сообщить модератору
0 twins пишет нам 09.05.2014 18:38
Снова не сохранилась , попробую в третий раз) 3) Там же components/com_contact/views/contact/tmpl/default_ form.php После 52 строчки вставляете:
Цитировать Сообщить модератору
0 Beliyadm отвечает 09.05.2014 18:45
Прошу прощения, но не понимаю. Какая у вас версия движка, что конкрентно не получается? В 2.5 (как и ранее) есть встроенная опция вложений в письмо $mailer->addAttachment(JPATH_COMPONENT.'/assets/document.pdf')
Цитировать Сообщить модератору

Оставить коммент

Защитный код
Обновить

Откомменченное