Discuzで見つけた良いページングアルゴリズム
14691 ワード
以前Discuzを研究していた时にこのアルゴリズムを発见して、自分では书けないと思って、记录して、今私が建てた駅のページはすべてこのコードです
1 /// <summary>
2 /// 1 2 3 4 5 6
3 /// </summary>
4 /// <param name="curPage"> </param>
5 /// <param name="countPage"> </param>
6 /// <param name="url"> (/ChildForum.aspx)</param>
7 /// <param name="extendPage"> (6)</param>
8 /// <param name="pagetag"> (pgid)</param>
9 /// <returns> html</returns>
10 public static string GetPageNumbers(int curPage, int countPage, string url, int extendPage, string pagetag)
11 {
12 if (pagetag == "")
13 pagetag = "page";
14 int startPage = 1;
15 int endPage = 1;
16
17 if (url.IndexOf("?") > 0)
18 url = url + "&";
19 else
20 url = url + "?";
21
22 string t1 = "<a href=\"" + url + "&" + pagetag + "=1";
23 string t2 = "<a href=\"" + url + "&" + pagetag + "=" + countPage;
24
25 t1 += "\">«</a>";
26 t2 += "\">»</a>";
27
28 if (countPage < 1)
29 countPage = 1;
30 if (extendPage < 3)
31 extendPage = 2;
32
33 if (countPage > extendPage)
34 {
35 if (curPage - (extendPage / 2) > 0)
36 {
37 if (curPage + (extendPage / 2) < countPage)
38 {
39 startPage = curPage - (extendPage / 2);
40 endPage = startPage + extendPage - 1;
41 }
42 else
43 {
44 endPage = countPage;
45 startPage = endPage - extendPage + 1;
46 t2 = "";
47 }
48 }
49 else
50 {
51 endPage = extendPage;
52 t1 = "";
53 }
54 }
55 else
56 {
57 startPage = 1;
58 endPage = countPage;
59 t1 = "";
60 t2 = "";
61 }
62
63 System.Text.StringBuilder s = new System.Text.StringBuilder("");
64
65 s.Append(t1);
66 for (int i = startPage; i <= endPage; i++)
67 {
68 if (i == curPage)
69 {
70 s.Append("<span>");
71 s.Append(i);
72 s.Append("</span>");
73 }
74 else
75 {
76 s.Append("<a href=\"");
77 s.Append(url);
78 s.Append(pagetag);
79 s.Append("=");
80 s.Append(i);
81 s.Append("\">");
82 s.Append(i);
83 s.Append("</a>");
84 }
85 }
86 s.Append(t2);
87
88 return s.ToString();
89 }