@violpeople

Как оформить кнопку "Следующий товар"/"Предыдущий товар"?

Здраствуйте!
Хотел бы спросить, как можно оформить кнопку, по нажатию на которую будет показывать следующий товар из БД - тоесть я нажимаю кнопку и карусель товаров смещается на один товар назад/вперед.
Использую aiogram

@dp.callback_query_handler(text= 'ххх')
async def name(call: types.CallbackQuery):
    kb = InlineKeyboardMarkup(row_width=2)
    
    cur=con.cursor()
    cur.execute('SELECT Name, Price FROM ххх')
    row=cur.fetchall()
    print(row)

    next =InlineKeyboardButton(text= 'Следующий',callback_data= 'next')
    previous =InlineKeyboardButton(text= 'Предыдущий',callback_data= 'previous')
    add = InlineKeyboardButton(text= 'Добавить в корзину',callback_data= 'add')

    kb.add(next,previous,add)
    await call.message.answer(text= row,reply_markup=kb)

@dp.callback_query_handler(text= 'next')

async def next_button (call: types.CallbackQuery):
   #cur=con.cursor()
   #cur.execute('SELECT Name, Price FROM xxx WHERE Id += 1')
   #row=cur.fetchall()
   #print(row)

Заранее спасибо, извините за возможно глупый вопрос
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Нужно либо помнить позицию текущего пользователя в карусели товаров, чтобы правильно выбирать, какой будет предыдущим/следующим/текущим для добавления (как уже написано выше), либо в качестве callback_data кнопок использовать данные конкретных товаров.

Например, как-то так (items - словарь товаров с артикулами в качестве ключей):

#
    numbers = items.keys()
    index_current = numbers.index(number_current)
    if index_current > 0:
        number_prev = numbers[index_current-1]
    else:
        number_prev = numbers[-1]
    if index_current < len(numbers)-1:
        number_next = numbers[index_current+1]
    else:
        number_next = numbers[0]

    next =InlineKeyboardButton(text= 'Следующий',callback_data= f'item:{number_next}')
    previous =InlineKeyboardButton(text= 'Предыдущий',callback_data= f'item:{number_prev}')
    add = InlineKeyboardButton(text= 'Добавить в корзину',callback_data= f'add:{number_current}')

...

    if call.data.startswith('item:'):
       number_current = call.data[5:]
       show_this_item_to_user
    if call.data.startswith('add:'):
       number_current = call.data[4:]
       add_this_item_to_basket
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы