Pagenode is a PHP Content Management Library for static sites using flat files for storage. It allows for great flexibility with custom routing and a simple query interface.
Pagenode runs on PHP7, has no dependencies and comes in a single file weighing in at 2700 lines of code (2000 of which belong to the Markdown parser), totalling 56kb.
This makes Pagenode a good fit for your personal blog, portfolio site or product page. If you want to give it a try please read the Getting Started Guide.
Pagenode is not revolutionary in any way. It brings nothing new to the table. Instead, it removes everything that is unnecessary. I wrote an in-depth discussion about Pagenode and why it exists in my Blog.
Load up Pagenode
<?php
require_once('pagenode.php');
define a route, select some files, load a template
route('/blog/page-{page}', function($page) {
$posts = select('blog/posts/')->newest(5, ['page' => $page]);
include('templates/blog/list.html.php');
});
and let Pagenode handle the current request.
dispatch();
Here's the source for this very website
<?php
require_once('pagenode.php');
// Handle all requests with a single keyword parameter
// by trying to find a matching file.
route('/{keyword}', function($keyword) {
$node = select('nodes/')->one(['keyword' => $keyword]);
if (!$node) {
// Returning false in a route handler means this request
// hasn't been handled here and will 404
return false;
}
include('templates/node.html.php');
});
// Internally re-route an empty request URL to the "welcome" node,
// which will be handled above.
reroute('/', '/welcome');
// Ordering of routes is important. By specifying a "catchall"
// route last we can use it as our 404 handler.
route('/*', function(){
include('templates/404.html.php');
});
dispatch();