rockstarcode / markdb

Markdown 平面文件数据库

1.1.1 2016-07-11 00:20 UTC

This package is not auto-updated.

Last update: 2024-09-28 18:31:46 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version Daily Downloads

MarkDB - 为博客/CMS提供的Markdown数据库

MarkDB是一个引擎,允许您使用Markdown + Yaml文件作为CMS或博客的数据点。

目标是让您将内容创作与控制应用程序设计的平台分开。这允许您以任何您想要的方式编写博客或项目,并将内容作为数据库驱动的附加内容。

这个项目起源于我在RockstarCode的博客,我不想通过像OctoberCMS或Wordpress这样的CMS设计我的网站,这会迫使我通过它们的界面撰写帖子,我也不想将内容存储在需要同步的数据库中。

我选择的解决方案是创建一个平面文件.git仓库来存储我的文章,而MarkDB是收集和管理帖子的接口。

这允许我编写帖子并在本地预览它们,然后再通过简单的git push将它们推送到不同的环境。

特性

  • 漂亮的URL别名来标识文件或目录
  • 按文件/目录自定义设置
  • 使用git仓库来版本控制您的数据点
  • 通过属性简单搜索文章
  • [未来] - 缓存

库 vs 文章

MarkDB将根据给定的$base路径查找文件和目录

从那里,它将提供一个库(目录)和文章(文件)列表

库包含子库和所有子文章的集合,允许您在需要时遍历以创建导航。例如,您可能有一个包含各种主题导航的基础博客[牢骚,教程,个人想法]。您的基础新MarkDB('/path/to/blog/data')将包含3个库:牢骚、教程、个人想法,您可以使用它们提取独特数据或建立链接

文章包含YAML & MarkDown中的文件信息,您可以使用它们自定义数据和展示。

    ---
    title: Article Title
    author: Authr Name
    author_email: Author@Email.com
    authdeck: author.name
    ---
    ### Hello World
    
    This is my article

位于---之间的所有内容将被处理为yaml,位于第二个---以下的内容将被处理为markdown

要求

  • LibYaml & pecl yaml for PHP 更新到symfony/yaml以移除依赖
  • Carbon for 数据时间

安装

    composer require "rockstarcode/markdb:dev-master"

使用

$MarkDb = new MarkDB\MarkDB('/path/to/files/','base/path/to/form/relative/slugs');

$slug = 'path/to/some/article'; 

$article = $MarkDb->get($slug); # (object) Article 
   
   $article->slug           # url friendly path that identifies article in MarkDB
   $article->{$property}    # properties extracted from YAML processing of the article
   $article->content()      # processed MarkDown of content of article
   $article->read_time()    # helper to calculate words in article and average read time
   $article->summary()      # Extract certain percentage of content for preview 

$find = $MarkDb->where(['author'=>'Author Name','category'=>'Books Ive Read']);  (Array)[Articles]

foreach($MarkDb->libraries as $library){
     $library->articles     # list of articles within library
     $library->libraries    # list of child libraries
     $library->index        # list of all libraries/articles by slug
     $library->slug         # slug which identifies library
     
}

Laravel

MarkDB附带一个Laravel 5.* Service Provider,它将为您的应用程序添加MarkDB作为外观

# .env
MARKDB_PATH=/path/to/blog-cms

# config/app.php
    
    'providers'=>[
        ...
        \MarkDb\Support\Laravel\MarkDBServiceProvider::class,
    ],
    
    'aliases' => [
        ...
        'MarkDb' => \MarkDB\Support\Laravel\MarkDBFacade::class,
    ]

Laravel中查看文章的示例路由

#routes.php
  Route::get('/posts, ['as'=>'posts','uses'=>function($slug){
          
          $markdb= app()->make('markdb');
          
          $articles = $cms->articles( /*optional*/ ['page'=>1, 'limit'=>10]);
           
          return view('index',['articles'=>$articles]); 
           
    }])->where('slug','(.*)');
    
  Route::get('/posts/{slug}', ['as'=>'post','uses'=>function($slug){
        
        $article = \MarkDB::get($slug);
         
        return view('article',['article'=>$article]); 
         
  }])->where('slug','(.*)');

教程

我创建了一个简单的Lumen + MarkDB教程,它引导您通过基本使用步骤

RockstarCode - Lumen + MarkDB

许可证

在MIT许可证下发布,您可以自由使用、修改、贡献更改。