Мне нужно создать строку динамически, чтобы напечатать ее как встроенную клавиатуру на телеграмме - PullRequest
0 голосов
/ 24 апреля 2019

Я программирую телеграмма-бота с встроенными кнопками. Для печати встроенных кнопок сначала нужно настроить «клавиатуру».

«Клавиатура» состоит из кнопок, которые появляются при ее печати. ​​

Пример встроенной клавиатуры:

$tastieraStart='[{"text":"Menu","callback_data":"StampaMenu"},{"text":"Carrello","callback_data":"VisualizzaCarrello"}],[{"text":"Prezzario","callback_data":"Prezzario"}]';

эта клавиатура отображает 2 кнопки (Меню и Carrello) в первом ряду и 1 во втором ряду (prezzario)

В моем случае мне нужно создать клавиатуру, динамически берущую данные из моей базы данных


/*THIS IS HOW I USUALLY PRINT A BOT INLINE KEYBOARD*/

$tastieraStart='[{"text":"Menu\n'.$menu.'","callback_data":"StampaMenu"},{"text":"Carrello\n'.$carrello.'","callback_data":"VisualizzaCarrello"}],[{"text":"Prezzario\n'.$prezzario.'","callback_data":"Prezzario"}]';
editMessageText($queryUserId,$querymsgid,"Benvenuto ".$name.", da oggi sarò il tuo barista personale! \xF0\x9F\x98\x89 \nCome posso servirti?",$tastieraStart,"inline");

В коде, который вы видите ниже, я выбираю только те элементы, которые мне нужны, и добавляю их на клавиатуру. Код работает, и если я пытаюсь напечатать клавиатуру, он печатается в правильном формате.

Когда я хочу использовать это как клавиатуру, мой бот просто печатает «1». Я понятия не имею, откуда взялась эта "1".


if($querydata=="Freddo")
    {

        $CONT="SELECT COUNT(*) AS totale FROM ListinoProdotti WHERE categoria='freddo'";
        $resultCONT=$conn->query($CONT);
        $row = $resultCONT->fetch_assoc();
        $COUNT=$row['totale'];
        editMessageText($queryUserId,$querymsgid,$COUNT);


        $QueryFreddo="SELECT * FROM ListinoProdotti WHERE categoria='freddo'";
        $resultFreddo=$conn->query($QueryFreddo);  
        $row = $resultFreddo->fetch_assoc();
        $tastieraTemp="'";
        for($i=0;$i<$COUNT;$i++)
        {

            $prezzoTemp=$row['prezzo'];

            $prodottoTemp=$row['prodotto'];

            $tastieraTemp=$tastieraTemp."[{'text':\"".$prodottoTemp.$prezzoTemp."\",'callback_data':\"POSVER\"}]";

            if($i<=$resultCONT)
            {
                $tastieraTemp=$tastieraTemp."'";
            }
            else
            {
                $tastieraTemp=$tastieraTemp.",";
            }

        }
        $tastieraFreddo=$tastieraTemp;

        editMessageText($queryUserId,$querymsgid,"Seleziona ciò che desideri ordinare:freddo",$tastieraFreddo,"inline");
        exit();
    }

Также эта функция используется для редактирования предыдущей клавиатуры.


function editMessageText($chatId,$message_id,$newText,$tastiera,$tipo)
    {
    if(isset($tastiera))
      {
        if($tipo=="fisica")
        {
            $tastierino='&reply_markup={"keyboard":['.$tastiera.'],"resize_keyboard":true}';
        }
        else
        {
            $tastierino='&reply_markup={"inline_keyboard":['.$tastiera.'],"resize_keyboard":true}';
        }
      }
        $url = $GLOBALS[website]."/editMessageText?chat_id=".$chatId."&message_id=".$message_id."&text=".urlencode($newText).$tastierino;
      file_get_contents($url);
    }

Я бы хотел, чтобы бот использовал клавиатуру, которую я создаю [$ tastieraFreddo], в качестве реальной клавиатуры и печатал ее как встроенные кнопки

Спасибо за помощь:)

1 Ответ

0 голосов
/ 24 апреля 2019

Я решил проблему ... Ну, в принципе, это простое решение: p

Я вставлю правильный код

if($querydata=="Freddo")
{

    $CONT="SELECT COUNT(*) AS totale FROM ListinoProdotti WHERE categoria='freddo'";
    $resultCONT=$conn->query($CONT);
    $row = $resultCONT->fetch_assoc();
    $COUNT=$row['totale'];
    editMessageText($queryUserId,$querymsgid,$COUNT);


    $QueryFreddo="SELECT * FROM ListinoProdotti WHERE categoria='freddo'";
    $resultFreddo=$conn->query($QueryFreddo);  
    $row = $resultFreddo->fetch_assoc();
    //$tastieraTemp="'";
    for($i=0;$i<$COUNT;$i++)
    {

        $prezzoTemp=$row['prezzo'];

        $prodottoTemp=$row['prodotto'];

        $tastieraTemp=$tastieraTemp."[{\"text\":\"".$prodottoTemp.$prezzoTemp."\",\"callback_data\":\"POSVER\"}]";

        if($i<=$resultCONT)
        {
            $tastieraTemp=$tastieraTemp."";
        }
        else
        {
            $tastieraTemp=$tastieraTemp.",";
        }

    }
    $tastieraFreddo=$tastieraTemp;

    editMessageText($queryUserId,$querymsgid,"Seleziona ciò che desideri ordinare:freddo",$tastieraFreddo,"inline");
    exit();
}
...