Персонализирайте изобразяването на списък за страниране

Опитвам се да внедря безкрайно превъртане в Orchard, като правя минимални промени.

Скриптът, който използвам, трябва перфектно да идентифицира с jquery селектор връзката към следващата страница на пейджъра.

Понастоящем стандартният пейджър за овощна градина се изобразява по следния начин:

<li><a href="/bg/OrchardLocal/ricette?page=2">&gt;</a></li>

желаното изобразяване е:

<li class="next"><a href="/bg/OrchardLocal/ricette?page=2">&gt;</a></li>

Опитах много начини да заменя шаблона Pager_Next, но без радост. Пейджърът е списък и списъкът се прави с код. Няма лесен начин за отмяна.

Страхотна статия, която трябва да обясни как да пропуснете някои основни части (като да замените целия списък например): http://weblogs.asp.net/bleroy/overriding-the-pager-rendering-in-orchard

В момента моето заобиколно решение беше да променя източника на Orchard CoreShapes.cs за рендиране на списък, като добавих тези два реда:

if (itemTag != null) {
  if (index == 0)
    itemTag.AddCssClass("first");
  if (index == count - 1)
    itemTag.AddCssClass("last");

  //new lines
  if (index == 1 && count > 2)
    itemTag.AddCssClass("previous");
  if (index == count - 2 && count > 2)
     itemTag.AddCssClass("next");

Засега работи, НО не ми харесва

1) Променя източника на овощна градина, това е лошо

2) Променя всички списъци (а не само пейджър)

И така, "Как мога да отменя списъка САМО за моята тема и САМО за пейджър по начин, по който клас се добавя автоматично към Page_Next li тага?"

Благодаря


person manudea    schedule 17.07.2014    source източник
comment
Да използвате jQuery, за да добавите тези класове към желаните от вас списъци?   -  person Hazza    schedule 17.07.2014


Отговори (2)


Опитайте нещо подобно във вашия Pager.Next.cshtml алтернативен изглед:

@using System.Web.Routing;
@{
    string text = Model.Value.ToString();
    string action = Model.RouteValues["action"].ToString();
    RouteValueDictionary routeValues = (RouteValueDictionary)Model.RouteValues;
}

<span><a class="next" href="/[email protected](action, routeValues)">@text</a></span>
person joshb    schedule 17.07.2014
comment
Напълно перфектно. Току-що премахнах span... всъщност не ми трябва :) Това, от което наистина се нуждая, беше начин да получа действителната връзка и вие да ми предоставите идеалното решение. Благодаря. - person manudea; 18.07.2014

Не съм сигурен дали отговорът от joshb е достатъчно близък за вашите нужди. Иначе бих казал почти същото.

Променете Pager.Next.cshtml и Pager.Previous.cshtml във вашата тема и просто добавете начин за идентифициране на връзката.

Използването на jQuery за добавяне на класа, от който се нуждаете, към родителя.

Това в никакъв случай не е елегантно решение, но ще постигне това, което искате, без да променяте ядрото и без да засягате други списъци.

Моят тест изглежда така, само за тестване и само за следващия, но схващате идеята.

(Не използвайте id очевидно, тъй като това ще ви даде дублиращи се id, това е само бърз и мръсен пример)

Pager.Next.cshtml :

@{
    var RouteValues = (object)Model.RouteValues;
    RouteValueDictionary rvd;
    if (RouteValues == null) {
        rvd = new RouteValueDictionary();
    }
    else {
        rvd = RouteValues is RouteValueDictionary ? (RouteValueDictionary)RouteValues : new RouteValueDictionary(RouteValues);
    }
}
<a id="pagination-pager-next" href="/[email protected]((string)rvd["action"], rvd)"><i class="fa fa-angle-right"></i></a>

И добавих това в края на Pager.cshtml, но може да имате по-добро място за това:

<script>
    $(document).ready(function () {
        $("#pagination-pager-next").parent().addClass("next");
    });
</script>
person Søren Ullidtz    schedule 17.07.2014
comment
Благодаря ти. Направих отговора на joshb като приет само защото той беше първият. Използването на jquery е хубаво, но добавя допълнителен слой сложност, който не ми трябва в този контекст. Наличието на клас на етикета a така или иначе свърши работа. Всичко най-хубаво. - person manudea; 18.07.2014