Перейти к содержимому

onCallbackPreg

Метод onCallbackPreg создает маршрут для обработки callback_query (нажатий на inline-кнопки). Для сравнения использует регулярные выражения.

Этот метод полезен, когда вы используете пагинацию кнопок, чтобы упрощать обработку кнопок навигации.

Параметры

#НазваниеТипОписание
1idstringУникальный идентификатор для этого маршрута.
2patternstringРегулярное выражение для сравнения с 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()

Опубликовано под лицензией MIT.