FAQ SimpleForm / SimpleForm II: простые и функциональные конструкторы форм

Discussion in 'Формы' started by AKopytenko, Mar 4, 2014.

  1. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Staff Member

    Joined:
    Sep 1, 2011
    Messages:
    1,963
    Likes Received:
    168
    Gender:
    Male
    Модуль SimpleForm позволяет просто создавать модули с формами любой сложности со всеми распространёнными элементами ввода: input, select, checkbox, textarea, radio-button.

    Страница в каталоге JED: http://extensions.joomla.org/extensions/contacts-and-feedback/forms/16473

    Официальный сайт расширения: http://allforjoomla.ru/

    simpleform-demo-4.jpg

    Доступные атрибуты элементов:
    • type
      Определяет тип элемента. Возможные значения: text, textarea, select, radio, button, submit, reset, checkbox, captcha, file (елемент "file" добавлен в версии 1.0.1).
    • label
      Определяет поясняющую надпись возле элемента.
    • required
      Если значение этого атрибута равно "required", то заполнение данного элемента будет обязательным для пользователя.
    • regex
      Значением этого атрибута может быть регулярное выражение для проверки правильности заполнения элемента, у которого назначен этот атрибут.
    • error
      Значением этого атрибута может быть текст сообщения об ошибки вызванной незаплнением элемента, у которого определен этот атрибут и атрибут required имеет значение "required", либо введенные данные не прошли проверку регулярного выражения.
    • value
      Значение этого атрибута является значением элемента по-умолчанию.
    • class
      Если этот атрибут не пустой, то элементу будет задан CSS класс из значения этого атрибута.
    • multiple
      Данный атрибут может использоваться только в элементе с типом: select. Определяет можно ли выбрать несколько вариантов значений. Возможные значения: multiple.
    • selected
      Применяется только к элементам типа: select, radio и checkbox. Определяет, отмечен ли элемент по-умолчанию.
    • width
      Используется только в элементах типа: captcha. Определяет ширину изображения в пикселах. Возможные значения: целое число не менее 100.
    • height
      Используется только в элементах типа: captcha. Определяет высоту изображения в пикселах. Возможные значения: целое число не менее 50.
    • onclick
      Используется только в элементах типа: button, reset, checkbox. Определяет HTML атрибут onclick.
    • onchange
      Используется только в элементах типа: text, textarea, select. Определяет HTML атрибут onchange.
    • extensions
      Используется только в элементах типа: file. Определяет расширения файлов доступных для загрузки перечисленных через запятую. Например: gif, jpg, zip
    • maxsize
      Используется только в элементах типа: file. Определяет мексимальный размер загржаемого файла. Принимает значения в килобайтах и магабайтах. Например, чтобы задать максимальный размер загружаемого файла в 200 килобайт нужно написать: 200Kb. Для размера в 1 мегабайт: 1Mb.
    • color
      Используется только в элементах типа: captcha. Определяет цвет надписи в формате HEX. Если отсутствует - цвет генерируется случайным образом. (добавлен в версии 1.0.5)
    • background
      Используется только в элементах типа: captcha. Определяет цвет фона в формате HEX. Если отсутствует - цвет генерируется случайным образом. (добавлен в версии 1.0.5)

    Отличительная черта модуля - его простота и "лёгкость", по сравнению с известными конкурентами (перечисление будет некорректным :)).

    Модуль распространяется бесплатно, при условии сохранения копирайта разработчика. Для удаления копирайта можно перечистить на счёт разработчика 10$ - небольшая сумма для удобного модуля.

    P.S. Эта тема создана по просьбе разработчика сего хорошо себя зарекомендовавшего расширения. К сожалению, уже несколько месяцев автора никак не могут растолкать выпилить версию модуля для Joomla 3. Надеюсь, что появление этой темы его подбодрит!
     
    Last edited: Mar 5, 2014
  2.  
  3. ZyX
    Offline

    ZyX Модератор

    Joined:
    Feb 20, 2010
    Messages:
    18
    Likes Received:
    1
    Gender:
    Male
    zazaka likes this.
  4. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Staff Member

    Joined:
    Sep 1, 2011
    Messages:
    1,963
    Likes Received:
    168
    Gender:
    Male
    Крайне не хватает добавления суффикса класса к модулю.
    Как про такую штуку важную можно было забыть?? :)
     
  5. ZyX
    Offline

    ZyX Модератор

    Joined:
    Feb 20, 2010
    Messages:
    18
    Likes Received:
    1
    Gender:
    Male
    Вроде как есть она в настройках модуля :)
     
  6. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Staff Member

    Joined:
    Sep 1, 2011
    Messages:
    1,963
    Likes Received:
    168
    Gender:
    Male
    Точно. Ёлки-палки. Как я не увидел то?...
    --- добавлено: Jun 2, 2014, первое сообщение размещено: Apr 23, 2014 ---
    При добавлении в форму полей типа checkbox в Joomla 3 на странице с формой появляется ошибка.

    P.S.: Никак не появится комментарий мой про работу модуля на http://allforjoomla.ru/xmodules/mod-simpleform2 ...
     
  7. ZyX
    Offline

    ZyX Модератор

    Joined:
    Feb 20, 2010
    Messages:
    18
    Likes Received:
    1
    Gender:
    Male
    Сегодня залил новую версию модуля. Нововведения следующие:
    • Добавлена возможность указывать e-mail, на который будет отправляться ответ пользователя
    • В качестве значений для параметров "E-mail ответного письма" и "E-mail получателя" можно указывать имя элемента формы
    • Добавлена возможность задавать каждому элементу формы имя параметром "name". В качестве имени можно использовать только цифры и латинские буквы.
    • Данные об отправителе писем берутся из настроек сайта
    Скачать можно все там же: http://allforjoomla.ru/xmodules/mod-simpleform2
    Либо обновиться из администраторской панели сайта, если модуль у вас уже установлен.
    --- добавлено: Jun 8, 2014 ---
    Появляется не ошибка, а предупреждение (исправлено в версии 1.0.37). Легко лечиться отключением показа ошибок на сайте в настройках.
    Рекомендация всем читающим - всегда на продакшн сайтах отключайте показ ошибок. Пользователю они ни к чему, а недоброжелателю дают информацию не в вашу пользу.
    Поэтому рекомендую отключать показ ошибок, а на сервере включить логирование PHP ошибок без предупреждений и информации.
    Таким образом вы всегда сможете отследить ошибки скрипта и при этом не испортить внешний вид сайта пользователю, а также не дать дополнительной информации недоброжелателю.
     
    Last edited: Jun 8, 2014
  8. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Staff Member

    Joined:
    Sep 1, 2011
    Messages:
    1,963
    Likes Received:
    168
    Gender:
    Male
    Это понятно, но всё-таки приятнее когда ни фаталов, ни ворнингов, ни нотисов нету :)
     
  9. ZyX
    Offline

    ZyX Модератор

    Joined:
    Feb 20, 2010
    Messages:
    18
    Likes Received:
    1
    Gender:
    Male
    Согласен
     
  10. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Staff Member

    Joined:
    Sep 1, 2011
    Messages:
    1,963
    Likes Received:
    168
    Gender:
    Male
    ВНИМАНИЕ!

    Если в своём шаблоне библиотека jQuery подключалась вручную (через обычный link в области head), не забывайте войти в настройки ВСЕХ добавленных ранее модулей SimpleForm II и установить в настройках:

    Подключить библиотеку jQuery: No

    К сожалению, включение настройки "Активировать безопасный режим jQuery" не решает вопрос конфликтов скриптов.
     
  11. Offline

    Masterocek Недавно здесь

    Joined:
    Mar 8, 2015
    Messages:
    2
    Likes Received:
    0
    Gender:
    Male
    Добрый день столкнулся с такой проблемой при заполнении полей дата заселения и дата выезда на сайте все идет нормально, но при получении письма с сайта нет даты заселения и нет даты выезда уже все попробовал все равно не отображает даты в письме вод код формы:

    Код (html):
    1. <style type="text/css">form.simpleForm label{display:block;}form.simpleForm label span{color:#ff0000;}form.simpleForm input.inputtext{width:215px;}form.simpleForm textarea.inputtext{width:215px;height:100px;}form.simpleForm textarea.inputtext_small{width:215px;height:50px;}</style>{form}
    2. <p>{element label="Ф.И.О.: " type="text" required="required" error="Введите Ф.И.О." /}</p>
    3. <p>{element label="E-mail: " type="text" required="required" error="Введите вашE-mail" /}</p>
    4. <p>{element label="Телефон: " type="text" required="required" error="Введите ваш Телефон" /}</p>
    5. <p>
    6. {element label="Категория: " type="select"}
    7. {option label="Эконом" value="Эконом" /}
    8. {option label="Стандарт" value="Стандарт" /}
    9. {option label="Люкс" value="Люкс" /}
    10. {/element}
    11. </p>
    12. <p>
    13. {element label="Человек: " type="select"}
    14. {option label="1" value="1" /}
    15. {option label="2" value="2" /}
    16. {option label="3" value="3" /}
    17. {option label="3" value="3" /}
    18. {/element}
    19. </p>
    20. <p>{element label="Дата прибытия" /}
    21. <input type="date" name="date" required/></p>
    22. <p>{element label="Дата отбытия" /}
    23. <input type="date" name="date" required/></p>
    24. <p>{element type="submit" value="Отправить" /}</p>
    25. {/form}

    Просьба помогите разобраться что я не так делал
    _________
    ПРИ ВСТАВКЕ В СООБЩЕНИЕ КОДЫ ОБРАМЛЯЮТСЯ ТЕГАМИ !
     
    Last edited by a moderator: Mar 22, 2015
  12. OlegK
    Offline

    OlegK Russian Joomla! Team Staff Member ⇒ Профи ⇐

    Joined:
    Jan 17, 2011
    Messages:
    7,812
    Likes Received:
    771
    Gender:
    Male
    Код (html):
    1. <p>{element label="Дата прибытия" /}
    2. <input type="date" name="date" required/></p>
    3. <p>{element label="Дата отбытия" /}
    4. <input type="date" name="date" required/></p>

    Атрибут измени, не применяй одинаковые имя инпутов
    Код (html):
    1. name="date_in"
    2. name="date_out"
     
  13. Offline

    Masterocek Недавно здесь

    Joined:
    Mar 8, 2015
    Messages:
    2
    Likes Received:
    0
    Gender:
    Male
    все равно ничего не поменялось вот да
    Код (html):
    1. <style type="text/css">form.simpleForm label{display:block;}form.simpleForm label span{color:#ff0000;}form.simpleForm input.inputtext{width:215px;}form.simpleForm textarea.inputtext{width:215px;height:100px;}form.simpleForm textarea.inputtext_small{width:215px;height:50px;}</style>
    2.  
    3. {form}
    4. <p>{element label="Ф.И.О.: " type="text" required="required" error="Введите Ф.И.О." /}</p>
    5. <p>{element label="E-mail: " type="text" required="required" error="Введите вашE-mail" /}</p>
    6. <p>{element label="Телефон: " type="text" required="required" error="Введите ваш Телефон" /}</p>
    7. <p>
    8. {element label="Категория: " type="select"}
    9. {option label="Эконом" value="Эконом" /}
    10. {option label="Стандарт" value="Стандарт" /}
    11. {option label="Люкс" value="Люкс" /}
    12. {/element}
    13. </p>
    14. <p>
    15. {element label="Человек: " type="select"}
    16. {option label="1" value="1" /}
    17. {option label="2" value="2" /}
    18. {option label="3" value="3" /}
    19. {option label="4" value="4" /}
    20. {/element}
    21. </p>
    22. <p>{element label="Дата прибытия" /}
    23. <input type="date" name=""date_in"" required/></p>
    24. <p>{element label="Дата отбытия" /}
    25. <input type="date" name="date_out" required/></p>
    26. <p>{element type="submit" value="Отправить" /}</p>
    27. {/form}
     
    Last edited by a moderator: Mar 22, 2015
  14. vyatka
    Offline

    vyatka Пользователь

    Joined:
    Nov 30, 2010
    Messages:
    93
    Likes Received:
    5
    Gender:
    Male
    Отличный модуль, ИМХО.
    Для моих задач подошел идеально, за счет свободы в верстке вывода формы...
     
  15. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Staff Member

    Joined:
    Sep 1, 2011
    Messages:
    1,963
    Likes Received:
    168
    Gender:
    Male
    Вот за это я его не люблю.
    --- добавлено: Mar 22, 2015, первое сообщение размещено: Mar 19, 2015 ---
    Почему имя поля два раза в кавычки взято?
    И вместо required попробуй вписать полный вариант: required="required"
     
  16. Offline

    yaka Недавно здесь

    Joined:
    Apr 29, 2015
    Messages:
    2
    Likes Received:
    0
    Gender:
    Male
    Здравствуйте, помогите пожалуйста с такой проблеммой:
    Сайт работает на хостинге bitte.net.ua. На сайте не работает форма simple form 2, при обращении в службу потдержки получил такое сообщение:
    "В целях борьбы со спам рассылками на сервере были внесены изменения, которые запрещают отправку писем через функцию mail с почтовым ящиком отправителя, не созданном в аккаунте и не указанном в качестве отправителя в почтовых настройках сайта".
    Создал на хостинге почтовый ящик, подскажите пожалуйста где в форме simple form 2 можно указать почтовый ящик с которого необходимо отправлять сообщения.
    Спасибо.
     
  17. OlegK
    Offline

    OlegK Russian Joomla! Team Staff Member ⇒ Профи ⇐

    Joined:
    Jan 17, 2011
    Messages:
    7,812
    Likes Received:
    771
    Gender:
    Male
    а в общих настройках Джумла указан почтовый ящик?
     
  18. Offline

    yaka Недавно здесь

    Joined:
    Apr 29, 2015
    Messages:
    2
    Likes Received:
    0
    Gender:
    Male
    Спасибо за помощь, все заработало, указал настройки SMTP в общих настройках Joomla
     
  19. CB9T
    Offline

    CB9T Преподаватель по J! Staff Member ⇒ Профи ⇐

    Joined:
    May 21, 2010
    Messages:
    2,604
    Likes Received:
    322
    Gender:
    Male
    Очень хочется увидеть в новых версиях HTML5 атрибуты.

    tel, date, email, url и многие другие...

    sjSOyfg.png BqcXnZz.png WSnbqYf.png


    Для этого в файле: simpleform2.class.php

    Добавьте новый код примерно с 180 строки:
    Код (PHP):
    1. function renderElement($elem){
    2.      $result = $elem->code;
    3.      $result = preg_replace("/{\/?element(.*?)(?=})}/i",'',$result);
    4.      $name = $elem->name;
    5.      $id = $elem->id;
    6.      $class = @$elem->class;
    7.      $default = @$elem->value;
    8.      $placeholder = @$elem->placeholder;
    9.      $label = '';
    10.      if($elem->label!='') $label = '<label for="'.$elem->id.'">'.$elem->label.($elem->required?' <span>*</span>':'').'</label> ';
    11.      switch($elem->type){
    12.        case 'text':
    13.          $onchange = @$elem->onchange;
    14.          if(count($elem->requests)) $default = $elem->requests[0];
    15.          $attribs = array();
    16.          $attribs[] = 'name="'.$name.'"';
    17.          $attribs[] = 'id="'.$id.'"';
    18.          if($class) $attribs[] = 'class="'.$class.'"';
    19.          if($onchange) $attribs[] = 'onchange="'.$onchange.'"';
    20.          if($placeholder) $attribs[] = 'placeholder="'.$placeholder.'"';
    21.          $result.= '<input type="text" '.implode(' ',$attribs).' value="'.htmlspecialchars($default).'" />';
    22.        break;


    После него уже свое:

    Код (PHP):
    1. case 'tel':
    2.          $onchange = @$elem->onchange;
    3.          if(count($elem->requests)) $default = $elem->requests[0];
    4.          $attribs = array();
    5.          $attribs[] = 'name="'.$name.'"';
    6.          $attribs[] = 'id="'.$id.'"';
    7.          if($class) $attribs[] = 'class="'.$class.'"';
    8.          if($onchange) $attribs[] = 'onchange="'.$onchange.'"';
    9.          if($placeholder) $attribs[] = 'placeholder="'.$placeholder.'"';
    10.          $result.= '<input type="tel" '.implode(' ',$attribs).' value="'.htmlspecialchars($default).'" />';
    11.        break;
    12.        case 'date':
    13.          $onchange = @$elem->onchange;
    14.          if(count($elem->requests)) $default = $elem->requests[0];
    15.          $attribs = array();
    16.          $attribs[] = 'name="'.$name.'"';
    17.          $attribs[] = 'id="'.$id.'"';
    18.          if($class) $attribs[] = 'class="'.$class.'"';
    19.          if($onchange) $attribs[] = 'onchange="'.$onchange.'"';
    20.          if($placeholder) $attribs[] = 'placeholder="'.$placeholder.'"';
    21.          $result.= '<input type="date" '.implode(' ',$attribs).' value="'.htmlspecialchars($default).'" />';
    22.        break;
    23.        case 'email':
    24.          $onchange = @$elem->onchange;
    25.          if(count($elem->requests)) $default = $elem->requests[0];
    26.          $attribs = array();
    27.          $attribs[] = 'name="'.$name.'"';
    28.          $attribs[] = 'id="'.$id.'"';
    29.          if($class) $attribs[] = 'class="'.$class.'"';
    30.          if($onchange) $attribs[] = 'onchange="'.$onchange.'"';
    31.          if($placeholder) $attribs[] = 'placeholder="'.$placeholder.'"';
    32.          $result.= '<input type="email" '.implode(' ',$attribs).' value="'.htmlspecialchars($default).'" />';
    33.        break;
    34.        case 'url':
    35.          $onchange = @$elem->onchange;
    36.          if(count($elem->requests)) $default = $elem->requests[0];
    37.          $attribs = array();
    38.          $attribs[] = 'name="'.$name.'"';
    39.          $attribs[] = 'id="'.$id.'"';
    40.          if($class) $attribs[] = 'class="'.$class.'"';
    41.          if($onchange) $attribs[] = 'onchange="'.$onchange.'"';
    42.          if($placeholder) $attribs[] = 'placeholder="'.$placeholder.'"';
    43.          $result.= '<input type="url" '.implode(' ',$attribs).' value="'.htmlspecialchars($default).'" />';
    44.        break;
    45.        case 'time':
    46.          $onchange = @$elem->onchange;
    47.          if(count($elem->requests)) $default = $elem->requests[0];
    48.          $attribs = array();
    49.          $attribs[] = 'name="'.$name.'"';
    50.          $attribs[] = 'id="'.$id.'"';
    51.          if($class) $attribs[] = 'class="'.$class.'"';
    52.          if($onchange) $attribs[] = 'onchange="'.$onchange.'"';
    53.          if($placeholder) $attribs[] = 'placeholder="'.$placeholder.'"';
    54.          $result.= '<input type="time" '.implode(' ',$attribs).' value="'.htmlspecialchars($default).'" />';
    55.        break;


    Результат для хромоподобных:
    I2KxHnU.png

    Для мобильных устройств Android + Ipad:

    iPdEBz1.png ZO18fxd.png 7m0826g.png huhCV9d.png lWrXNbd.png

    Также можете немного изменить вывод для телефона (он скорей всего будет только 1 раз на странице) - поле ввода:
    Код (PHP):
    1. case 'tel':
    2.          $onchange = @$elem->onchange;
    3.          if(count($elem->requests)) $default = $elem->requests[0];
    4.          $attribs = array();
    5.          $attribs[] = 'name="'.$name.'"';
    6.          $attribs[] = 'id="'.$id.'"';
    7.          if($class) $attribs[] = 'autofocus class="'.$class.'"';
    8.          if($onchange) $attribs[] = 'onchange="'.$onchange.'"';
    9.          if($placeholder) $attribs[] = 'placeholder="'.$placeholder.'"';
    10.          $result.= '<input type="tel" '.implode(' ',$attribs).' value="'.htmlspecialchars($default).'" />';
    11.        break;


    autofocus - Автоматически устанавливает фокус в поле формы. В таком поле можно сразу набирать текст без явного щелчка по нему курсором мыши. + магия HTML5

    Далее обязательно добавить новые аттрибуты ниже, иначе они будут на frontend - но на почту не будут приходить.

    Примерно 1017 строка:

    Код (PHP):
    1. function check(&$form,$request){
    2.  
    3.      $checkVal = $this->getParam($request,$this->name,null);
    4.  
    5.  
    6.      if(in_array($this->type,array('text','tel','date','email','url','time','textarea'))){
    7.  
    8.        $checkVal = trim($checkVal);
    9.  
    10.        if(($this->required&&$checkVal=='')||($this->regex!=''&&!preg_match($this->regex,$checkVal))){
    11.  
    12.          $this->setError($this->error);
    13.  
    14.          return false;
    15.  
    16.        }
    17.  
    18.        $this->requests[] = $checkVal;
    19.  
    20.      }
     
    Last edited: May 25, 2015
    Alekxandr, vuslyk and AKopytenko like this.
  20. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Staff Member

    Joined:
    Sep 1, 2011
    Messages:
    1,963
    Likes Received:
    168
    Gender:
    Male
    @CB9T - молодец.
    @ZyX, глянь как работает и выкладывай обновление?? ;)
     
  21. Offline

    zazaka Недавно здесь

    Joined:
    Jul 4, 2016
    Messages:
    1
    Likes Received:
    0
    Пытаюсь настроить вашу форму.
    Задал все поля. Форма отображается.
    Но после нажатия кнопки отправить - не появляется сообщение то что я ввел в админке в поле "Текст после обработки формы" и всё что я ввел в полях отстается (поля не очищаются) - сообщение на почту с заполненной формы приходит.
    из за чего может не появлятся сообщение после обработки формы, куда копать?
     

Share This Page

Loading...