Router.php

<?php

namespace Lia\MdBlog;

use League\CommonMark\Environment\Environment;
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
use League\CommonMark\Extension\CommonMark\Node\Block\FencedCode;
use League\CommonMark\Extension\CommonMark\Node\Block\IndentedCode;
use League\CommonMark\MarkdownConverter;
use Spatie\CommonMarkHighlighter\FencedCodeRenderer;
use Spatie\CommonMarkHighlighter\IndentedCodeRenderer;

class Router extends \Lia\Compo {

    public function get_routes(){
        $blog = $this->package;
        $articles = $blog->getArticles(false);
        $urls = array_map(
            function($info){
                return $info['url'];
            },
            $articles
        );
        return $urls;
    }

    public function get_blog_content($slug, $category){
        $key = 'mdblog:'.$slug.'-'.$category;
        //get path from cache if available
        if ($this->lia->get('lia:blog.use_cache', true)){
            $path = $this->lia->getCachedFilePath($key);
        } else $path = false;

        //generate content from view or get from cached file
        if ($path==false){
            $content = ''.$this->lia->view('Blog/Page',['slug'=>$slug,'category'=>$category]);
            if ($this->lia->get('lia:blog.use_cache', true)){
                $this->lia->cacheFile($key, $content);
            }
        } else {
            $content = file_get_contents($path);
        }

        return $content;
    }
    
    public function routePatternBlog($route,$response=''){
        if ($route===false)return $this->get_routes();

        $addon = $this->lia->get('lia:addon.commonmark');
        $addon->add_hook('environment',[$this,'add_highlighter']);
        $url = $route->url();
        // echo $url;
        $parts = explode('/',$url);
        //remove leading slash, blog/, and trailing slash
        array_shift($parts);
        array_shift($parts);
        array_pop($parts);
        $slug = array_pop($parts);
        $category = implode('/',$parts);

        $response->content = $this->get_blog_content($slug,$category);

        // var_dump($response->content);
        // exit;

    }

    public function add_highlighter($environment){
        $environment->addRenderer(FencedCode::class, new FencedCodeRenderer());
        $environment->addRenderer(IndentedCode::class, new IndentedCodeRenderer());
    }

//
    // I believe this is just for sitemap generation ...
    // it's old & needs review & refactor
//   
//     public function onRequest_Setup($event){

//         $sitemapPath = $this->dir('public').'/sitemap.xml';
//         if (file_exists($sitemapPath))return;
//         $router = $event->GetCompo('0-Router');
//         $routes = $router->getRoutes();
//         $goodRoutes = [];
//         foreach ($routes['static'] as $r){
//             $r = $r[0];
//             $r = (object)$r;
//             $methods = $r->methods ?? [];
//             if (!in_array('GET',$methods))continue;
//             $ext = pathinfo($r->url,PATHINFO_EXTENSION);
//             if ($ext=='png'||$ext=='jpg'||$ext=='xml'||$ext=='js'||$ext=='css' ||$ext=='ico'||$ext=='html'||$ext=='json')continue;
//             $goodRoutes[$r->url] = $r;
//         }
//         // print_r(array_keys($goodRoutes));
//         // exit;
//         $urls = [];
//         foreach ($goodRoutes as $relPath => $gr){
//             // if (count($gr->vars)>0)continue;
//             if (substr($relPath,-strlen('.pdf'))=='.pdf'){
//                 $urls[$relPath] = filemtime($gr->file);
//                 continue;
//             }
//             $url = substr($relPath,0);//,-strlen('.php'));
//             if (substr($url,-strlen('index'))=='index')$url = substr($url,0,-strlen('index'));
//             $url .= '/';
//             $url = str_replace(['///','//'],'/',$url);
//             $urls[$url] = (!empty($gr->file) ? filemtime($gr->file) : time());
//         }
//         $sitemap = '<?xml version="1.0" encoding="UTF-8"? >
// <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
// ';
//         foreach ($urls as $url=>$mtime){
//             $absUrl = 'https://domain.tld'.$url;
//             $lastmod = date('Y-m-d',$mtime);
//             $entry = 
//             <<<ENTRY
//                 <url>
//                     <loc>{$absUrl}</loc>
//                     <lastmod>{$lastmod}</lastmod>
//                 </url>
//             ENTRY;
//             $sitemap .= $entry;
//         }

//         $sitemap .="\n</urlset>";

//         file_put_contents($sitemapPath,$sitemap);
//     }

}