Add the ability to create blog pages and blog-posts.
This commit is contained in:
24
blueprints/pages/blog-post.yml
Normal file
24
blueprints/pages/blog-post.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
title: Blog Post
|
||||
|
||||
num: "{{ page.created.toDate('YmdHi') }}"
|
||||
|
||||
columns:
|
||||
- width: 2/3
|
||||
sections:
|
||||
content:
|
||||
type: fields
|
||||
fields:
|
||||
text:
|
||||
label: Content
|
||||
type: textarea
|
||||
autofocus: true
|
||||
size: large
|
||||
customExcerpt:
|
||||
label: Custom Excerpt
|
||||
type: textarea
|
||||
size: medium
|
||||
- width: 1/3
|
||||
sections:
|
||||
pinned: fields/pinned
|
||||
showOnHome: fields/show-on-home
|
||||
dates: fields/dates
|
||||
30
blueprints/pages/blog.yml
Normal file
30
blueprints/pages/blog.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
title: Blog
|
||||
|
||||
columns:
|
||||
- width: 2/3
|
||||
sections:
|
||||
drafts:
|
||||
type: pages
|
||||
status: draft
|
||||
templates: blog-post
|
||||
info: "{{ page.created.toDate('Y-m-d @ g:ia') }}"
|
||||
published:
|
||||
type: pages
|
||||
status: published
|
||||
info: "{{ page.created.toDate('Y-m-d @ g:ia') }}"
|
||||
- width: 1/3
|
||||
sections:
|
||||
options:
|
||||
type: fields
|
||||
fields:
|
||||
postsPerPage:
|
||||
label: Posts Per Page
|
||||
type: number
|
||||
default: 10
|
||||
|
||||
line:
|
||||
type: fields
|
||||
fields:
|
||||
line:
|
||||
type: line
|
||||
linkLocation: fields/link-location
|
||||
28
controllers/blog.php
Normal file
28
controllers/blog.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright 2026, Dreytac <dreytac@hobbyhome.net>
|
||||
*
|
||||
* This file is part of Kirby Blog.
|
||||
*
|
||||
* Kirby Blog is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
|
||||
*
|
||||
* Kirby Blog is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License along with Kirby Blog. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
return function ($page) {
|
||||
$posts = new Pages();
|
||||
|
||||
if ($user = kirby()->user() and $user->role()->isAdmin()) {
|
||||
$posts = $page->childrenAndDrafts();
|
||||
} else {
|
||||
$posts = $page->children();
|
||||
}
|
||||
|
||||
$posts = $posts->sortBy("pinned", SORT_DESC, "updated", SORT_DESC);
|
||||
|
||||
$posts = $posts->paginate($page->postsPerPage()->toInt());
|
||||
|
||||
return compact("posts");
|
||||
};
|
||||
11
index.php
11
index.php
@@ -14,6 +14,17 @@
|
||||
Kirby::plugin(
|
||||
name: "hobbyhome/blog",
|
||||
extends: [
|
||||
"blueprints" => [
|
||||
"pages/blog" => __DIR__ . "/blueprints/pages/blog.yml",
|
||||
"pages/blog-post" => __DIR__ . "/blueprints/pages/blog-post.yml",
|
||||
],
|
||||
"templates" => [
|
||||
"blog" => __DIR__ . "/templates/blog.php",
|
||||
"blog-post" => __DIR__ . "/templates/blog-post.php",
|
||||
],
|
||||
"controllers" => [
|
||||
"blog" => require __DIR__ . "/controllers/blog.php",
|
||||
],
|
||||
],
|
||||
info: [
|
||||
"authors" => [[
|
||||
|
||||
17
templates/blog-post.php
Normal file
17
templates/blog-post.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?= snippet("header") ?>
|
||||
|
||||
<?= snippet("page/title", ["showDate" => true]) ?>
|
||||
|
||||
<?= $page->text()->kirbytext() ?>
|
||||
|
||||
<hr class="mb-3">
|
||||
|
||||
<?php if (($user = $kirby->user()) and $user->role()->isAdmin()) : ?>
|
||||
<div class="clearfix mb-3">
|
||||
<div class="float-end">
|
||||
<a href="<?= $page->panel()->url() ?>" target="_blank"><?= kirbytag("fa", "edit") ?></a>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<?= snippet("footer") ?>
|
||||
21
templates/blog.php
Normal file
21
templates/blog.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?= snippet("header") ?>
|
||||
|
||||
<?= snippet("page/title") ?>
|
||||
|
||||
<?php if (count($posts)) : ?>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<?php foreach ($posts as $post) : ?>
|
||||
<?= snippet("collection/post", ["post" => $post]) ?>
|
||||
<?php endforeach ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="alert alert-info mb-3">
|
||||
No posts have been created yet!
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<?= snippet("page/pagination", ["pagination" => $posts->pagination()]) ?>
|
||||
|
||||
<?= snippet("footer") ?>
|
||||
Reference in New Issue
Block a user