CMD:logs(playerid)
{
if(GetPVarType(playerid
, "pVar_с_кэшем") != PLAYER_VARTYPE_NONE || cache_is_valid
(Cache
:GetPVarInt(playerid
, "pVar_с_кэшем"))) cache_delete(Cache
:GetPVarInt(playerid
, "pVar_с_кэшем")); new Cache:result = mysql_query(MySQL:handle, "SELECT date FROM log GROUP BY date", true);
new rows;
cache_get_row_count(rows);
if(!rows)
{
return 1;
}
SetPVarInt(playerid
, "pVar_с_общим_количеством_найденных_строк", rows
); SetPVarInt(playerid
, "pVar_с_кэшем", _:cache_save
()); SomeFunc(playerid);
return 1;
}
stock SomeFunc(playerid)
{
if(GetPVarType(playerid
, "pVar_с_кэшем") == PLAYER_VARTYPE_NONE || !cache_is_valid
(Cache
:GetPVarInt(playerid
, "pVar_с_кэшем"))) return SendClientMessage(playerid
, 0xFF0000FF, "Внимание: {FFFFFF}При обработке ответа произошла ошибка. Повторите попытку!");
const MAX_ROW_IN_PAGE = 30;
new total_rows
= GetPVarInt(playerid
, "pVar_с_общим_количеством_найденных_строк"); new page
= GetPVarInt(playerid
, "pVar_с_номером_страницы")+1;
cache_set_active
(Cache
:GetPVarInt(playerid
, "pVar_с_кэшем"));
static
string[4096+1];
string[0] = '\0';
new i = page*MAX_ROW_IN_PAGE;// Определили начальную позицию
new max_iter;
if(total_rows > i+MAX_ROW_IN_PAGE)// Проверяем, охватывает ли наша текущая итерация все оставшиеся строки
{
format(string
, sizeof(string
), "%sНа следующую страницу\n", string
);//Если нет, то добавляем пункт для перехода на следующую страницу max_iter = i+MAX_ROW_IN_PAGE;// А так же высчитаем ID строки, до которой нужно выгрузить данные из кэша
}
else// А если данных в кэше недостаточно для того, чтоб заполнить список полностью (например, мы выгружаем по 30 строк на страницу, сейчас мы на второй странице и всего у нас 57 строк)
{
max_iter = total_rows;// То запишем в качестве ID последней строки общее число строк
}
if(page > 0)// Так же проверяем, какая страница открыта у игрока и если она не самая первая, то
{
format(string
, sizeof(string
), "%sНа предыдущую страницу\n", string
);//Добавляем пункт для перехода на предыдущую страницу }
/*
Ну а тут уже формируем наш диалог, выгружая данные согласно высчитанным значениям
*/
new date[/*тут нужный размер для выгрузки одной даты*/];
for(; i < max_iter; i++)
{
cache_get_value_name(i, date, "date");
format(string
, sizeof(string
), "%s%s\n", string
, date
); }
ShowPlayerDialog(playerid
, диалог
, DIALOG_STYLE_LIST, "Выберите дату", string
, "Выбрать", "Закрыть"); }
case диалог:
{
if(!response)
{
// Функция с отчисткой всех данных, в которой ты удалишь как pVar, так и кэш
return 1;
}
else
{
if(strfind(inputtext
, "следующую") != -1) {
SomeFunc(playerid)
}
else if(strfind(inputtext
, "предыдущую") != -1) {
SomeFunc(playerid)
}
else// Игрок выбрал одну из дат
{
// Функция с отчисткой всех данных, в которой ты удалишь как pVar, так и кэш
//format(query_string, sizeof(query_string), "SELECT столбцы FROM log WHERE date = '%s'", inputtext); - сам запрос на выгрузку информации
}
}
return 1;
}