Создание формы с помощью php шаблонов

Этот метод рассчитан на более подготовленную аудиторию, как минимум надо четко отличать PHP код от HTML, знать простейшие логические конструкции на PHP (if, for …) и как они работают.

1) Все шаблоны расположены в папке /template.

Не рекомендую трогать родные файлы плагина! Хотите что-то изменить создайте новый шаблон на основе дефолтных примеров, подключите его и работайте, в этом случае проблем обновлением плагина не возникнет. Дефольные шаблоны подключаются в ads_init.php, чтобы переключить на свои нужно прописать их в файле ads_config.php например для почты:

2) Какие есть шаблоны:

  • шаблоны формы ввода – form_default_template.php,
    в шаблонах формы можно подключать другие шаблоны (include) : form_uploads.inc.php – загрузка файлов, form_uploads2.inc.php загрузка файлов – вариант можно указать url файла для скачивания напрямую, form_google_map.inc.php – карта google
  • шаблоны отображения post_default_template.php
  • ads_form_login.php – это шаблон закладки редактировать где надо ввести логин и пароль
  • choice_category_template.php – этап выбора категории объявления, шаблон выводит дерево рубрик
  • email_new_post.php и email_edit_post.php – шаблоны писем, первое приходит когда пользователь добавил объявление, второе когда он его отредактировал

Шаблоны формы ввода

Запомните!, шаблон формы подключается(include) дважды. Первый раз для того, чтобы подключить фильтр проверки данных и пропарсить html текст, выловив из него имена поле с префиксами ads_ и adp_. Второй раз – уже непосредственно для печати формы.

В связи с этим все функции в шаблоне должны быть обернуты в конструкцию !function_exists

В последней версии плагина я добавил новое свойство в класс обработчик формы print_form_template
если истина – это значит, что форма печатается, если нет – значит мы просто подключаем фильтр и другие функции.

Парсинг имен

Хочу заострить внимание на этом моменте. Плагин будет обрабатывать только те поля, которые присутствуют в html коде формы. Для этого, при первом подключении мы запускаем регулярное выражение и ищем конструкцию типа:

все найденные имена попадают в свойство $this->ads_fields_form. В старой версии плагина 3.1 это надо было делать вручную

Этот способ также работает.

Автозаполнение полей формы

Автозаполнение работает на библиотеке HTML_FormPersister. Есть одна особенность если вы установите свойство

, то каждый раз при отправке формы это значение будет сбрасываться в

. Чтобы этого избежать атрибут value должен отсутствовать вообще.

Проверка данных, вывод ошибок

Правильность заполнения формы проверяем фильтром, который подключается, как я уже говорил, через проверку function_exists:

Полностью все ошибки хранятся в переменной $msg – настоятельно советую не удалять вывод этой переменной, иначе потом будете долго искать почему не публикуется форма.
Вывод ошибок в шаблоне отдельно для каждого поля :

Кнопки

Вывод управляющих кнопок

Кнопки можно выводить несколько раз вверху формы, посредине, внизу – если форма большая то это очень удобно не надо каждый раз мотать в самый низ.

Комментарии 21 к “Создание формы с помощью php шаблонов”

  1. Александр:

    Здравствуйте.

    В WP работает механизм назначения шаблона для вывода записи определенных рубрик.
    По умолчанию всем записям назначен шаблон content.php
    Если создать файл content-slug-рубрики, то автоматически подхватывается этот шаблон для рубрики Эslug-рубрики”

    При активированном ads_wordpress этого не происходит

  2. Николай:

    Подскажите как в шаблоне form_default_template добавить второй выпадающий список городов?
    Хочу подключить несколько таких выпадающих списков, но что бы не делал присваивается id первого списка

  3. Леван:

    В настройках прописывается абсолютный путь к шаблону??? То есть надо использовать функцию get_template_directory_uri();

  4. Алексей:

    В тексте сказано, что шаблоны форм ввода подключаются дважды.
    Поясните где именно нужно подключать эти шаблоны.

  5. admin:

    подключается там в скобках стоит (include) в смысле вкладывается в код php 2 раза,
    в ads_config.php примеры показнны как подключить свой шаблон

  6. Есть ли шаблон, который отвечает за вывод сообщения о успешном размещении объявления?
    У меня на сайте я использую ads 2 формы для разных post_type. Для этого в конце каждой формы нужно выводить разные сообщения с ID и pass.
    Юрий, подскажи как это реализовать. Все уже сделал, осталась только эта мелочь.

    • admin:

      такого шаблона нет, сообщение фиксировано, но можно сделать следующее скрыть этот блок info с помощью css
      далее прямо в форме создать свой блок с сообщениями, ID и pass будут созданы автоматически,
      например где-то вначале формы воткнуть:

  7. Евгений:

    Здравствуйте
    Вставил ваш код для проверки ошибок из блока “Проверка данных, вывод ошибок” выше ^
    вроде работает но почему-то выводит ошибку по 3 раза
    http://joxi.ru/4Ak3eNKT67eKAq скрин
    Что это может быть ?

  8. khrystoforr:

    Доброго дня. допоможіть вирішити проблему, перечитую ваш сайт але незміг знайти рішення
    в файлі email_new_post.php щоб відправляло №телефону в листі разом з ІД і паролем, ось:

    :”"
    але в мене не працює(((
    і так також непрацює
    :

    Присилає тільки: Phone: “”

  9. khrystoforr:

    Повтор з кодом)))

    Доброго дня. допоможіть вирішити проблему, перечитую ваш сайт але незміг знайти рішення
    в файлі email_new_post.php щоб відправляло №телефону в листі разом з ІД і паролем, ось:
    [code]
    :""[/code]
    але в мене не працює(((
    і так також непрацює
    [code]
    : [/code]

    Присилає тільки: Phone: “”

    • admin:

      в фале email_new_post.php написать :
      Номер телефона:< ?=$ads_phone?>

      • khrystoforr:

        Дякую за відповідь! але не спрацювало((
        1) якщо заповняє незареєстрований користувач оголошення то в листі приходить Phone: Array
        2) якщо заповнює зареєстрований користувач то приходить Phone:
        (в профілі тел вказаний)

  10. Алексей:

    Здравствуйте. Как сделать такой же этап выбора категорий, как у вас на картинке? Нужно изменять файл choice_category_template.php ?

    • admin:

      не обязательно,
      1) для каждой категории добавить описание
      2) в плагине Ads в настройках включить показывать описание категорий

      вот и все

  11. Дмитрий:

    Здравствуйте.
    Использую чекбоксы
    пример:

    (input name=”ads_nl” value=”В наличии” type=”checkbox”)
    (input name=”ads_nz” value=”На заказ” type=”checkbox”)

    если при публикации отметил чекбоксы, то все нормально, а вот если потом редактирую объявление и нужно снять чекбокс, то они не убираются, то есть в произвольных полях остаются

  12. Дмитрий:

    Здравствуйте, я установил и активировал плагин. Создал страницу и в редакторе вставил шорткод. В итоге на страницу выводится шорткод. Что я забыл сделать?

Добавить комментарий для Николай Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url=""> [php]…[/php] [html]…[/html] [css]…[/css] [text]…[/text] [code]…[/code]