Skip to content

Instantly share code, notes, and snippets.

@marciogoularte
Created October 20, 2017 20:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marciogoularte/a4408b7b79c681dcbe7bf6fadc9f2fbf to your computer and use it in GitHub Desktop.
Save marciogoularte/a4408b7b79c681dcbe7bf6fadc9f2fbf to your computer and use it in GitHub Desktop.
Pagination Umbraco
@model OurUmbraco.ViewModels.Pager
@{
var IsBreak = false;
var querystring = Model.QueryString;
}
@if (Model.TotalPages > 1)
{
<div class="pagination">
@if (Model.CurrentPage > 1)
{
querystring.Set("p", (Model.CurrentPage - 1).ToString());
<a class="prev page-numbers" href="?@querystring.ToString()"><i class="fa fa-angle-left"></i>Anterior</a>
}
@for (int p = 1; p < Model.TotalPages + 1; p++)
{
querystring.Set("p", p.ToString());
var linkClass = (p == Model.CurrentPage) ? "" : "current";
if (p == Model.CurrentPage)
{
<a class="page-numbers @Html.Raw(linkClass)" href="?@querystring.ToString()">@p</a>
IsBreak = false;
}
else
{
if (p == 1
|| p == Model.CurrentPage - 1
|| p == Model.CurrentPage + 1
|| p == Model.TotalPages - 1
|| p == Model.TotalPages)
{
querystring.Set("p", p.ToString());
<a class="page-numbers @Html.Raw(linkClass)" href="?@querystring.ToString()">@p</a>
IsBreak = false;
}
else
{
if (IsBreak)
{
continue;
}
else
{
<a class="page-numbers dots" href="#">...</a>
IsBreak = true;
}
}
}
}
@if (Model.CurrentPage < Model.TotalPages)
{
querystring.Set("p", (Model.CurrentPage + 1).ToString());
<a class="next page-numbers" href="?@querystring.ToString()">Próximo<i class="fa fa-angle-right"></i></a>
}
</div>
}
using System.Collections.Specialized;
namespace OurUmbraco.ViewModels
{
public class Pager
{
public string Next { get; set; }
public string Previous { get; set; }
public int TotalPages { get; set; }
public int CurrentPage { get; set; }
public int PageSize { get; set; }
public int Total { get; set; }
public NameValueCollection QueryString { get; set; }
}
}
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@using OurUmbraco.ViewsModels
@{
Layout = "Layout.cshtml";
IEnumerable<IPublishedContent> items;
var pager = new Pager();
pager.PageSize = 10;
int page;
//get querystring parameter page and filters
pager.QueryString = HttpUtility.ParseQueryString(Request.QueryString.ToString());
if (!int.TryParse(Request.QueryString["p"], out page))
{
pager.CurrentPage = 1;
}
pager.CurrentPage = page;
items = Model.Content.DescendantsOrSelf("docType").Where(x => x.IsVisible()).OrderByDescending(x => x.CreateDate);
pager.Total = items.Count();
items = items.Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize).ToList();
pager.TotalPages = (int)Math.Ceiling((double)pager.Total / (double)pager.PageSize);
if (pager.CurrentPage > pager.TotalPages)
{
pager.CurrentPage = pager.TotalPages;
}
else if (pager.CurrentPage < 1)
{
pager.CurrentPage = 1;
}
}
@foreach (var item in items)
{
//HTML Markup
}
@Html.Partial("_Pager", pager)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment