Как в joomla реализовать возможность прикрепления файлов к письму через посредство стандартной формы обратной связи? Рецепт ненов, но популярен и востребован (!J1.0.хх !J1.5).
Для этого будем использовать стандартную функцию mosMail, у которой, среди прочих, есть параметр $attachment, поскольку вся функция mosmail завязана на phpmailer. Итак по порядку.
Добавляем в
components\com_contact\contact.html.php
в форму обратной связи кнопку выбора файла
<input name="file" type="file" id="file">
Файл
components\com_contact\contact.php
в функции
делаем что-то вроде
//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 – не забываем про абсолютные пути к папке для временного файла
$tempdir = JPATH_ROOT."/images/";
3 – собственно функция вложения теперь упрощена, после того как мы получили файл в переменную
$attachment достаточно написать
$mail->addAttachment( $attachment );
перед
$sent = $mail->Send();