Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2019, 11:16   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Динамическая нумерация (пагинация) страниц на сайте

Здравствуйте.
У меня есть небольшой код на C#, который формирует нумерацию страниц на сайте - ссылка на pastebin.
Проблема этого кода наглядно показана на скриншоте во вложении.
Мне нужны троеточия, или же динамическая пагинация - что бы она была в одну строку.
Помогите пожалста придумать правильный алгоритм.
Изображения
Тип файла: jpg Pagination.jpg (100.7 Кб, 120 просмотров)
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 08.04.2019, 11:50   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Мне нужны троеточия, или же динамическая пагинация - что бы она была в одну строку.
по сути Вам нужно менять этот цикл
Цитата:
Код:
    for (int i=1;i<=pagesCount;i++)
    {
        tmpClass="";
        if (i==pageNumber)
            tmpClass=" class=\"active\"";
        else {}
        paginationList+=string.Format(paginationTemplate,tmpClass,i.ToString());
    }
на что-то другое.

на что менять, зависит от того, что Вы хотите получить.
Ну, например, если у Вас 10 страниц - их все показывать? а если 20 - все?
и если страниц много (286, например), текущая (активная), допустим, 100, то что должно отображаться?
тут есть разные варианты.
и на разных сайтах это делают по разному.
на этом сайте это выглядит так
pagination1.png
на другом так:
pagination2.png
и есть ещё множество других вариантов.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.04.2019, 13:57   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
на что-то другое
Может не менять, а как-то модифицировать ?
В принципе то, первый вариант меня устраивает. Мне бы вообще что по проще, в плане реализации, что бы не городить огород =)
P. S. Сейчас у меня просто не хватает времени на продумывание алгоритма.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 08.04.2019, 14:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
P. S. Сейчас у меня просто не хватает времени на продумывание алгоритма.
так я вам не алгоритм предлагал обдумать, а то, что Вы хотите увидеть вместо своей простынки с номерами страниц.


Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Мне бы вообще что по проще, в плане реализации, что бы не городить огород =)
попроще, говорите...
ладно. вот попроще (замените цикл:
Цитата:
Код:
	for (int i=1;i<=pagesCount;i++)
	{
		tmpClass="";
		if (i==pageNumber)
			tmpClass=" class=\"active\"";
		else {}
		paginationList+=string.Format(paginationTemplate,tmpClass,i.ToString());
	}
на
Код:
	if(pagesCount<20){
		for (int i=1;i<=pagesCount;i++)
		{
			tmpClass="";
			if (i==pageNumber)
				tmpClass=" class=\"active\"";
			else {}
			paginationList+=string.Format(paginationTemplate,tmpClass,i.ToString());
		}
	}
	else{
			if(pageNumber>1){
				paginationList+=string.Format(paginationTemplate,"","1");
				paginationList+="&hellip;"
			}
			else {}
			paginationList+=string.Format(paginationTemplate," class=\"active\"",pageNumber.ToString());
			tmpClass=" class=\"active\"";
			if(pageNumber<pagesCount){
				paginationList+="&hellip;"
				paginationList+=string.Format(paginationTemplate,"",pagesCount.ToString());
			}
			else { }
		
	}
p.s. не проверял, разумеется.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.04.2019, 12:23   #5
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Вот что по итогу получилось:
Код:
private static string TemplateFunc(string templateStr, int number, int start, int end)
{
	string result="",tmpClass;
	for (int i=start;i<=end;i++)
	{
		tmpClass="";
		if (i==number)
			tmpClass=" class=\"active\"";
		else {}
		result+=string.Format(templateStr,tmpClass,i.ToString());
		tmpClass=null;
	}
	return result;
}

public static string GetPagination(string pageName, string filterStr, int pageNumber, int pagesCount)
{
	// { ... }
	string
		paginationTemplate="<li{0}><a href=\""+pageName+"?page={1}"+filterStr+"\">{1}</a></li>\r\n",
		threePoints="<li><a href=\""+pageName+"?page={0}"+filterStr+"\">...</a></li>\r\n",
		paginationList="",
		prevElem="",
		nextElem="";
	if (pagesCount<21)
		paginationList=TemplateFunc(paginationTemplate,pageNumber,1,pagesCount);
	else
	if (pageNumber<11)
		paginationList=TemplateFunc(paginationTemplate,pageNumber,1,20)+string.Format(threePoints,"21");
	else
	if (pageNumber>pagesCount-11)
		paginationList=string.Format(threePoints,(pagesCount-20).ToString())+TemplateFunc(paginationTemplate,pageNumber,pagesCount-19,pagesCount);
	else
		paginationList=
			string.Format(threePoints,(pageNumber-10).ToString())+
			TemplateFunc(paginationTemplate,pageNumber,pageNumber-9,pageNumber+10)+
			string.Format(threePoints,(pageNumber+11).ToString());
	// { ... }
	return paginationList;
}
Все циферки подгонял уже на месте.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 12.04.2019, 13:44   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Вот что по итогу получилось
ну, вполне себе нормально и аккуратно.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нумерация страниц ask40 Microsoft Office Access 1 26.11.2015 10:39
Нумерация страниц на сайте alimov7 Помощь студентам 4 26.09.2012 21:50
Нумерация страниц nikcpp Общие вопросы Delphi 1 06.04.2011 00:16
Нумерация страниц Golovastik Microsoft Office Word 9 05.06.2010 20:09
нумерация страниц chern Microsoft Office Word 3 10.05.2008 14:06