ro
a6b63ca551
page rendering for tags, archives and markdown pages is now up and running and being exported to html when requested. currently it only works when saving a page, so now the settings page needs to be plugged in so those features can be activated and toggled through that UI error checking will probably be added in the near future just in case something unforeseen happens in the render process, resulting in the site erroring out.
131 lines
4.3 KiB
PHP
131 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Illuminate\Support\Facades\File;
|
|
|
|
class RenderService
|
|
{
|
|
private $sort;
|
|
private $settings;
|
|
private $contents;
|
|
private $pageInfo;
|
|
private $menu;
|
|
private $background;
|
|
private $theme;
|
|
|
|
public function __construct(
|
|
SortingService $sortingService,
|
|
SettingsService $settingsService,
|
|
ContentService $contentService
|
|
) {
|
|
$this->sort = $sortingService;
|
|
$this->settings = $settingsService;
|
|
$this->contents = $contentService;
|
|
$this->theme = $this->settings->getGlobal()['theme'];
|
|
}
|
|
|
|
public function archive()
|
|
{
|
|
$template = $this->theme . '.archive';
|
|
$data = $this->sort->archive();
|
|
$pageData = [
|
|
'theme' => $this->theme, // for theme kit
|
|
'title' => 'Archives',
|
|
'dynamicRender' => $data['info']['dynamicRender'],
|
|
'archive' => $data['archive'],
|
|
'info' => $data['info'],
|
|
'menu' => $data['info']['menu'],
|
|
'media' => [
|
|
['file' => $data['info']['image'],
|
|
'type' => trim(pathinfo($data['info']['image'], PATHINFO_EXTENSION))]
|
|
],
|
|
];
|
|
$location = '../public/archive.html';
|
|
File::put(
|
|
$location,
|
|
view($template)
|
|
->with($pageData)
|
|
->render()
|
|
);
|
|
}
|
|
|
|
public function tags()
|
|
{
|
|
$data = $this->sort->tags();
|
|
foreach ($data['tags'] as $item) {
|
|
//$template = 'tags.twig';
|
|
$template = $this->theme . '.tags';
|
|
$pageData = [
|
|
'theme' => $this->theme, // for theme kit
|
|
'title' => 'Pages Tagged as ' . $item['tag_name'],
|
|
'dynamicRender' => $data['info']['dynamicRender'],
|
|
'info' => $data['info'],
|
|
'menu' => $data['info']['menu'],
|
|
'pages' => $item['pages'],
|
|
'media' => [
|
|
['file' => $data['info']['image'],
|
|
'type' => trim(pathinfo($data['info']['image'], PATHINFO_EXTENSION))]
|
|
],
|
|
];
|
|
|
|
$location = '../public/tags/' . $item['slug'] . '.html';
|
|
|
|
if (!is_dir('../public/tags')) {
|
|
mkdir('../public/tags', 0755, true);
|
|
}
|
|
|
|
File::put(
|
|
$location,
|
|
view($template)
|
|
->with($pageData)
|
|
->render()
|
|
);
|
|
}
|
|
}
|
|
|
|
public function pages()
|
|
{
|
|
$pages = $this->contents->loadAllPages();
|
|
foreach ($pages as $page) {
|
|
$template;
|
|
$page['layout'] == 'index' ?
|
|
$template = $this->theme . '.index' :
|
|
$template = $this->theme . '.page';
|
|
|
|
$data = $this->sort->page($page);
|
|
$pageData = [
|
|
"theme" => $this->theme,
|
|
"status" => false,
|
|
"title" => $data['title'],
|
|
"meta" => $data['meta'],
|
|
"menu" => $data['menu'],
|
|
"info" => $data['info'],
|
|
"media" => $data['media'],
|
|
"files" => $data['files'],
|
|
"content" => $data['content'],
|
|
"recent" => $data['recent'],
|
|
"feature" => $data['featured'],
|
|
"tags" => $data['tags'],
|
|
"dynamicRender" => $data['dynamicRender'],
|
|
];
|
|
|
|
if (str_contains($page['layout'], 'index')) {
|
|
$location = '../public/index.html';
|
|
} else {
|
|
// if page is a menu item, render the page on public root
|
|
if ($page['menu'] == 'true') {
|
|
$location = '../public/' . $page['slug'] . '.html';
|
|
} else {
|
|
$dir = '../public/' . $page['path'];
|
|
if (!is_dir($dir)) {
|
|
mkdir($dir, 0755, true);
|
|
}
|
|
$location = '../public/' . $page['path'] . '/' . $page['slug'] . '.html';
|
|
}
|
|
}
|
|
File::put($location, view($template)->with($pageData)->render());
|
|
}
|
|
}
|
|
}
|