Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Общие вопросы

Ответ
 
Опции темы Опции просмотра
Старый 24.12.2012, 11:04   #1
Crown
Новенький
 
Регистрация: 23.12.2012
Сообщений: 4
По умолчанию Fluid template + Email form

TYPO3 6.0.0

Изучаю 'fluid template' по:
http://thomas.deuling.org/2011/06/cr...for-typo3-4-5/
http://gyrkalo.blogspot.ru/2012/10/fluid-typo3.html

Сделал одноколоночный макет, привязал к html-шаблону с помощью
Код:
{content -> f:format.raw()}
В TS:
Код:
content < styles.content.get
Добавил контент:
* Regular Text Element
* Mail Form
* Regular Text Element

На mail form добавил поля и кнопку submit.

В FE отображается только два 'Regular Text Element', в исходном коде страницы ни намёка на попытку "срендерить" mail form.

Подскажите пожалуйста как mail form правильно добавить в случае fluid template?
Crown вне форума   Ответить с цитированием
Старый 24.12.2012, 12:30   #2
Ивано
Guest
 
Сообщений: n/a
По умолчанию

В 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'] == 300header("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) < 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(18040) or die('Cannot create image');
 
// заполняем фон картинки белым цветом
imagefill($img000xFFFFFF);
 
$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+3025+rand(0,10), // координаты (x,y), соответствующие левому нижнему
                            // углу первого символа
   
imagecolorallocate($imgrand(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"$sumtime()+3600"/");/* период действия - 1 час */
    
    
//Не забудьте $sum записать в таблицу как STR1
 
// выводим готовую картинку в формате PNG
imagepng($img);
// освобождаем память, выделенную для картинки
imagedestroy($img);
?>
  Ответить с цитированием
Старый 24.12.2012, 12:48   #3
Ивано
Guest
 
Сообщений: n/a
По умолчанию

Если интересно покажу как еще прикрутить ajax!
  Ответить с цитированием
Старый 24.12.2012, 13:27   #4
Crown
Новенький
 
Регистрация: 23.12.2012
Сообщений: 4
По умолчанию

Ивано, спасибо за ответ! AJAX - это интересно, но скорее на перспективу, сейчас не готов туда углубляться ((

Ивано, я правильно понимаю, что для типовой Mail Form TYPO3 всё таки необходимо писать "обвязку"? Я то по наивности думал, что в эту CMS уже зашит соответствующий контроллер ((
Crown вне форума   Ответить с цитированием
Старый 24.12.2012, 13:57   #5
Ивано
Guest
 
Сообщений: n/a
По умолчанию

В cms защита стандартная форма...
Ее вы можете выбрать и вставить на странице...

Но здесь приведен пример того, как можно сделать простую форму, с валидацией (В Т.Ч. капчей) на основе fluid...

Последний раз редактировалось Ивано; 24.12.2012 в 16:52
  Ответить с цитированием
Старый 24.12.2012, 16:54   #6
Ивано
Guest
 
Сообщений: n/a
По умолчанию

И последнее что сейчас хочу попробовать . здесь представлен алгоритм работы с формами - но как-нибудь хочу все-таки попробовать заменить fluid на smarty 3... А то на сложных формах у меня код fluid читается с большим трудом...
  Ответить с цитированием
Старый 26.12.2012, 03:21   #7
Falcon
Продвинутый
 
Регистрация: 09.10.2008
Сообщений: 77
По умолчанию

А каким лучше способом производить JS валидацию формы?
В шаблон вставлять JSку с валидаторами и при ренеделе вставлять <script> с запуском валидаторов

Или что автоматическое есть?
Falcon вне форума   Ответить с цитированием
Старый 26.12.2012, 09:00   #8
Manas
Senior Member
 
Аватар для Manas
 
Регистрация: 06.12.2006
Адрес: Санкт-Петербург
Сообщений: 239
Отправить сообщение для Manas с помощью ICQ Отправить сообщение для Manas с помощью Skype™
По умолчанию

Попробуйте это расширение http://typo3.org/extensions/repository/view/powermail. Там и ajax валидация имеется.
Версии 2.х написаны с использованием Extbase + Fluid, версии 1.6.х - pi1.
__________________
Дмитрий Васильев, "T3 студия"
По всем вопросам связанным с TYPO3, пишите пожалуйста сюда https://vk.com/t3studio
www.typo3.ru.net
Manas вне форума   Ответить с цитированием
Старый 26.12.2012, 14:26   #9
Ивано
Guest
 
Сообщений: n/a
По умолчанию

В выше описанном примере валидация создается функцией
function validationForm( )

Она создает массив с набором ошибок и после чего данных массив вставляется в нужное место в шаблоне fluid.

Вы можете запустить данную форму на ajax-и тогда по клику форма перезагружается без обновления страницы, а пользователь увидит допущенные ошибки...
  Ответить с цитированием
Старый 26.12.2012, 18:09   #10
Ивано
Guest
 
Сообщений: n/a
По умолчанию

Пожалуй, одна из самых лучших валидаторов на jquery
http://www.webappers.com/2009/06/12/...dation-engine/
  Ответить с цитированием
Ответ

Теги
fluid template, mail form


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расширение Form (form) Form Library, Plugin and Wizard Alalal Общие вопросы 9 19.03.2013 07:57
Fluid template engine Olim Общие вопросы 3 21.12.2011 19:02
После сохранения шаблона при просмотре выдается ошибка Error! No template found! Olga25 TypoScript практикум 1 15.04.2009 09:29
sr_feuser_register: подтверждение при изменении email demav Общие вопросы 0 09.01.2008 16:08
помогите правильно подключить template!!! ***** Общие вопросы 2 16.06.2006 12:46


Часовой пояс GMT +4, время: 02:34.


Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot

Хостинг и техническая поддержка: TYPO3 Лаборатория