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 += "\">&laquo;</a>";
26             t2 += "\">&raquo;</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         }