aboutsummaryrefslogtreecommitdiffstats
path: root/theme/default
diff options
context:
space:
mode:
authorThomas Lange <code@nerdmind.de>2021-07-01 20:11:34 +0200
committerThomas Lange <code@nerdmind.de>2021-07-01 20:11:34 +0200
commite6cef37e0c782fe770db20888d99c17d10e2c479 (patch)
treeaed0790a0fa8eb7cceef7bb32aef4f69b724d619 /theme/default
parentf0ea19767d502ec7b5afff7c66c2681292175a3b (diff)
downloadblog-e6cef37e0c782fe770db20888d99c17d10e2c479.tar.gz
blog-e6cef37e0c782fe770db20888d99c17d10e2c479.tar.xz
blog-e6cef37e0c782fe770db20888d99c17d10e2c479.zip
Add category system to categorize posts (readme)
This commit implements a new category system to categorize posts. Each category can have an unlimited number of nested children categories. A single post don't necessarily need to be in a category, but it can. Each category can have a full content body like posts or pages, so you have enough space to describe the content of your categories. Please note that you need to have at least the following MySQL/MariaDB versions to use the category system, because it uses "WITH RECURSIVE" database queries, the so-called "Common-Table-Expressions (CTE)". MariaDB: 10.2.2 MySQL: 8.0 See: https://mariadb.com/kb/en/with/ See: https://dev.mysql.com/doc/refman/8.0/en/with.html
Diffstat (limited to 'theme/default')
-rw-r--r--theme/default/html/category/item.php27
-rw-r--r--theme/default/html/category/list.php23
-rw-r--r--theme/default/html/category/main.php44
-rw-r--r--theme/default/html/main.php5
-rw-r--r--theme/default/html/post/main.php8
-rw-r--r--theme/default/rsrc/css/main.css48
-rw-r--r--theme/default/rsrc/css/main.scss50
7 files changed, 203 insertions, 2 deletions
diff --git a/theme/default/html/category/item.php b/theme/default/html/category/item.php
new file mode 100644
index 0000000..9435581
--- /dev/null
+++ b/theme/default/html/category/item.php
@@ -0,0 +1,27 @@
+<?php
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+# Category Item Template [Thomas Lange <code@nerdmind.de>] #
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+# #
+# [see documentation] #
+# #
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+?>
+<article class="item">
+ <header>
+ <h2 class="fa fa-tag">
+ <a title="<?=$Language->text('select_category')?>: »<?=escapeHTML($CATEGORY['ATTR']['NAME'])?>«" href="<?=$CATEGORY['URL']?>">
+ <?=escapeHTML($CATEGORY['ATTR']['NAME'])?>
+ </a>
+ </h2>
+ <span class="brackets info">
+ <?=$Language->text('posts')?>: <?=$COUNT['POST']?> –
+ <?=$Language->text('categories')?>: <?=$COUNT['CHILDREN']?>
+ </span>
+ </header>
+ <?php if($IS_ROOT): ?>
+ <blockquote cite="<?=$CATEGORY['URL']?>">
+ <?=$CATEGORY['BODY']['HTML']()?>
+ </blockquote>
+ <?php endif ?>
+</article>
diff --git a/theme/default/html/category/list.php b/theme/default/html/category/list.php
new file mode 100644
index 0000000..9fffb2b
--- /dev/null
+++ b/theme/default/html/category/list.php
@@ -0,0 +1,23 @@
+<?php
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+# Category List Template [Thomas Lange <code@nerdmind.de>] #
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+# #
+# [see documentation] #
+# #
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+?>
+<h1><i class="fa fa-tags"></i><?=$Language->text('category_overview')?></h1>
+<p><?=$Language->text('category_list_title', $PAGINATION['THIS'])?></p>
+
+<?php if($LIST['CATEGORIES']): ?>
+ <div class="item-container category">
+ <?php foreach($LIST['CATEGORIES'] as $category): ?>
+ <?php echo $category; ?>
+ <?php endforeach; ?>
+ </div>
+<?php else: ?>
+ <p><?=$Language->text('category_list_empty')?></p>
+<?php endif ?>
+
+<?=$PAGINATION['HTML']?>
diff --git a/theme/default/html/category/main.php b/theme/default/html/category/main.php
new file mode 100644
index 0000000..86b50e0
--- /dev/null
+++ b/theme/default/html/category/main.php
@@ -0,0 +1,44 @@
+<?php
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+# Category Main Template [Thomas Lange <code@nerdmind.de>] #
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+# #
+# [see documentation] #
+# #
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+?>
+<h1 id="category-heading"><i class="fa fa-tag"></i><?=escapeHTML($CATEGORY['ATTR']['NAME'])?></h1>
+<?php if($CATEGORIES && array_pop($CATEGORIES)): ?>
+ <ul class="category-heading-list">
+ <?php foreach($CATEGORIES as $category): ?>
+ <li><a href="<?=$category['URL']?>"><?=escapeHTML($category['ATTR']['NAME'])?></a></li>
+ <?php endforeach ?>
+ </ul>
+<?php endif ?>
+
+<div id="category-body">
+ <?=$CATEGORY['BODY']['HTML']()?>
+</div>
+
+<?php if(!empty($LIST['CATEGORIES'])): ?>
+ <div class="item-container category">
+ <?php foreach($LIST['CATEGORIES'] as $category): ?>
+ <?php echo $category; ?>
+ <?php endforeach; ?>
+ </div>
+<?php endif ?>
+
+<h2 id="category-posts-heading"><i class="fa fa-newspaper-o"></i><?=$Language->text('posts')?></h2>
+<div id="category-posts-page"><?=$Language->text('category_posts_page', $PAGINATION['THIS'])?></div>
+<?php if($LIST['POSTS']): ?>
+ <div class="item-container post">
+ <?php foreach($LIST['POSTS'] as $post): ?>
+ <?php echo $post; ?>
+ <?php endforeach; ?>
+ </div>
+ <?=$PAGINATION['HTML']?>
+<?php else: ?>
+ <div class="item-container post">
+ <?=$Language->text('category_empty')?>
+ </div>
+<?php endif ?>
diff --git a/theme/default/html/main.php b/theme/default/html/main.php
index e84618b..5a067ef 100644
--- a/theme/default/html/main.php
+++ b/theme/default/html/main.php
@@ -74,6 +74,11 @@ $BLOGMETA_DESC = escapeHTML($BLOGMETA['DESC']);
</a>
</li>
<li>
+ <a href="<?=Application::getCategoryURL()?>" title="<?=$Language->text('category_overview')?>">
+ <i class="fa fa-tags"></i><?=$Language->text('categories')?>
+ </a>
+ </li>
+ <li>
<a href="<?=Application::getPageURL()?>" title="<?=$Language->text('page_overview')?>">
<i class="fa fa-file-text-o"></i><?=$Language->text('pages')?>
</a>
diff --git a/theme/default/html/post/main.php b/theme/default/html/post/main.php
index 4b84ed9..328a614 100644
--- a/theme/default/html/post/main.php
+++ b/theme/default/html/post/main.php
@@ -17,6 +17,14 @@ $time = "<time datetime=\"{$POST['ATTR']['TIME_INSERT']}\" title=\"".parseDateti
<?=$POST['BODY']['HTML']()?>
</div>
+<?php if($CATEGORIES): ?>
+ <ul class="category-list fa fa-tag">
+ <?php foreach($CATEGORIES as $category): ?>
+ <li><a href="<?=$category['URL']?>"><?=escapeHTML($category['ATTR']['NAME'])?></a></li>
+ <?php endforeach ?>
+ </ul>
+<?php endif ?>
+
<section id="site-navi">
<?php if($POST['PREV']): ?>
diff --git a/theme/default/rsrc/css/main.css b/theme/default/rsrc/css/main.css
index 11cae12..e49412b 100644
--- a/theme/default/rsrc/css/main.css
+++ b/theme/default/rsrc/css/main.css
@@ -281,9 +281,11 @@ a.brackets:before, a.brackets:after {
overflow: hidden;
margin: 0.5rem 0;
}
+.item-container {
+ clear: both;
+}
.item header {
padding: 0.25rem 1rem;
- border-bottom: 0.05rem solid #AAA;
overflow: hidden;
text-transform: uppercase;
}
@@ -303,6 +305,7 @@ a.brackets:before, a.brackets:after {
margin: 0;
padding: 0 1rem;
font-family: inherit;
+ border-top: 0.05rem solid #AAA;
}
.item blockquote img {
display: block;
@@ -322,6 +325,49 @@ a.brackets:before, a.brackets:after {
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+# Category list
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+#category-heading,
+#category-posts-heading {
+ float: left;
+}
+
+#category-posts-page {
+ float: right;
+ font-size: 0.6rem;
+}
+
+#category-body {
+ clear: both;
+}
+
+.category-list,
+.category-heading-list {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ font-size: 0.6rem;
+ text-align: center;
+}
+.category-list li,
+.category-heading-list li {
+ display: inline-block;
+}
+.category-list li + li:before,
+.category-heading-list li + li:before {
+ content: " ➜ ";
+}
+.category-list a,
+.category-heading-list a {
+ text-decoration: underline;
+}
+
+.category-heading-list {
+ text-align: left;
+ float: right;
+}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Responsive
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#toogle-nav {
diff --git a/theme/default/rsrc/css/main.scss b/theme/default/rsrc/css/main.scss
index ba6e823..4ea6a2b 100644
--- a/theme/default/rsrc/css/main.scss
+++ b/theme/default/rsrc/css/main.scss
@@ -303,9 +303,12 @@ a.brackets:before, a.brackets:after {
overflow: hidden;
margin: 0.5rem 0;
+ &-container {
+ clear: both;
+ }
+
header {
padding: 0.25rem 1rem;
- border-bottom: 0.05rem solid #AAA;
overflow: hidden;
text-transform: uppercase;
@@ -329,6 +332,7 @@ a.brackets:before, a.brackets:after {
margin: 0;
padding: 0 1rem;
font-family: inherit;
+ border-top: 0.05rem solid #AAA;
img {
display: block;
@@ -351,6 +355,50 @@ a.brackets:before, a.brackets:after {
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+# Categories
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+#category-heading,
+#category-posts-heading {
+ float: left;
+}
+
+#category-posts-page {
+ float: right;
+ font-size: 0.6rem;
+}
+
+#category-body {
+ clear: both;
+}
+
+.category-list,
+.category-heading-list {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ font-size: 0.6rem;
+ text-align: center;
+
+ li {
+ display: inline-block;
+
+ + li:before {
+ content: ' ➜ ';
+ }
+ }
+
+ a {
+ text-decoration: underline;
+ }
+}
+
+.category-heading-list {
+
+ text-align: left;
+ float: right;
+}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Responsive
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#toogle-nav {