Piranha CMS 4.x自定义块,用于列出博客内容

时间:2019-01-30 01:59:19

标签: asp.net .net content-management-system piranha-cms

一段时间以来,我一直在使用Piranha CMS 4.x(核心5.3.0)。很整齐。

我正在尝试创建一个“自定义阻止”,以按条目或ID列出特定页面的最新博客文章。有人成功做到了吗?

我不是高级dotnet播放器。

1 个答案:

答案 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>
}

最诚挚的问候