Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 07.05.2022
Сообщений: 19
Telegram Bot

Перелистывание страниц

22.05.2022, 23:50. Показов 2768. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Библиотека — aiogram
В общем, у меня есть база данных и есть код:
База данных(на столбец "ostatki" не обращайте внимание, это я лично для себя) — https://yapx.ru/v/SE5OB (фотохостинг)
(сама генерация)
Python
1
2
3
4
def genmarkup2(data2):
    markup2 = types.ReplyKeyboardMarkup(row_width=3, resize_keyboard=True, one_time_keyboard=True) # создаём клавиатуру
    markup2.add(*[types.KeyboardButton(button[0]) for button in data2])
    return markup2
(использование этой генерации)
Python
1
2
3
4
5
@dp.message_handler(commands='test')
async def testing(message):
    cursor.execute(f"SELECT namefirma FROM firma")
    data2 = cursor.fetchall()
    await bot.send_message(message.from_user.id, text="Выберете бренд.", reply_markup=genmarkup2(data2))
Получается вот это — https://yapx.ru/u/SE5IU (фотохостинг)
Ну и как понимаете, это выглядит некрасиво.
Я нуждаюсь в помощи как создать кнопку с перелистыванием страницу(Следующая, обратно) чтобы на одной странице было 5 надписей(кнопки + кнопки с перелистываем)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2022, 23:50
Ответы с готовыми решениями:

pyTelegramBotAPI Перелистывание страниц
Есть 10 картинок page1, page2, .., page10 необходимо реализовать инлайн кнопки "назад" и "вперед" которые будут соответственно...

Перелистывание страниц
Всем привет! Подскажите пожалуйста как сделать на вордпресс чтоб выводилось по несколько записей на странице (к примеру 5 шт), а...

Перелистывание страниц
ребят подскажите пожалуйста как такое можно реализовать или живой пример если можно.

24
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.05.2022, 00:08
- в базе для каждой записи имейте id
- в глобальной переменной храните id первой из трех показываемых в данный момент кнопок (начальное значение 1),
- при нажатии на кнопку - увеличивайте значение и обновляйте keyboard
- при обновлении keyboard - считайте 3 значения из базы начиная со значения глобальной переменной.

вместо глобальной переменной можно туда сюда передавать значения, но это уж сами решайте
0
0 / 0 / 0
Регистрация: 07.05.2022
Сообщений: 19
23.05.2022, 00:48  [ТС]
проблема в ID, я в этой базе данных могу удалять строчки, а ID не будет меняться и будет получаться что после 2 у меня идёт не 3, а 4. Как с этим быть? Можно ли как то вместо ID считать количество строчек(count)?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.05.2022, 00:52
Если значений в базе будет не очень много - считайте их без id и пронумеруйте сами.
0
0 / 0 / 0
Регистрация: 07.05.2022
Сообщений: 19
23.05.2022, 00:53  [ТС]
Если честно, я не имею понятие сколько будет строчек, точно не получится по количеству строчек в таблице?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.05.2022, 01:01
Если значений будет много - смысла в пагинации по три очень мало все равно, никто не захочет листать 7000 значений по три до самого конца.
0
0 / 0 / 0
Регистрация: 07.05.2022
Сообщений: 19
23.05.2022, 01:02  [ТС]
Я для примера написал 3, мне просто нужно чтобы это работало
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.05.2022, 01:10
тогда так - все еще иметь id, при выборке - order by id и limit по кол-ву нужных записей (3), даже если будут пропущенные id - limit заберет ровно 3 записи.
0
0 / 0 / 0
Регистрация: 07.05.2022
Сообщений: 19
23.05.2022, 01:12  [ТС]
а смысл иметь ID, если можно по namefirma забирать 3 штуки?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.05.2022, 01:14
А когда следующие три будете забирать то начиная с какой строки будете выборку делать?
0
0 / 0 / 0
Регистрация: 07.05.2022
Сообщений: 19
23.05.2022, 01:27  [ТС]
По поводу ID понял, но по поводу как это всё написать пока что в мозгу не складывается, то есть мне надо сохранить в переменную цифру 3 например, написать код, в котором будет написано чтобы показывались 3 первые кнопки и кнопка следующая страница, нажимая на кнопку следующая страница у меня к переменной добавляется +3 и показывается 6 кнопок, вместо следующих 3, я правильно понял или нет?

Добавлено через 7 минут
можете дать подсказку как показать кнопки №4, №5, №6, а не все 6 кнопок
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.05.2022, 01:38
Лучший ответ Сообщение было отмечено Wylamins как решение

Решение

  • при каждом пролистывании - запоминаете id первой и последний записи и формируете новый keyboard, удаляете старый keyboard и показываете новый
  • при каждом пролистывании вперед - вытягиваете три первых строки, у которых id больше второго сохраненного значения
  • при каждом пролистывании назад - вытаскиваете три последний строки, у которых id меньше первого сохраненного значения
1
0 / 0 / 0
Регистрация: 07.05.2022
Сообщений: 19
23.05.2022, 13:09  [ТС]
тут я кое-что раздобыл, короче, можно ли обойтись без столбца ID? с помощью rowid
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.05.2022, 15:23
Цитата Сообщение от Wylamins Посмотреть сообщение
с помощью rowid
В оракле что-то такое есть вроде, не уверен, но если я правильно помню что это такое, rowid не сильно поможет в вашей задаче.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
23.05.2022, 15:40
Wylamins, Jabbson, Усложняете, берем таблицу, вида:
Code
1
2
# PRODUCTS
INDEX | NAME | *
И таблица юзеров:
Code
1
2
# USERS
INDEX | USER ID | PAGE | *
Пользователь запрашивает список, формируем запросы:

1) Получаем текущую страницу пользователя:
SQL
1
SELECT "PAGE" FROM "USERS" WHERE "USER ID" == ?
Значение, уникальный идентификатор пользователя

2) Получаем список продуктов:
SQL
1
SELECT * FROM "PRODUCTS" ORDER BY "INDEX" ASC LIMIT ?, ?;
Первое значение страница умноженная на количество отображаемых записей
Второе значение количество отображаемых записей

Добавлено через 3 минуты
Пусть отображается по 5 записей, тогда логика будет такой:

1) Получаем текущую страницу из таблицы "USERS" (допустим 10)
2) Получаем записи отсортированные по индексу (можно пропустить этот момент)
с позиции 10 (текущая страница) * 5 (кол. отображаемых записей), в количестве 5 штук
3) В итоге получаем строки с 50 по 55
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.05.2022, 15:41
а PAGE - это что?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
23.05.2022, 15:43
Jabbson, ну если вы получаете по 5 записей каждый раз, то разделив общее количество записей на отображаемое, то получите грубо говоря страницы.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.05.2022, 15:43
а с удаляемыми и добавляемыми записями точно будет работать?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
23.05.2022, 15:53
Jabbson, будет сильное смещение содержимого страниц, если удалять предыдущие записи, но если надо избежать такого эффекта, можно запоминать минимальный индекс отображаемых записей, и немного изменить условие:

SQL
1
SELECT * FROM "PRODUCTS" ORDER BY "INDEX" ASC WHERE "INDEX" > ? LIMIT ?;
Следующие записи:
* первое значение: текущий индекс + количество отображаемых записей
* второе значение: количество отображаемых записей

Предыдущие записи:
* первое значение: текущий индекс - количество отображаемых записей
* второе значение: количество отображаемых записей

Добавлено через 1 минуту
P.S. возможно запросы не особо корректны (т.к. пишу по памяти), но логика надеюсь ясна.
1
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
23.05.2022, 15:56
Именно из-за этого и усложняем

Я предложил тоже самое, только сохранял и первый индекс и последний, просто чтобы не высчитывать их.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2022, 15:56
Помогаю со студенческими работами здесь

Перелистывание страниц
Как сделать такое: вот как на форуме здесь скажем:Страница 1 - примерно 50 тем,страница 2 - следующие 50 тем и т.д...Как можно...

Перелистывание страниц
Здравствуйте, нужно чтобы после вывода на экран, результат выводился по странично и по нажатию стрелок (<,>) можно было листать...

Перелистывание страниц
На главной страницы большая таблица. Как сделать перелистывание на след и пред страницы? чтобы это выглядело примерно так <1 2 3...7 8...

Перелистывание страниц
Всем привет! Реализовываю парсинг страницы. Суть, захожу на 1 страницу записываю ссылки в эксель всех компаний, потом захожу на...

Перелистывание страниц
https://www.cyberforum.ru/attachments/346320d1387798825 Задача такая. Есть два блока. div1 - означает номер страницы div2 -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru