BlockListContext
En BlockListContext er et objekt som indeholder den aktuelle BlockList, det aktuelle BlockListItem, dets indeks, om det er den første eller sidste block, samt en reference til den foregående og næste block i listen.
Disse oplysninger kan bruges til at fx at lave en anden styling, hvis en block er den første i listen, hvis den kommer efter en bestemt type block eller lignende.
Sæt BlockListContext i blocklist renderingen
Sektion kaldt “Sæt BlockListContext i blocklist renderingen”For at bruge BlockListContext, skal den først sættes, der hvor selve block listen renderes. Det er typisk i /Views/Partials/blocklist/default.cshtml. Ecreo.Essentials er et razor class library og indeholder en standard til denne, som bruges hvis løsningen ikke selv har det view.
@using Ecreo.Essentials.Extensions@using Umbraco.Cms.Core.Models.Blocks@using Umbraco.Cms.Web.Common.Views@addTagHelper *, Ecreo.Essentials@inherits UmbracoViewPage<BlockListModel>@if (Model?.Any() != true) { return; }@{ var blocks = Model.Where(x => x?.ContentUdi != null).ToList();}@foreach (var block in blocks){ ViewData.SetBlockListContext(block, blocks); <ec-partial name="blocklist/Components/@block.Content.ContentType.Alias" model="block"></ec-partial>}Før hver rendering af en block, sættes blocklistcontexten via ViewData.SetBlockListContext(block, blocks). Første parameter er den aktuelle block, andet parameter er selve blocklisten. Herfra genereres BlockListContext’en, så den indeholder:
- List - selve block listen (IEnumerable
) - Item - den aktuelle block, kan være null (BlockListItem?)
- Index - indexet for den aktuelle block, starter fra nummer 0 (int)
- IsFirst - om den aktuelle block er den første i listen (bool)
- IsLast - om den aktuelle block er den sidste i listen (bool)
- Previous - den foregående block, kan være null (BlockListItem?)
- Next - den efterfølgende block, kan være null (BlockListItem?)
Brug BlockListContext i et block view
Sektion kaldt “Brug BlockListContext i et block view”I det enkelte block view, kan BlockListContexten så bruges. Herunder er et eksempel:
@inherits UmbracoViewPage<BlockListItem<ContentModels.HtmlSnippetBlock>>@{ var context = ViewData.GetBlockListContext();}
<hr />
<p>Index: @context?.Index - @(context?.IsFirst is true ? "first" : "not first"), @(context?.IsLast is true ? "last" : "not last")</p><p>This block is @context?.Current?.Content.ContentType.Alias (@context?.Current?.ContentUdi)</p><p>Previous block is @context?.Previous?.Content.ContentType.Alias (@context?.Previous?.ContentUdi)</p><p>Next block is @context?.Next?.Content.ContentType.Alias (@context?.Next?.ContentUdi)</p>
<hr />Det giver følgende output:
<hr />
<p>Index: 1 - not first, not last</p><p>This block is textBlock (umb://element/00000000-0000-0000-0000-000000000002)</p><p>Previous block is imageBlock (umb://element/00000000-0000-0000-0000-000000000001)</p><p>Next block is ctaBlock (umb://element/00000000-0000-0000-0000-000000000003)</p>
<hr />Hvis blocken er den første, er IsFirst true og Previous er null. Hvis den er den sidste, er IsLast true og Next er null.
Model kan selvfølgelig bruges i stedet for context.Current.