Динамическая форма
Чтобы разместить динамическую форму, используйте элемент form
с атрибутами data-type="dynamic-form"
и end_point
:
<form data-type="dynamic-form" end_point="http://exmaple.com/post-form.php">
<div type="input-block">
<span type="input" name="fio" label="Имя" input-type="text" placeholder="Иван Иванов" required="true"></span>
<span type="input" name="phone" label="Телефон" input-type="text" placeholder="8-ХХХ-ХХХ-ХХ-ХХ" required="true"></span>
<span type="radio" name="delivery" label="Выбор способа доставки">
<span
type="option"
value="pickup"
checked="true"
label="Самовывоз, Бесплатно"
meta="Сегодня">
</span>
<span
type="option"
value="courier1"
checked="false"
label="Курьером, 500₽"
meta="1 день, Внутри МКАД">
</span>
<span
type="option"
value="courier2"
checked="false"
label="Курьером, 1500₽"
meta="Сегодня, Снаружи МКАД">
</span>
</span>
<span type="checkbox" name="sms" value="on" content="СМС оповещение о заказе"></span>
<span type="textarea" name="comment" label="Комментарий" placeholder="Комментарий к заказу" required="false"></span>
<button type="submit" text="Оформить заказ"></button>
</div>
<div type="result-block">
<span type="text" field="description"></span>
<span type="link" field="link"></span>
</div>
</form>
end_point
— URL ресурса, в котором происходит обработка данных формы. Параметры формы отправляются с помощью HTTP‑метода POST. Подробнее в разделе Особенности ресурса.
Элементы формы
|
Блок с полями ввода. |
Элементы, входящие в <div type="input‑block">
.
|
Поле ввода, в котором можно реализовать: РадиопереключательЧтобы разместить радиопереключатель, используйте элемент
Допустимые атрибуты:
* Обязательный атрибут. Раскрывающийся список с менюЧтобы разместить раскрывающийся список с меню, используйте элемент
Допустимые атрибуты:
* Обязательный атрибут. ЧекбоксЧтобы разместить чекбокс, используйте элемент
Допустимые атрибуты:
* Обязательный атрибут. Многострочное текстовое полеЧтобы разместить многострочное текстовое поле, используйте элемент
Допустимые атрибуты:
* Обязательный атрибут. Однострочное текстовое полеЧтобы разместить однострочное текстовое поле, используйте элемент
Допустимые атрибуты:
* Обязательный атрибут. |
|
Кнопка для отправки данных. Допустимые атрибуты:
* Обязательный атрибут. |
|
Блок с результатом. Должен содержать элементы
В блоке отображается ответ, который возвращает ресурс. Подробнее об обработке данных в разделе Особенности ресурса. |
Особенности и требования к ресурсу
Чтобы Турбо‑страницы могли взаимодействовать с ресурсом, разрешите Cross-Origin запросы для *.yandex.*
, *.turbopages.org
. Пример реализации проверки:
<?php
/**
* Определение возможности доступа к API.
*/
function turbo_get_allow_origin() {
$http_origin = $_SERVER['HTTP_ORIGIN'];
if (preg_match('/^(https:\/\/(?:.*\.)?yandex\.(?:ru|by|uz|com|com\.tr))$/', $http_origin, $matches)) {
return $matches[0];
} else if (preg_match('/^(https:\/\/(?:.*\.)?turbopages.org)$/', $http_origin, $matches)) {
return $matches[0];
}
return null;
}
$http_allow_origin = turbo_get_allow_origin();
if (is_null($http_allow_origin)) {
// Если доступа нет, должен вернуться код ответа 403.
http_response_code(403);
exit('Access denied');
}
// Отправка CORS-заголовков.
header("Access-Control-Allow-Origin: " . $http_allow_origin);
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Origin, Content-Type, Content-Length, Accept-Encoding");
// Отправка заголовка о том, что данные возвращаются в формате JSON.
header("Content-Type: application/json;charset=utf-8");
?>
Ресурс должен возвращать ответ в формате JSON. Например:
[
{
"field": "description",
"value": "Заказ успешно оформлен. Ваш номер заказа:"
},
{
"field": "link",
"value": "123456",
"href": "https://example.com/cabinet/order/123456/"
}
]
Результат обработки будет представлен на Турбо-странице:
Узнайте больше
Обязательный параметр
Обязательный атрибут