Web
Analytics
Skip to content
Concrete5 на русском языке

Введение

Создание пользовательского шаблона для блока формы

В concrete5 5.7 и ранее, настройка вывода блока формы было довольно сложной задачей - но было возможным.  Для этого надо было создать пользовательский шаблон для блока формы и внутри него отредактировать разметку. Вывод блока формы в каждой версии улучшался, а в версии 5.7 шаблон блока был достаточно удобным для вывода сообщений об успешной отправке, вывода сообщений об ошибках валидации и группирования полей формы HTML разметкой.

К сожалению, вся разметка для существующих элементов формы содержалась в контроллере блока формы, это приводило к тому, что чтобы полностью настроить элементы формы, вам нужно было изменять и вывод (view) и контроллер. Кроме того, логика для элементов формы была довольно жёсткая и приводила к спагетти в коде. Обслуживание формы приводило к трудностям. 

В  8 версии, блок форм был изменен для работы с Экспресс Формами - и, короче говоря, получилось ещё хуже. С точки зрения гибкости, форма стала значительно лучше - можно было добавлять новые типы атрибутов в систему и они становились доступными в формах для посетителей сайта. Но если говорить о настройке разметки, посмотрите на следующую форму:

Форма Экспресс

Это Экспресс форма с несколькими атрибутами и управлением связями (Поле управления связями Стили, соответствующие связи Много-ко-Многим с объектом Проект). Она выглядит хорошо в теме по умолчанию Элементал, так как Элементал использует Twitter Bootstrap для вывода формы, и вывод атрибутов в ядре Concrete5 также используют Bootstrap. Это означает, что атрибуты будут выглядеть хорошо как в контектсе панели управления, так и на пользовательских страницах сайта. 

Тем не менее, что делать сайтам, которые не используют Twitter Bootstrap. Представьте форму в другой теме в concrete5, которая использует совершенно пользовательскую схему разметки формы?

Некрасивая форма
Название

Она не выглядит столь хорошо, не так ли? В то время как мы призываем к стандартизации, и делаем наши темы в соответствии с  Twitter Bootstrap, мы совершенно точно не требуем использовать единый каркас стилей  CSS для создания шаблонов, и  concrete5 всегда был настроен на удобство создания шаблонов дизайн-агентствами.  Поэтому это стало проблемой. 

Создать несколько шаблонов для атрибутов?

К сожалению, мы не можем просто создать пользовательский шаблон, чтобы это исправить. Наша логика уже не находится в блоке Формы - она размазана между всеми типами атрибутов  concrete5. Да, мы можем сделать другой вид корневого атрибута, создав application/attributes/text/controller.php и application/attributes/text/form.php в директории application, и внести изменения там, но эти изменения изменят вывод везде глобально. Что означает, если они будут использованы формами из панели управления, которая в свою очередь, чтобы атрибуты использовали стили  bootstrap (для лучшего вида.) То получим проблемы. Нам нужен один комплект для вывода на страницах сайта и другой комплект для использования в панели управления.

Контексты

Введем Контексты. Используя контексты, можно указать, где будет выводится форма, а сам контекст объекта скажет  concrete5 откуда нужно попытаться загрузить шаблон. Это работает на уровне атрибута и на уровне формы, делая так, что можно настроить всю форму экспресс объекта где-бы не на сайте ни включалась форма, не беспокоясь о неправильном выводе атрибутов в панели управления, в панели настройки атрибутов или в другом месте. 

Давайте погрузимся в настройку Экспресс Форм. Сначала, посмотрим, что можно сделать просто используя пользовательский шаблон Формы. Как было описано выше, не всё возможно, поэтому мы начнём оттуда, а затем перейдём к использованию контекстов для настройки элементов форм. Продолжайте читать для получения дальнейшей информации.

Загрузка беседы