一段时间以来,我一直在使用Piranha CMS 4.x(核心5.3.0)。很整齐。
我正在尝试创建一个“自定义阻止”,以按条目或ID列出特定页面的最新博客文章。有人成功做到了吗?
我不是高级dotnet播放器。
答案 0 :(得分:1)
您可以创建一个使用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>
}
最诚挚的问候