Перейти к содержанию

Как разместить формы на модульных страницах⚓︎

Использование форм на модульных страницах⚓︎

Если ваша тема не предоставляет файл templates/forms/form.html.twig, он не настроен на использование форм, но не бойтесь — просто скопируйте шаблоны форм из Antimatter, темы Grav по умолчанию:

  • templates/form.html.twig
  • templates/formdata.html.twig

Теперь создайте модульную папку с типом страницы form.md

Например: 01.your-modular-page/_contact/form.md.

Страница form.md не будет содержать определения формы. Это просто признак того, что это та часть, которая должна выводить форму.

Важно: установить

---
cache_enable: false
---

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

Теперь добавьте заголовок формы на главную модульную страницу, modular.md.

Страница modular.md должна содержать полное определение формы с полями и т. д., как если бы это был заголовок файла form.md «на всю страницу». С собственным путем к странице в качестве поля form.action.

В Form v2.0 теперь вы можете определять форму непосредственно на модульной подстранице, как и любую другую форму. Однако, если он не найден, плагин формы будет искать на «текущей странице», то есть на модульной странице верхнего уровня для формы, поэтому он полностью обратно совместим со способом работы 1.0.

Например:

---
content:
    items: '@self.modular'

form:
    action: /your-modular-page
    name: my-nice-form
    fields:
        -
            name: name
            label: Name
            placeholder: 'Enter your name'
            autofocus: 'on'
            autocomplete: 'on'
            type: text
            default: test

    buttons:
        -
            type: submit
            value: Submit

    process:
        -
            message: 'Thank you for your feedback!'
---

Убедитесь, что в заголовке формы вы добавили параметр action с модульным маршрутом страницы

Как и в примере выше. Этот шаг необходим, потому что, если вы явно не добавляете form.action, код обычно ищет маршрут страницы, но, будучи формой на модульной подстранице, а не на фактической странице, путь неверен и нарушает отправку формы.

Итак, если модульная страница, например, site.com/my-page, просто поместите form: action: /my-page в modular.md. Даже если модульная страница является домашней страницей, используйте маршрут страницы, например form: action: /home

Живой пример⚓︎

В скелете Deliver есть страница модульной формы, которую можно увидеть при чтении этого руководства:

Live page

Page markdown file

Устранение неполадок в формах на модульных страницах⚓︎

Лучший способ устранить неполадки с формой - сначала вернуться к корням и добавить свои настройки одну за другой, чтобы увидеть, что может пойти не так.

  • Я предлагаю создать «обычную форму», убедившись, что она работает, а затем попытаться преобразовать её в модульную.
  • Попробуйте заставить форму работать на скелете на основе темы Antimatter, который содержит все файлы, которые вам уже нужны.
  • Если поля формы не отображаются, если вы установили плагин Assets, отключите/удалите его. Известная проблема, связанная с нарушением модульных форм, скоро будет исправлена.