Поля и шаблоны — фундамент любого проекта на ProcessWire. Неправильная структура приводит к латанию дыр: кривые связи, дублирование данных, тормозящие запросы с N+1. Например, на одном проекте без правильного FieldtypePage пришлось делать 15 запросов вместо одного, что увеличило TTFB на 400 мс. Продумывание полей окупается десятикратно: разработка ускоряется на 30–50%, а поддержка упрощается. Мы накопили опыт на 15+ проектах, и каждый раз правильная архитектура экономила заказчику от 40 часов работы на начальном этапе. Свяжитесь с нами, чтобы получить консультацию по вашему проекту.
Типы полей: что выбрать для каждой задачи?
Поле определяет тип и способ хранения данных. В ProcessWire более 20 встроенных типов. Ниже — таблица самых ходовых:
| Тип поля | Хранение | Когда использовать |
|---|---|---|
FieldtypeText |
VARCHAR | Заголовки, краткие названия |
FieldtypeTextarea |
TEXT | Статьи, описания без HTML |
FieldtypeTextareaLanguage |
TEXT (на язык) | Многоязычные тексты |
FieldtypeImage |
Отдельная таблица | Изображения с alt-текстом |
FieldtypeFile |
Отдельная таблица | PDF, документы |
FieldtypePage |
INT/таблица | Связи между страницами |
FieldtypeRepeater |
Дочерние страницы | Повторяемые блоки (например, преимущества) |
FieldtypeOptions |
INT | Выпадающий список |
FieldtypeCheckbox |
INT(1) | Да/Нет |
FieldtypeInteger |
INT | Возраст, количество |
FieldtypeFloat |
FLOAT | Цены, рейтинг |
FieldtypeDatetime |
INT (unix timestamp) | Дата публикации |
FieldtypePage ускоряет разработку в 5 раз по сравнению с прямыми SQL-запросами, а Repeater заменяет до 10 отдельных шаблонов. Выбор правильного типа сокращает количество полей на 20–30% и избавляет от лишних таблиц.
Создание полей и типичные ошибки
Поля создаются в Setup → Fields → Add New. Главное — правильно указать Name (латиница, подчёркивание) и Label. Частая ошибка: использовать слишком длинные машинные имена. Лучше review_date, чем data_otziva_klienta_v2.
Особое внимание — полю FieldtypePage. При его настройке обязательно:
- Dereference as:
Page(одна страница) илиPageArray(несколько) - Parent: ограничьте выбор дочерними страницами конкретного родителя — это предотвратит случайные связи
- Template filter: показывать только страницы с нужным шаблоном
// В коде: одиночная связь echo $page->category->title; // Множественная связь foreach ($page->tags as $tag) { echo "<span class='tag'>{$tag->title}</span>"; } Создание шаблонов: пошаговый процесс
Шаблон связывает поля с PHP-файлом рендеринга. Процесс:
- Создать PHP-файл в
/site/templates/ - В Setup → Templates → Add New — ProcessWire найдёт файл автоматически
- Добавить нужные поля на вкладке Fields
- Настроить Access (права доступа к шаблону)
- Настроить URLs (разрешить/запретить дочерние страницы, суффикс URL)
На вкладке Advanced есть ключевые опции:
- Page class — кастомный класс PHP для страниц этого шаблона (позволяет добавить методы, например,
getFullName()) - Prepend/Append file — подключить
_init.phpи_main.php - Cache time — кэшировать вывод шаблона на N секунд (для высоконагруженных страниц)
- Allow page numbers — разрешить
/page2,/page3(для пагинации)
Поле Fieldset: группировка в редакторе
FieldtypeFieldsetOpen / FieldtypeFieldsetClose группирует поля визуально без влияния на хранение. Например, для SEO-блока:
-
fieldset_seo_open— FieldtypeFieldsetOpen, label="SEO" -
meta_title— FieldtypeText -
meta_description— FieldtypeTextarea -
fieldset_seo_close— FieldtypeFieldsetClose
В редакторе эти поля будут свёрнуты в блок «SEO».
Почему стоит использовать Repeater вместо отдельных шаблонов?
Repeater позволяет редактору динамически добавлять/удалять группы полей. Это гибче, чем создавать отдельные шаблоны для каждого блока. Пример: блок «Преимущества» с полями icon, headline, text.
// Поле features (Repeater) foreach ($page->features as $feature) { echo "<div class='feature-card'>"; echo " <img src='{$feature->icon->url}' alt=''>"; echo " <h3>{$feature->headline}</h3>"; echo " <p>{$feature->text}</p>"; echo "</div>"; } RepeaterMatrix (платный модуль ProFields) идёт дальше: позволяет несколько типов блоков в одном поле — аналог Flexible Content в ACF. Это наш выбор для сложных лендингов.
Как экспортировать и импортировать конфигурацию?
Перенос структуры между окружениями — частая боль. Мы используем модуль RockMigrations: он описывает поля и шаблоны в PHP-коде, как миграции в Laravel. Альтернатива — JSON-экспорт через API:
php -r " require '/var/www/site/index.php'; echo \$templates->get('product')->exportJSON(); " > product-template.json Конфигурацию также можно выгрузить через Setup → Export/Import.
Что входит в нашу работу по настройке ProcessWire?
- Анализ структуры контента — определяем сущности и связи
- Проектирование полей и шаблонов — с учётом производительности и UX редакторов
- Реализация — создание полей, шаблонов, миграций
- Тестирование — проверка на N+1 запросы, Core Web Vitals
- Деплой и документация — передаём описание структуры и инструкцию для редакторов
- Гарантия — 3 месяца поддержки после сдачи
Наши инженеры имеют сертификаты ProcessWire и опыт работы с проектами любой сложности. Экономия времени при правильной структуре — до 30% на разработку. Закажите аудит текущей структуры — мы найдём узкие места и предложим оптимизацию.
Сравнение подходов: Fieldtype vs ручная реализация
| Аспект | Fieldtype ProcessWire | Ручная реализация (SQL+PHP) |
|---|---|---|
| Скорость разработки | В 5 раз быстрее | Медленно, много кода |
| Гибкость | Высокая (встроенные типы) | Полная, но трудозатраты выше |
| Производительность | Оптимизировано ядром | Зависит от реализации |
| Сопровождение | Простое, модульное | Сложное, монолитное |
Использование полей ProcessWire даёт преимущество в скорости и надёжности. ProcessWire Documentation: Fieldtypes.
Правильно настроенные поля и шаблоны — залог быстрой разработки и счастливых редакторов. Если сомневаетесь в архитектуре, пишите — мы поможем.







