diff --git a/app/controllers/BlogController.php b/app/controllers/BlogController.php index fc0d0b4..a3b8855 100644 --- a/app/controllers/BlogController.php +++ b/app/controllers/BlogController.php @@ -2,11 +2,12 @@ namespace App\Controllers; +use App\Classes\Config; use App\Model\BlogModel; class BlogController extends PageController { - public function indexAction(): void + public function searchAction(): void { $archived = $this->router->request()->param('archived', 0); $search = $this->router->request()->param('search', ''); @@ -23,7 +24,43 @@ class BlogController extends PageController { $this->router->service()->posts = $posts; $this->router->service()->search = $search; $this->router->service()->injectView = $this->views . '/partials/blog-posts.php'; - parent::view('blog', 'Hello'); + parent::view('blog', 'Blog'); + } + + public function rssAction(): void + { + date_default_timezone_set('Europe/Amsterdam'); + + $xml = new \SimpleXMLElement(''); + $channel = $xml->addChild('channel'); + $channel->addChild('title', 'Rick's Webpage'); + $channel->addChild('link', Config::c('APP_URL')); + $channel->addChild('description', 'Recent content on Rick's Webpage.'); + $channel->addChild('language', 'en-us'); + $channel->addChild('lastBuildDate', date('D, d M Y H:i:s O')); + + // Fetch all non-archived blog posts + $search = $this->router->request()->param('search', ''); + $posts = $this->search($search, 0); + + foreach ($posts as $post) { + $link = Config::c('APP_URL') . '/' . $post['section'] . '/' . $post['page']; + $date = (new \DateTime($post['created_at']))->format('D, d M Y H:i:s O'); + + $item = $channel->addChild('item'); + $item->addChild('title', $post['title']); + $item->addChild('link', $link); + $item->addChild('description', $post['content']); + $item->addChild('pubDate', $date); + $item->addChild('guid', $link); + } + + header('content-type: text/xml; charset=UTF-8'); + $dom = new \DOMDocument("1.0"); + $dom->preserveWhiteSpace = false; + $dom->formatOutput = true; + $dom->loadXML($xml->asXML()); + print $dom->saveXML(); } //-------------------------------------// diff --git a/route.php b/route.php index 6efd504..7e262b5 100644 --- a/route.php +++ b/route.php @@ -17,7 +17,8 @@ return [ ['/img/captcha.jpg', 'IndexController', 'captcha'], ['/robots.txt', 'IndexController', 'robots'], ['/sitemap.xml', 'IndexController', 'sitemap'], - ['/blog', 'BlogController'], + ['/blog', 'BlogController', 'search'], + ['/blog.xml', 'BlogController', 'rss'], ['/login', 'LoginController', 'login', ['', 'Sign in', '']], ['/reset-password', 'LoginController', 'reset', ['', 'Reset password', '']], ['/logout', 'LoginController', 'logout'],