В 4.7 сделал так - но думая что подойдет и Вам к 6-ой.
PHP код:
<?php
//Элемент контента - медиа-проигрыватель
class user_content_fback {
var $cObj;
var $valid; //статус валидации (-1 данные не переданы 0 - ошибок ноль, >=1 ошибки есть)
var $formselectvalue; //список значений для поля select
function main($content, $conf) {
$this->formselectvalue = "..,Заявка на выполнение работ,Сотрудничество,Пожелание,Другие вопросы";
//Запускаем валидацию формы
$this->valid = $this->validationForm();
//Если ошибок нет будет выполненна операция
//Производим добавление пользователя в БД
if ($this->valid == 0)
{
$this->operationSendmail(); //Отправка почты
setcookie ("tx_ibl_feedback_capcha_value", null, -1, "/"); //сбрасываем cookie
//Два сценацрия (для ajax и без ajax)
if ($GLOBALS['_GET']['type'] == 300) header("Location-for-ajax: /591/"); //здесь вводим №страницы для js-перенеправления
else t3lib_utility_http::redirect("/591/"); //перенаправление пользвателя на страницу с сообщение ок
return false; //$content = "OK!";
}
//Выводим форму на страницу
else
$content = $this->displayForm( );
return $content; // ."<pre>". print_r($GLOBALS['_SERVER'], true); //"<pre>".print_r($GLOBALS['_GET']['type'], true);
}
//Функция вывода формы
function displayForm ( ) {
/* Fluid */
$template = PATH_site . 'fileadmin/def-/systemdir/content/feedback.tpl.html';
$view = t3lib_div::makeInstance('Tx_Fluid_View_StandaloneView');
$view->setTemplatePathAndFilename( $template );
//Заполняем поле select
$view->assign( 'objectvalueselect', explode(',' , $this->formselectvalue) );
$view->assign( 'objectvalue', t3lib_div::_POST('tx_ibl_feedback') );
//Заполняем имеющиеся ошибки формы в шаблон FLUID
$view->assign( 'objecterror', $this->valid );
//Вывод данных
$content=$view->render();
return $content;
}
//Функция проверки формы
function validationForm( ) {
//Если POST-данные еще не переданны
if (t3lib_div::_POST('tx_ibl_feedback') == null)
return -1;
//Назначаем события для валидации
$allElementForm = t3lib_div::_POST('tx_ibl_feedback');
//Переборка полей формы
foreach ($allElementForm as $key => $value) {
$value = trim ( $value ); $messege = null;
switch ($key)
{
//Проверка: Имя
case 'name':
if ($value == null) $messege[] = "Значение поля не заданно"; //Если ноль
if (strlen($value) < 2 and $value != null) $messege[] = "Значение поля менее двух символов"; //Если мало символов
if (strlen($value) > 50) $messege[] = "Значение поля более 50 символов"; //Если много символов
if (preg_match('/[\w]+/i',$value)) $messege[] = "Поле содержит недопустимые символы"; //Если цифры в имени
break;
//Проверка: Почтоый ящик
case 'email':
if ($value == null) $messege[] = "Значение поля не заданно"; //Если ноль
if (!preg_match("|^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$|i", $value))
$messege[] = "Формат электронного адреса указан не верно"; //Если почта указанна не верно
break;
//Проверка: Тема сообщения
case 'subject':
if ($value == 0) $messege[] = "Необходимо выбрать тему сообщения"; //Если не выбрана тема
break;
//Проверка: Сообщение
case 'messege':
if (strlen($value) < 180) $messege[] = "Данное сообщение является малоинформативным"; //Если мало символов
if (strlen($value) > 1280) $messege[] = "Сообщение слишком большое (более 1280 символов)"; //Если много символов
break;
//Проверка: Капча - цифры с картинки
case 'capcha':
//Если не включены cookies
if ( !isset($GLOBALS['_COOKIE']['tx_ibl_feedback_capcha_value']) ) $messege[] = "Необходимо включить поддержку cookie";
if ( $GLOBALS['_COOKIE']['tx_ibl_feedback_capcha_value'] != $value )
$messege[] = "Не правильно введены цифры с картинки"; //Если цифры не совпадают
break;
}
if (count ($messege) > 0)
$arError[$key] = implode (";\n" , $messege) . ".";
}
return $arError;
}
//Функция отправки сообщения
function operationSendmail(){
$damp_sender = t3lib_div::_POST('tx_ibl_feedback');
//Получаем шаблон письма:
$bodymessege = file_get_contents (PATH_site . "fileadmin/def-/systemdir/content/feedback.tpl-mail.txt");
//Разбираем переменную с значениями тем
$arsubject = explode(',' , $this->formselectvalue);
//Заменяем содержимое письма
$bodymessege = str_replace(array('[name]', '[email]', '[subject]', '[messege]'),
array ($damp_sender['name'], $damp_sender['email'], $arsubject[$damp_sender['subject']], $damp_sender['messege']),
$bodymessege);
$mail = t3lib_div::makeInstance("t3lib_mail_Message");
$mail->setFrom( $damp_sender ['email'] );
$mail->setTo( "info@aaa.ru" );
$mail->setSubject("АААА - форма обратной связи: сообщение от " . $damp_sender['name'] . " (".$arsubject[$damp_sender['subject']].")");
$mail->setBody($bodymessege);
$mail->send();
}
}
?>
PHP код:
<!--шаблон для формы обратной связи-->
<f:form id="tx_ibl_feedback_form" controller="Form" actionUri="" class="tx-ibl-form-feedback" method="post" enctype="multipart/form-data">
<table width="100%" border="1">
<tr>
<td width="30%">Ваше имя:</td>
<td>
<f:form.textfield name="tx_ibl_feedback[name]" value="{objectvalue.name}" />
<f:if condition="{objecterror.name}"><br /><f:format.nl2br>{objecterror.name}</f:format.nl2br></f:if>
</td>
</tr>
<tr>
<td width="30%">Ваше Email:</td>
<td>
<f:form.textfield name="tx_ibl_feedback[email]" value="{objectvalue.email}" />
<f:if condition="{objecterror.email}"><br /><f:format.nl2br>{objecterror.email}</f:format.nl2br></f:if>
</td>
</tr>
<tr>
<td width="30%">Тема:</td>
<td>
<f:form.select name="tx_ibl_feedback[subject]" options="{objectvalueselect}" value="{objectvalue.subject}" size="1"/>
<f:if condition="{objecterror.subject}"><br /><f:format.nl2br>{objecterror.subject}</f:format.nl2br></f:if>
</td>
</tr>
<tr>
<td width="30%">Ваше сообщение:</td>
<td>
<f:form.textarea cols="20" rows="5" name="tx_ibl_feedback[messege]" value="{objectvalue.messege}"/>
<f:if condition="{objecterror.messege}"><br /><f:format.nl2br>{objecterror.messege}</f:format.nl2br></f:if>
</td>
</tr>
<tr>
<td width="30%">Введите цифры:</td>
<td>
<img id="capcha" src="/fileadmin/def-/systemdir/content/feedback.capcha.php" width="180" height="40"><br />
<f:form.textfield name="tx_ibl_feedback[capcha]" />
<f:if condition="{objecterror.capcha}"><br /><f:format.nl2br>{objecterror.capcha}</f:format.nl2br></f:if>
</td>
</tr>
</table>
<p align="center"><f:form.submit id="tx_ibl_feedback_submit" value="Отправить письмо!" /></p>
</f:form>
Код HTML:
Добрый день, один из пользователей воспользовался формой обратной связи на Вашем сайте.
----------------------------
Сообщение от: [name]
Email: [email]
Тема: [subject]
----------------------------
[messege]
----------------------------
--
Создано роботом сайта.
PHP код:
<?php
// Тип содержимого – картинка формата PNG
header("Content-type: image/png");
// создаем картинку размером 130X40
$img=imagecreatetruecolor(180, 40) or die('Cannot create image');
// заполняем фон картинки белым цветом
imagefill($img, 0, 0, 0xFFFFFF);
$x=0;
$i = 1;
$sum = "";
$fonts = array(
'./BIRCH_C.TTF',
'./CHAMPGNE.TTF',
'./EASTSIDE.TTF',
'./GISMONDA.TTF',
'./OLGA_C.TTF',
'./RIVERSDE.TTF',
'./SSR56__C.TTF',
'./STAC222N.TTF',
'./STEVE.TTF',
'./VICTORIA.TTF'
);
//$font = $fonts[rand(0, sizeof($fonts)-1)];
$font = './feedback.JOKERMAN.TTF';
// выводим одну цифру за один проход цикла (всего 5 цифр)
while ($i++ <= 5)
{
// выводим текст поверх картинки
imagettftext(
$img, // идентификатор ресурса
rand(12,25), // размер шрифта в пикселях
rand(-35,35), // угол поворота текста
$x=$x+30, 25+rand(0,10), // координаты (x,y), соответствующие левому нижнему
// углу первого символа
imagecolorallocate($img, rand(0,128), rand(0,128), rand(0,128)), // цвет шрифта
$font, // имя файла со шрифтом
$rnd=rand(0,9)); // случайная цифра от 0 до 9
// Собираем в одну строку все символы на картинке
$sum = $sum.(string)$rnd;
}
//Сохраняем coookie для формы
setcookie ("tx_ibl_feedback_capcha_value", $sum, time()+3600, "/");/* период действия - 1 час */
//Не забудьте $sum записать в таблицу как STR1
// выводим готовую картинку в формате PNG
imagepng($img);
// освобождаем память, выделенную для картинки
imagedestroy($img);
?>