Blog.php
<?php
namespace Lia\Addon;
class Blog extends \Lia\Package {
public function __construct($lia, string $blog_dir, array $configs=[]){
$configs['dir.blog'] = $blog_dir;
parent::__construct($lia, dirname(__DIR__), $configs);
// $blogCompo = $lia->getPackage('Taeluf.com');
// $blogDir = $blogCompo->dir().'/blog';
// // var_dump($blogDir);
// $this->dir = $blogDir;
}
protected function getFiles(){
$blogDir = $this->get('dir.blog');
$files = (new class{
function getFiles($path,$ext='md'){
$dh = opendir($path);
$files = [];
while ($file = readdir($dh)){
if ($file=='.'||$file=='..')continue;
$fPath = str_replace('//','/',$path.'/'.$file);
if (is_dir($fPath)){
$subFiles = $this->getFiles($fPath);
$files = array_merge($files,$subFiles);
} else if ($ext=='*'
||pathinfo($fPath,PATHINFO_EXTENSION)==$ext){
$files[] = $fPath;
}
}
return $files;
}
})->getFiles($blogDir,'md');
return $files;
}
public function titleFormat($name){
if (trim($name)=='')$name = 'No Category';
// $name =
$name = implode(' ', explode('-',$name));
$name = ucwords($name);
return $name;
}
public function buildArticles($files){
$blogDir = $this->get('dir.blog');
$files = array_map(
function($file) use ($blogDir){
$relPath = substr($file,strlen($blogDir));
$dir = substr(dirname($relPath),1);
$url = '/blog'.$relPath;
//remove .md
$url = substr($url,0,-3).'/';
if (substr($url,-7)=='.draft/'){
return false;
}
$name = $this->titleFormat(basename(substr($relPath,0,-3)));
return [
'dir'=>$dir,
'url'=> $url,
'name'=>$name,
];
},
$files
);
$files = array_filter($files);
return $files;
}
public function getArticles($grouped=true){
$files = $this->getFiles();
$articles = $this->buildArticles($files);
if (!$grouped)return $articles;
$grouped = [];
foreach ($articles as $article){
$grouped[$article['dir']][] = $article;
}
return $grouped;
}
public function display(){
$articles = $this->getArticles();
foreach ($grouped as $groupName=>$blogs){
echo '<ul><li>'.$groupName."\n\n<br>";
$links = array_map(
function($f){
$n = $f['name'];
while (substr($n,0,1)=='/')$n = substr($n,1);
if (trim($n)=='')$n = "Root";
return '<li><a href="'.substr($f['path'],0,-3).'/'.'">'.$n.'</a></li>';
},
$blogs
);
echo '<ul>'.implode("\n",$links).'</ul>';
echo '</li></ul>';
}
}
}