Github Pagesphp
Github Pages 是 Github 免费提供的静态网站生成器,你能够利用其建立我的、企业、项目网站。其提供静态页面托管服务和一个二级域名,也能够绑定独立域名。html
能够很轻易的找到其介绍和如何构建本身的 Github Pages,就不详细介绍了git
能够参考这些内容github
What is GitHub Pages?
Using Jekyll as a static site generator with GitHub Pages
使用 github pages, 快速部署你的静态网页
github pages搭建我的博客segmentfault
分页后端
无论是我的博客仍是其余主页,内容多了就须要分页展现文章列表。markdown
咱们选择 Jekyll 做为页面生成器来管理页面。数据结构
Jekyll 提供了分页功能,使用上也很方便。只须要 _config.yml 文件填加分页配置就能够直接用了。post
plugins: [jekyll-paginate] paginate: 20 # 每页文章数 paginate_path: "essay/page:num" # 可选,分页连接
而后在 index.html 直接写上以下代码就会自动生成分页目录网站
<ul> {% for post in paginator.posts %} <li><a href="{{ post.url }}">{{ post.title }}</a></li> {% endfor %} </ul> <nav class="pagination" role="navigation"> {% if paginator.previous_page %} <a class="previous pagination__newer btn btn-small btn-tertiary" href="{{ paginator.previous_page_path }}">← 上一页</a> {% endif %} <span class="page_num pagination__page-number">{{ paginator.page }} / {{ paginator.total_pages }}</span> {% if paginator.next_page %} <a class="next pagination__older btn btn-small btn-tertiary" href="{{ paginator.next_page_path }}">下一页 →</a> {% endif %} </nav>
jekyll 会自动生成以下目录
效果以下
很是方便,可是它也有不少明显的缺点。好比他只支持 _posts 目录下的文章进行自动生成,很大时候就不必定能知足需求了。
自定义分页
如上面所说,不想把全部文章都放到 _posts 一个目录。好比我想到放在独立的 blog 目录
那怎么实现目录的自动生成和分页呢?借助 Data Files 和 PHP 来手动生成分页。
_data/blogList.yml 定义以下列表
- key: 6a1b96bda21c937f01a7591ec3e84223 title: PHP实现一个轻量级容器 next: Travis CI 实现自动备份Segmentfault文章到Github - key: 13ee9e07ce28d6310eb5fec64404fa24 title: Travis CI 实现自动备份Segmentfault文章到Github prev: PHP实现一个轻量级容器 next: Travis CI 简介 - key: bb800b68ec4217869667407a8c1470f6 title: Travis CI 简介 prev: Travis CI 实现自动备份Segmentfault文章到Github next: 【php实现数据结构】链式队列
在子目录另外定义一个 page.html 模板文件
--- layout: list type: customList title: 个人博客 page: 1 total_pages: 100 prev_page_path: none next_page_path: none --- <p>同步自segmentfault(https://segmentfault.com/blog/actors315)</p> <h2 id="目录">目录</h2> <ul> {% for member in site.data.blogList limit:20 offset:#offset# %} <li><a href="/blog/markdown/{{ member.title }}">{{ member.title }}</a></li> {% endfor %} </ul>
利用 data 的逻辑处理能力手动实现,而后 php 自动任务手动生成和 jekyll 自助目录一样的结构。
$totalCount = count($list); $totalPage = ceil($totalCount / 20); for ($i = 1; $i <= $totalPage; $i++) { if ($i == 1) { $tempFile = __DIR__ . "/../blog/index.html"; } else { $tempFile = __DIR__ . "/../blog/page{$i}/index.html"; } $newPage = false; if (file_exists($tempFile)) { $tempContent = file_get_contents($tempFile); } else { $tempContent = file_get_contents(__DIR__ . "/../blog/page.html"); $newPage = true; if (!is_dir($dir = dirname($tempFile))) { mkdir($dir, 0777, true); } } $tempContent = preg_replace('/page:[\s]*\d+[^\d]/', "page: {$i}" . PHP_EOL, $tempContent); $tempContent = preg_replace('/total_pages:[\s]*\d+[^\d]/', "total_pages: {$totalPage}" . PHP_EOL, $tempContent); if ($i == 2) { $tempContent = preg_replace('/prev_page_path:[\s]*[^\s]+[\s]*?/', "prev_page_path: /blog/", $tempContent); } elseif ($i > 2) { $prev = $i - 1; $tempContent = preg_replace('/prev_page_path:[\s]*[^\s]+[\s]*?/', "prev_page_path: /blog/page{$prev}/", $tempContent); } if ($i < $totalPage) { $next = $i + 1; $tempContent = preg_replace('/next_page_path:[\s]*[^\s]+[\s]*?/', "next_page_path: /blog/page{$next}/", $tempContent); } elseif ($i == $totalPage) { $tempContent = preg_replace('/next_page_path:[\s]*[^\s]+[\s]*?/', "next_page_path: none", $tempContent); } if ($newPage) { $tempContent = str_replace('#offset#', ($i - 1) * 20, $tempContent); } file_put_contents($tempFile, $tempContent); }
这里须要配合后端代码,Github Pages 目前是不支持动态语言的,因此须要借助其余能力,能够参考之篇文章的介绍 《Travis CI 实现自动备份Segmentfault文章到Github》
这样就徒手实现了一个分页功能,而且能够根据本身的须要为所欲为,你的分页你做主。
详细实现可参考个人Github 页面 呜啦啦的碎碎念