Вы можете создать блок, использующий PageField
, который позволит вам выбрать страницу в карте сайта.Учитывая ваш блок, пользователь должен выбрать ArchivePage
, и именно отсюда будут загружаться сообщения.Вы также можете добавить поле для указания количества отображаемых сообщений.
ArchiveBlock.cs
using System;
using Piranha;
using Piranha.Extend;
using Piranha.Extend.Fields;
using Piranha.Models;
namespace RazorWeb.Models.Blocks
{
[BlockType(Name = "Archive", Category = "Content", Icon = "fas fa-pause")]
public class ArchiveBlock : Block
{
public PageField ArchivePage { get; set; }
public NumberField NumPosts { get; set; }
public T GetArchive<T>(IApi api) where T : ArchivePage<T>
{
if (ArchivePage.HasValue)
{
return api.Archives.GetById<T>(ArchivePage.Id.Value, 1, null, null, NumPosts.Value.HasValue ? NumPosts.Value : 3);
}
return null;
}
}
}
ArchiveBlock.cshtml
@model RazorWeb.Models.Blocks.ArchiveBlock
<div class="form-group">
<label>Select Archive</label>
@Html.EditorFor(m => m.ArchivePage)
</div>
<div class="form-group">
<label>Set the maximum number of posts</label>
@Html.EditorFor(m => m.NumPosts)
</div>
А в DisplayTemplate в Интернете что-то вроде этого (изменить в соответствии с вашим макетом)
ArchiveBlock.cshtml
@model RazorWeb.Models.Blocks.ArchiveBlock
@{
var archive = Model.GetArchive<RazorWeb.Models.BlogArchive>(WebApp.Api);
}
@foreach (var post in archive.Archive.Posts)
{
<a href="@post.Permalink"><h1>@post.Title</h1></a>
}
С уважением