Хочу вывести корзину по нажатию кнопки на клавиатуре. Если корзина есть выводим ее аналогично нажатию кнопки перейти в корзину, после добавления товара в корзину.
Если нет, выводим стандартный текст, в корзине пусто.
Кнопку клавиатуры вывел в starbot, в router как прописать действие?
За вывод корзины отвечает метод showBasket я верно понимаю? Но видимо плохо соображаю какую переменную ему нужно скормить для отображения корзины? Можете помочь?
router($data) прописываю в секцию: if (array_key_exists("text", $data['message'])) {
Но судя по всему в данном случае $data['callback_query'] отсутствует :(
Т.к. в логах:
В функцию showBasket добавил setFileLog чтобы как-то начинать разбираться что происходит:
Т.е. showBasket ожидает $data['callback_query'] которого нет при нажатии на кнопку "Корзина". Как же его получить?
попробуйте передавать в роутере сразу в метод $this->showBasketBegin($user_id, $data)
пусть $data будет как там есть (объект Message)
===
Сейчас совсем по другому мой роутер работает, там все проще.
Добавил опять же немного логгирования чтоб разобраться.
С user_id вроде понятно, в роутере это $chat_id = $this->getChatId($data);
$data в showBasketBegin нам нужна чтобы понять id сообщения через 'message_id' => $this->getMessageId($data),
чтобы понять на месте какого сообщения выводить корзину. Я верно рассуждаю?
private function getMessageId($data)
{
if ($this->getType($data) == "callback_query") {
return $data['callback_query']['message']['message_id'];
}
return $data['message']['message_id'];
}
Однако все равно не запускается, подозреваю что это из-за $this->botApiQuery("editMessageText", $data_send);
Ведь если мы нажимаем кнопку на клавиатуре то нам нужно отправить новое сообщение, а не редактировать текущее, верно?
Для этого сделал проверку:
Заработало, по кнопке стала показываться корзина. Но видимо проверка $this->getType($data) == "callback_query" - в данном случае никогда не пройдет, и даже после добавления товара в корзину и переход в корзину по inline-кнопке все равно отдает корзину в новое сообщение. Подскажите как условие составить?
по умолчанию true - это для старой логики и если вы отсылаете через клаву то передавать флаг false
и сама проверка делается в showBasketBegin если флаг true то логику для кнопки если false то логику для клавы