dupot / static-generation-skeleton
2.0.0
2022-11-12 14:24 UTC
Requires
README
用于创建静态生成框架网站的骨架
用法
安装
composer create-project dupot/static-generation-skeleton myWebsite
生成
docker-compose exec web php src/generate.php
显示结果
docker-compose up
然后在浏览器中打开 https:/// 网址
如何使用
在 Pages 文件夹中创建页面作为类
- 每个页面将使用布局和加载组件列表
- 每个页面将被生成为一个位于 docs 文件夹中的 HTML 页面,所以不要忘记在这个文件夹中添加所有 css/js 依赖项
在 Components 文件夹中创建页面使用的组件
- 每个组件将使用视图
使用示例
你的主页
src/Pages/HomePage.php
<?php namespace MyWebsite\Pages; use Dupot\StaticGenerationFramework\Page\PageAbstract; use Dupot\StaticGenerationFramework\Page\PageInterface; use MyWebsite\Components\HomeWelcomeComponent; use MyWebsite\Components\NavComponent; class HomePage extends PageAbstract implements PageInterface { const FILENAME = 'index.html'; public function getFilename(): string { return self::FILENAME; } public function render(): string { return $this->renderLayoutWithParamList( __DIR__ . '/layout/default.php', [ 'nav' => new NavComponent($this->getFilename()), 'contentList' => [ new HomeWelcomeComponent(), ] ] ); } }
包含在你页面中的组件
src/Components/NavComponent.php
<?php namespace MyWebsite\Components; use Dupot\StaticGenerationFramework\Component\ComponentAbstract; use Dupot\StaticGenerationFramework\Component\ComponentInterface; use MyWebsite\Pages\HomePage; class NavComponent extends ComponentAbstract implements ComponentInterface { protected $pageSelected; public function __construct($pageSelected) { $this->pageSelected = $pageSelected; } public function render(): string { $linkList = [ 'Home' => HomePage::FILENAME, ]; return $this->renderViewWithParamList( __DIR__ . '/Nav/nav.php', [ 'linkList' => $linkList, 'pageSelected' => $this->pageSelected ] ); } }
组件使用的视图
src/Components/Nav/nav.php
<nav class="navbar navbar-wrapper navbar-default navbar-fade is-transparent" role="navigation" aria-label="main navigation"> <div class="navbar-brand"> <a class="navbar-item" href="index.html"> <img src="css/images/logo.png" width="112" height="28"> </a> <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="navbar-menu"> <span aria-hidden="true"></span> <span aria-hidden="true"></span> <span aria-hidden="true"></span> </a> </div> <div class="navbar-menu " id="navbar-menu"> <?php foreach ($this->paramList['linkList'] as $label => $link) : ?> <a class="navbar-item <?php if ($link == $this->paramList['pageSelected']) : ?>is-active<?php endif; ?>" href="<?php echo $link ?>"><?php echo $label ?></a> <?php endforeach; ?> </div> </nav>
生成脚本
最后但同样重要的是:不要忘记在你的页面类列表中填写生成脚本
<?php use MyWebsite\Pages\HomePage; require __DIR__ . '/../vendor/autoload.php'; $pagesList = [ new HomePage(), //new OtherPage() ]; foreach ($pagesList as $pageLoop) { print("Generate " . $pageLoop->getFilename() . "\n"); $pageLoop->generateTo(__DIR__ . '/../docs/'); }