Answer the question
In order to leave comments, you need to log in
Why does the loop display the buttons incorrectly?
if 'ВсеТовары' in text:
call_kat = text.split('ВсеТовары_')[-1]
print(call_kat)
#Если выбрано действие "Все товары" - показать все товары выбранной категории
connect_cursor.execute(f'''SELECT DISTINCT Ф.Имя, GROUP_CONCAT(Объем || Цена_руб), Описание, Состав, В_наличие, Расширение, Путь_к_файлу
FROM Товар Т JOIN Фото Ф ON Т.Товар = Ф.Имя
JOIN Атрибут_товара А ON Т.Код_атрибута= А.Код WHERE Категория = "Салат" GROUP BY Ф.Имя''')
rows = connect_cursor.fetchall()
keyb_addKorzina = telebot.types.InlineKeyboardMarkup()
for i in rows:
ls_atr = []
for atr in i[1].split(','):
ls_atr.append(telebot.types.InlineKeyboardButton(text=atr, callback_data=f'ВыбратьАтрибут_{atr}'))
keyb_addKorzina.add(*ls_atr)
rez_info = f'*Наименование: {i[0]}*\n Описание: {i[4]}\n{i[3]}\n'
#Отправить фото и текст боту
with open(f'{i[6]}/{i[0]}{i[5]}', "rb") as file:
#Если товар в наличии
if int(i[4]) == 1:
#send_photo считывает файл и возвращает содержимое файла
bot.send_photo(message.chat.id, file.read(), rez_info + '----------\U00002705 В наличие', parse_mode="Markdown", reply_markup = keyb_addKorzina)
elif int(i[4]) == 0:
bot.send_photo(message.chat.id, file.read(), rez_info + '----------\U00002757 Товар закончился', parse_mode="Markdown")
Answer the question
In order to leave comments, you need to log in
You reset the list at the beginning of each cycle, and do not reset the keyboard
if 'ВсеТовары' in text:
call_kat = text.split('ВсеТовары_')[-1]
print(call_kat)
#Если выбрано действие "Все товары" - показать все товары выбранной категории
connect_cursor.execute(f'''SELECT DISTINCT Ф.Имя, GROUP_CONCAT(Объем || Цена_руб), Описание, Состав, В_наличие, Расширение, Путь_к_файлу
FROM Товар Т JOIN Фото Ф ON Т.Товар = Ф.Имя
JOIN Атрибут_товара А ON Т.Код_атрибута= А.Код WHERE Категория = "Салат" GROUP BY Ф.Имя''')
rows = connect_cursor.fetchall()
for i in rows:
keyb_addKorzina = telebot.types.InlineKeyboardMarkup()
ls_atr = []
for atr in i[1].split(','):
ls_atr.append(telebot.types.InlineKeyboardButton(text=atr, callback_data=f'ВыбратьАтрибут_{atr}'))
keyb_addKorzina.add(*ls_atr)
rez_info = f'*Наименование: {i[0]}*\n Описание: {i[4]}\n{i[3]}\n'
#Отправить фото и текст боту
with open(f'{i[6]}/{i[0]}{i[5]}', "rb") as file:
#Если товар в наличии
if int(i[4]) == 1:
#send_photo считывает файл и возвращает содержимое файла
bot.send_photo(message.chat.id, file.read(), rez_info + '----------\U00002705 В наличие', parse_mode="Markdown", reply_markup = keyb_addKorzina)
elif int(i[4]) == 0:
bot.send_photo(message.chat.id, file.read(), rez_info + '----------\U00002757 Товар закончился', parse_mode="Markdown")
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question