PHP обробник та Telegram
PHP обробник та Telegram інтеграція
Форми в Landiro CMS обробляються на стороні сервера PHP обробником. Обробник зберігається у handler.php секції або вводиться адміністратором у редакторі.
Базовий обробник handler.php
<?php
function handleOrderForm(array $data): array {
$name = trim($data['name'] ?? '');
$phone = trim($data['phone'] ?? '');
if (!$name || !$phone) {
return ['success' => false, 'message' => 'Заповніть всі поля'];
}
$token = $data['_tg_token'] ?? ''; // передається з data-атрибутів форми
$chatId = $data['_tg_chat'] ?? '';
$text = "🛒 *Нове замовлення*\n" .
"Ім'я: {$name}\n" .
"Телефон: {$phone}\n" .
"Товар: " . ($data['_product'] ?? '');
if ($token && $chatId) {
$response = file_get_contents(
"https://api.telegram.org/bot{$token}/sendMessage?" . http_build_query([
'chat_id' => $chatId,
'text' => $text,
'parse_mode' => 'Markdown',
])
);
}
return ['success' => true, 'message' => 'Дякуємо! Ми зателефонуємо найближчим часом.'];
}
Як CMS викликає обробник
При POST запиті до лендингу (з полем X-CMS-Form: 1) — CMS знаходить секцію типу order-form з непорожнім php, записує код у тимчасовий файл і викликає функцію handleOrderForm($postData).
// Автоматично після успішної відправки:
// 1. Зберігається замовлення в orders.json
// 2. Відправляється Telegram (якщо налаштовано в Settings)
// 3. Відправляється Email (якщо налаштовано)
// 4. Викликається Webhook (якщо налаштовано)
// 5. Інкрементується лічильник orders в аналітиці
Заборонені функції в PHP обробнику
CMS перевіряє PHP код на заборонені функції перед виконанням:
// Ці функції ЗАБЛОКОВАНІ в обробнику форм:
exec, system, shell_exec, passthru, popen, proc_open,
eval, assert, preg_replace_callback, create_function,
pcntl_*, posix_*, dl()
Відправка форми зі сторони клієнта (JS)
Форма відправляється як JSON з заголовком X-CMS-Form: 1. При успіху — ховається форма і показується блок success:
(function () {
document.querySelectorAll('.m1-form').forEach(function(form) {
if (form.dataset.init) return;
form.dataset.init = '1';
form.addEventListener('submit', async function(e) {
e.preventDefault();
var btn = this.querySelector('button[type="submit"]');
btn.disabled = true;
var fd = new FormData(this);
var data = Object.fromEntries(fd);
data._tg_token = this.dataset.tgToken || '';
data._tg_chat = this.dataset.tgChat || '';
data._product = this.dataset.product || '';
try {
var res = await fetch(window.location.pathname, {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-CMS-Form': '1' },
body: JSON.stringify(data)
}).then(r => r.json());
if (res.success) {
this.style.display = 'none';
var ok = this.closest('.order-form-wrap')?.querySelector('.form-success');
if (ok) ok.style.display = 'block';
} else {
alert(res.message || 'Помилка відправки');
btn.disabled = false;
}
} catch(err) {
alert('Помилка мережі. Спробуйте ще раз.');
btn.disabled = false;
}
});
});
})();
Оновлено: 26.10.2026 22:43
👁 27
Інші сторінки в категорії «Для розробників»