onCallbackPreg
Метод onCallbackPreg создает маршрут для обработки callback_query (нажатий на inline-кнопки). Для сравнения использует регулярные выражения.
Этот метод полезен, когда вы используете пагинацию кнопок, чтобы упрощать обработку кнопок навигации.
Параметры
| # | Название | Тип | Описание |
|---|---|---|---|
| 1 | id | string | Уникальный идентификатор для этого маршрута. |
| 2 | pattern | string | Регулярное выражение для сравнения с callback_data. |
Возвращает
Action — экземпляр класса Action (Вспомогательный класс), на который можно навешивать дальнейшие действия (text, func и т.д.).
Обработка совпадений
Массив совпадений, полученный из функции preg_match, передается в качестве аргумента в обработчик func(). При этом:
- Первый элемент (
[0]) пропускается (он содержит полное совпадение, поэтому бесполезен), - Массив разворачивается с помощью оператора
....
Пример использования
В этом примере мы создаем inline-кнопки через пагинацию и обрабатываем навигацию.
php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;
use ZenithGram\ZenithGram\Button;
use ZenithGram\ZenithGram\Pagination;
$tg = ZG::create(BOT_TOKEN);
$bot = new Bot($tg);
function getCatalogKeyboard(ZG $tg, int $page): array {
$items = [];
for ($i = 1; $i <= 30; $i++) {
$items[] = Button::cb("📦 Товар $i", "item_$i");
}
return $tg->pagination()->setItems($items)->setPerPage(6)->setColumns(2)->setPage($page)->setPrefix('catalog_page_')->create();
}
// 1. Команда вызова каталога
$bot->onBotCommand('catalog', '/catalog')
->func(function(ZG $tg) {
$keyboard = getCatalogKeyboard($tg, 1);
$tg->msg("📂 Каталог товаров (Стр. 1):")
->inlineKbd($keyboard)
->send();
});
// 2. Обработчик переключения страниц
$bot->onCallbackPreg('catalog_handler', '/^catalog_page_(\d+)$/')
->func(function(ZG $tg, int $page) {
$tg->answerCallbackQuery();
$keyboard = getCatalogKeyboard($tg, $page);
$tg->msg("📂 Каталог товаров (Стр. $page):")
->inlineKbd($keyboard)
->editText();
});
$bot->run()