-
Недавно мне захотелось сделать сайт статическим, поэтому я сам написал несколько методов и выложил их для обсуждения со всеми.
/// <сводка>
/// Класс статической функции веб-сайта
/// </сводка>
публичный класс CreateHtml
{
/// <сводка>
/// Чтение содержимого шаблона
/// </сводка>
/// <param name="template">Относительный путь к шаблону</param>
/// <returns>Содержимое шаблона, ошибка чтения возвращает ""</returns>
общедоступная строка Html_ReadTemplate (шаблон строки)
{
#область
StringBuilder str = new StringBuilder();//Содержимое шаблона хранения
if (шаблон != null && template != "" && template.Length > 0)//if
{
пытаться
{
используя (StreamReader sr = новый StreamReader(System.Web.HttpContext.Current.Server.MapPath(шаблон), Encoding.GetEncoding("utf-8")))
{
строка tempStr;
while ((tempStr = sr.ReadLine()) != null)//Если конец файла не прочитан
{
стр.Append(tempStr);
}
ср.Закрыть();
}
}
поймать (Исключение ex)
{
вернуть ноль;
}
}
вернуть стр.ToString();
#конечныйрегион
}
/// <сводка>
/// Генерируем файлы на основе абсолютного пути и имени сгенерированного файла
/// </сводка>
/// <param name="fileAbsolutePath">Абсолютный путь к файлу</param>
/// <param name="htmlName">Сгенерировать имя файла</param>
/// <param name="htmlNote">Записать содержимое файла</param>
/// <returns>Сгенерировать статус файла, 1: успех 0: сбой</returns>
public int Html_WriteTemplate (строка fileAbsolutePath, строка htmlName, строка htmlNote)
{
#область
if (fileAbsolutePath != null && fileAbsolutePath != "" && fileAbsolutePath.Length > 0 && htmlName != null && htmlName != "" && htmlName.Length > 0)
{
пытаться
{
используя (FileStream fs = новый FileStream(fileAbsolutePath + "\" + htmlName, FileMode.Create, FileAccess.Write, FileShare.Write))
{
StreamWriter sw = новый StreamWriter(fs, System.Text.Encoding.GetEncoding("utf-8"));
sw.Write(htmlNote);
SW.Закрыть();
фс.Закрыть();
return 1;//Файл сгенерирован успешно
}
}
поймать (Исключение ex)
{
вернуть 0;
}
}
return 0;//Создание файла не удалось
#конечныйрегион
}
/// <сводка>
/// Читать по страницам в соответствии со всем прочитанным содержимым и отделять каждую страницу знаком "|"
/// </сводка>
/// <param name="contentText">Содержимое</param>
/// <param name="pageLogo">Логотип пейджинга</param>
/// <returns>Строка после разбивки содержимого на страницы, каждая страница разделяется знаком "|"</returns>
общедоступная строка Html_BackPageData (строка contentText, строка pageLogo)
{
#область
интервал темпа = 0;
StringBuilder sb = новый StringBuilder();
пока (tempcount >= 0)
{
int index = contentText.IndexOf(pageLogo);//Логотип страницы
if (index == -1)//Если нет пейджинга
{
sb.Append(contentText);
перерыв;
}
еще
{
sb.Append(contentText.Substring(0,index)+"|");
int start = index + pageLogo.Length + 1;
int end = contentText.Length-index-pageLogo.Length - 1;
contentText=contentText.Substring(начало, конец);
}
темпсчет++;
}
вернуть sb.ToString();
#конечныйрегион
}
/// <сводка>
/// Генерируем соответствующие флаги пейджинга для контента, домашней страницы, предыдущей страницы, номера страницы, следующей страницы, последней страницы (для части контента)
/// </сводка>
/// <param name="currPageIndex">Индекс текущей страницы</param>
/// <param name="pageCount">Общее количество страниц</param>
/// <param name="noteName">Имя файла (только имя файла без суффикса)</param>
/// <returns>Соответствующий флаг подкачки, сгенерированный на основе содержимого</returns>
общедоступная строка Html_Pager_Sign (int currPageIndex, int pageCount, строка noteName)
{
#область
string allSeprNote = "<table><tr><td> $firstpage$</td><td> $uppage$</td><td> $pagenumber$</ td><td> $droppage$</td><td> $lastpage$</td></tr></table>";
строка seprTempStr = "";
for (int i = 1; i <= pageCount; i++)//Цикл для генерации номеров страниц для каждой страницы (этот цикл генерирует только номера страниц)
{
интервал n = я - 1;
//Если это первая страница
если (я == 1)
{
seprTempStr += "<a href="" + noteName + ".html'>" + i+" "+ "</a>";
}
еще
{
seprTempStr += "<a href="" + noteName +"-"+n+ ".html'>" + i+" " + "</a>";
}
}
allSeprNote = allSeprNote.Replace("$pagenumber$", seprTempStr);//Заменяем номер страницы
//Создаем домашнюю страницу и предыдущую страницу
if (currPageIndex == 0)//Если текущая страница является первой, ссылки на предыдущую или домашнюю страницу не будет.
{
allSeprNote = allSeprNote.Replace("$firstpage$", "Homepage");//Заменить домашнюю страницу
allSeprNote = allSeprNote.Replace("$uppage$", "предыдущая страница");//Заменить предыдущую страницу
}
else if (currPageIndex == 1)//Если текущая страница является второй, то есть ссылки на предыдущую и домашнюю страницы, а ссылки на предыдущую и домашнюю страницы одинаковы, то есть функции те же
{
allSeprNote = allSeprNote.Replace("$firstpage$", "<a href='" + noteName + ".html'>Домашняя страница</a>");//Заменяем домашнюю страницу ссылками
allSeprNote = allSeprNote.Replace("$uppage$", "<a href='" + noteName + ".html'>Предыдущая страница</a>");//Заменить предыдущую страницу, поскольку это вторая страница. Ссылка такая же, как домашняя страница
}
else//если это другая страница
{
int temppageindex = currPageIndex - 1 //Номер предыдущей страницы;
allSeprNote = allSeprNote.Replace("$firstpage$", "<a href='" + noteName + ".html'>Homepage</a>");//Заменить домашнюю страницу
allSeprNote = allSeprNote.Replace("$uppage$", "<a href='" + noteName +"-"+temppageindex+ ".html'>Предыдущая страница</a>");//Заменить предыдущую страницу
}
//Сгенерируем последнюю и следующую страницы
if (currPageIndex == pageCount - 1)//Если текущая страница является последней, следующая и последняя страницы имеют одинаковые функции и не имеют ссылок.
{
allSeprNote = allSeprNote.Replace("$lastpage$", "последняя страница");//Заменить последнюю страницу
allSeprNote = allSeprNote.Replace("$droppage$", "следующая страница");//Заменить следующую страницу
}
else//если это другая страница
{
int temppageindex = currPageIndex+1;//номер следующей страницы
allSeprNote=allSeprNote.Replace("$lastpage$", "<a href='" + noteName + "-" + (pageCount - 1) + ".html'>Последняя страница</a>");//Сгенерировать хвост Страница
allSeprNote=allSeprNote.Replace("$drownpage$", "<a href='" + noteName + "-" + temppageindex + ".html'>Следующая страница</a>");
}
вернуть allSeprNote;
#конечныйрегион
}
/// <сводка>
/// Генерируем флаги подкачки для страниц списка
/// </сводка>
/// <param name="pageTotal">Общее количество страниц</param>
/// <param name="currentPage">Индекс текущей страницы (начиная с нуля)</param>
/// <param name="pageSize">Количество элементов контента, отображаемых на каждой странице</param>
/// <param name="name">Имя файла (без суффикса)</param>
/// <returns>Флаг пейджинга</returns>
общедоступная строка Html_Pager_Multi (int pageTotal, int currentPage, int pageSize, имя строки, путь к строке)
{
#область
pageTotal = pageTotal - 1;
StringBuilder sb = новый StringBuilder();
//Создаем ссылки на домашнюю и предыдущую страницы
if (currentPage == 0)//Если текущая страница является первой страницей
{
sb.Append(" Главная страница Предыдущая страница ");
}
else if (currentPage == 1)//Если текущая страница является второй страницей
{
sb.Append(" <a href="" + name + ".html" + "'>Домашняя страница</a>");
sb.Append(" <a href="" + name + ".html" + "'>Предыдущая страница</a> ");
}
еще
{
sb.Append(" <a href="" + name + ".html" + "'>Домашняя страница</a>");
sb.Append(" <a href="" + name + "-" + (currentPage - 1) + ".html'>Предыдущая страница</a> ");
}
int indexStart = текущая страница - 5;
int indexEnd = текущая страница + 5;
если (индексСтарт <= 0)
{
индексСтарт = 0;
индексКонец = 10;
}
если (индексСтарт > 0)
{
indexStart = текущая страница - 5;
indexEnd = текущая страница + 5;
}
если (текущая страница >= pageTotal-10)
{
indexStart = pageTotal - 10;
indexEnd = pageTotal;
}
//Сгенерируем подробные номера страниц
for (int i = indexStart; я <= indexEnd; i++)
{
если (я == текущая страница)
{
sb.Append(" " + (i+1) + " ");
}
else if (i == 0)//Если текущая страница является второй, ее нужно обрабатывать отдельно
{
sb.Append(" <a href='" + name + ".html'>" + (i + 1) + "</a> ");
}
еще
{
sb.Append(" <a href='" + name + "-" + i + ".html'>" + (i + 1) + "</a> ");
}
}
//Создаем следующую и последнюю страницы
if (currentPage == pageTotal)//Если текущая страница является последней страницей
{
sb.Append(" Следующая страница ");
sb.Append(" Последняя страница ");
}
еще
{
sb.Append(" <a href=""+name+"-"+(currentPage+1)+".html'>Следующая страница</a> ");
sb.Append(" <a href=""+name+"-"+pageTotal+".html'>Последняя страница</a>");
}
sb.Append(" " + (currentPage + 1) + "/" + (pageTotal + 1));
sb.Append(" Перейти к:<select name="qq" id="ddlIndexList" onchange="javascript:location.href=this.value;">" );
строка AbsolutePaths = HttpContext.Current.Request.Url.ToString();//Получить URL
AbsolutePaths = AbsolutePaths.Substring(0, AbsolutePaths.LastIndexOf("/"))+"\" + путь; //Получить URL-адрес корневого пути веб-сайта
for (int j = 1; j <= (pageTotal+1); j++)
{
если (j == 1)
{
sb.Append("<option value='" + AbsolutePaths+" \"+name + ".html'>" + j + "</option>");
}
еще
{
sb.Append("<option value='" + AbsolutePaths+" \"+name + "-" + (j - 1) + ".html'>" + j + "</option>");
}
}
sb.Append("</select>");
sb.Append("<script type="text/javascript" Language="javascript">");
if (currentPage == 0)//Первая страница
{
string d = "document.getElementById("ddlIndexList").value = "" + name + ".html";";
sb.Append("document.getElementById("ddlIndexList").value = ""+name+".html";");
}
еще
{
string k = " document.getElementById("ddlIndexList").value = "" + name + "-" + currentPage + ".html";";
sb.Append(" document.getElementById("ddlIndexList").value = "" + name+"-"+currentPage + ".html";");
}
sb.Append("</script>");
вернуть sb.ToString();
#конечныйрегион