Piranha CMS 4.x Пользовательские блоки для публикации содержимого блога - PullRequest
0 голосов
/ 30 января 2019

Я уже некоторое время использую Piranha CMS 4.x (ядро 5.3.0).Довольно аккуратно.

Я пытаюсь создать «Пользовательский блок», в котором перечислены последние записи в блоге определенной страницы по слагу или идентификатору.Кому-нибудь удалось это сделать?

Я не продвинутый дотнет-игрок.

1 Ответ

0 голосов
/ 31 января 2019

Вы можете создать блок, использующий 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>
}

С уважением

...