using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WeiSha.Common;
using Song.ServiceInterfaces;
using VTemplate.Engine;
namespace Song.Site.Mobile
{
///
/// 试题练习的分页导航
///
public class QuesPager : BasePage
{
//章节id,课程id
protected int olid = WeiSha.Common.Request.QueryString["olid"].Int32 ?? 0;
protected int couid = WeiSha.Common.Request.QueryString["couid"].Int32 ?? 0;
//每页多少条
int pagerSize = WeiSha.Common.Request.QueryString["size"].Int32 ?? 100;
//不分页的最大值,例如小于200时不分页
int noPager = WeiSha.Common.Request.QueryString["onpager"].Int32 ?? 200;
//要跳转的页
string url = WeiSha.Common.Request.QueryString["url"].String;
protected override void InitPageTemplate(HttpContext context)
{
if (!Extend.LoginState.Accounts.IsLogin)
this.Response.Redirect("login.ashx");
this.Document.SetValue("url", url);
this.Document.SetValue("couid", couid);
//当前章节
Song.Entities.Outline outline = Business.Do().OutlineSingle(olid);
this.Document.SetValue("outline", outline);
if (outline != null) couid = outline.Cou_ID;
//当前课程
Song.Entities.Course course = Business.Do().CourseSingle(couid);
if (course == null) return;
this.Document.SetValue("course", course);
//是否购买该课程
Song.Entities.Course couBuy = Business.Do().IsBuyCourse(couid, Extend.LoginState.Accounts.CurrentUser.Ac_ID, 1);
bool isBuy = couBuy != null;
//是否购买,如果免费也算已经购买
this.Document.SetValue("isBuy", isBuy || course.Cou_IsFree);
if (couBuy == null) couBuy = course;
this.Document.SetValue("couBuy", couBuy);
int sumCount = isBuy || course.Cou_IsFree ? Business.Do().QuesOfCount(-1, -1, couid, olid, -1, true) : course.Cou_TryNum;
this.Document.SetValue("sumCount", sumCount);
//分页计算
List list = TrainingPager_Item.Pager(sumCount, pagerSize, noPager);
if (list.Count <= 1)
{
this.Response.Redirect(string.Format(url + "?olid={0}&couid={1}&size={2}", olid, couid, list.Last().Size));
}
this.Document.SetValue("list", list);
this.Document.SetValue("size", pagerSize);
}
}
///
/// 分页项
///
public class TrainingPager_Item
{
public int Start { get; set; } //当前项的起始索引
public int End { get; set; } //当前项的末尾索引
public int Size { get; set; } //当前项取多少记录
public int Index { get; set; } //当前页码
public int Sumcount { get; set; } //总记录数
///
/// 实现分页
///
/// 用于分页的总记录数
/// 每页多少条
/// 多少条以内,不用分页,例如size为100,但是nopager设置200以后就不必分页了,都算一页
///
public static List Pager(int sumcount, int size, int nopager)
{
List list = new List();
//1.如果总计录数小于不要求页的数值,不需要分页
//2.如果总记录数,小于或等于分页数的1.5倍,则不分页
if (sumcount <= nopager || sumcount <= size * 1.5)
{
list.Add(new TrainingPager_Item()
{
Start = 1,
End = sumcount,
Size = sumcount,
Index=1,
Sumcount=sumcount
});
return list;
}
//如果需要分页
//总页数
int sumPager = sumcount % size == 0 ? sumcount / size : sumcount / size + 1;
for (int i = 0; i < sumPager; i++)
{
list.Add(new TrainingPager_Item()
{
Start = i * size + 1,
End = (i+1) * size,
Size = size,
Sumcount = sumcount
});
}
//如果最后一页题量较少,合并到前一个内容去
if (sumPager > 2 && (sumcount % size != 0 && sumcount % size < size / 2))
{
list.RemoveAt(list.Count - 1);
list.Last().End = list.Last().End + sumcount % size;
list.Last().Size = size + sumcount % size;
}
return list;
}
}
}