TelegramBot - переместить кнопку в новую строку - PullRequest
0 голосов
/ 06 ноября 2019

Как сделать так, чтобы кнопки были в столбце, а не в строке. Пример изображения, как мне нужно: [Нажмите Imgur] [1].

function sendInlineKeyboard($id_chat, $text, $array)
{
 $keyboard = array("inline_keyboard" => array($array));

        $toSend = array('method' => 'sendMessage', 'chat_id' => $id_chat, 'text' => $text, 'resize_keyboard' => true, 'reply_markup' => $keyboard);
        isset($mark) ? $toSend['parse_mode'] = $mark : '';
        isset($id_message) ? $toSend['reply_to_message_id'] = $id_message : '';     
        $ch = curl_init(API_URL);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($toSend));
        curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
        $a = curl_exec($ch);
        return json_decode($a, true);           
}

$result = $mysqli->query("SELECT * FROM `test`");
while ($row = $result->fetch_assoc()) {             
            $array[] = array('text' => $row['city'], 'callback_data' => $id);
sendInlineKeyboard($user_id, 'String', $array);
}

Не работает. Для ответа от 0stone0:

$keyboard = [
    'inline_keyboard' => [
        [
            ['text' => 'Button 1', 'callback_data' => 'someString'],
            ['text' => 'Button 2', 'callback_data' => 'someString', 'text' => 'Button 3', 'callback_data' => 'someString', 'text' => 'Button 4', 'callback_data' => 'someString'],
            ['text' => 'Button 5', 'callback_data' => 'someString']
        ]
    ]
];
$toSend = array('method' => 'sendMessage', 'chat_id' => $id_chat, 'text' => "Test", 'resize_keyboard' => true, 'reply_markup' => $keyboard);

1 Ответ

0 голосов
/ 07 ноября 2019

Telegram читает каждый массив как строку. Если вы хотите иметь несколько кнопок в одной строке, добавьте их в массив:

$keyboard = [
    "inline_keyboard" => [
        [
            [ "B~1" ],
            [ "B~2" ]
        ],
        [
            [ "B~3" ],
        ]
    ]
];

Поскольку ваша функция получает переменную array, которая используется в качестве клавиатуры, «ошибка» находится в другом месте.

Если вам нужна дополнительная помощь, отредактируйте свою страницу с помощью кодов, вызывающих функцию sendInlineKeyboard.


РЕДАКТИРОВАТЬ : я сделалнебольшой пример относительно массивов;

$keyboard = [
    "inline_keyboard" => [
        [
            [
                "text" => "B~1",
                "callback_data" => "myCallbackData"
            ],
            [
                "text" => "B~2",
                "callback_data" => "myCallbackData"
            ]
        ],
        [
            [
                "text" => "B~3",
                "callback_data" => "myCallbackData"
            ]
        ]
    ]
];


$url = "https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<MY-ID>&text=<TEXT>&reply_markup=" . json_encode($keyboard);

Exmaple


Edit 2

Вы запрашиваете "полный"кнопка ширины. На предоставленном вами скриншоте показаны 2 кнопки, по 1 в каждом ряду. Мой пример выше приводит к тому же результату, если вы используете правильный клиент, который будет использовать всю ширину экрана для кнопки. Первый снимок экрана был от моего клиента Mac OS Mac, используя старую версию, те же кнопки выглядят так: image Итак, клиент, который вы используете, просто показывает кнопки маленькими, это не то, что выможет управлять(Кроме использования другого клиента)

...