asm/markdown-content-bundle

Symfony2 静态 markdown 文件内容管理包

安装: 155

依赖: 0

建议者: 0

安全: 0

星星: 1

观察者: 3

分支: 1

开放问题: 3

类型:symfony-bundle

v0.4 2014-04-06 18:33 UTC

This package is auto-updated.

Last update: 2024-08-24 03:46:30 UTC


README

该项目的基本思想是能够在没有数据库后端的情况下轻松提供、配置和版本控制内容。此外,Markdown 语法也非常吸引人。

Build Status Latest Stable Version Total Downloads Scrutinizer Code Quality phpci build status

它能做什么?

您可以配置以下内容:

  • 内容目录
  • Markdown 解析器(php-markdownparsedown
  • 文件的加载器类型(目前只有 file-loader)
  • 您内容路由的前缀

所有 URL 都是由系统动态生成的,并且支持子目录,没有任何限制。MarkdownContentBundle 还支持多语言!如果您将您的目录结构放入一个语言目录,例如 content/en_US/mycoolfile.md,则在使用带有语言的前 w3c URL 或在您的内核中设置语言时将加载它。如果您想使用语言 URL,请启用配置指令。

基础

您需要了解的一些事情!

配置

您可以在您的 app/config.yml 中设置以下内容:

asm_markdown_content:
    content_directory: 'app/Resources/markdown'
    content_loader:    'file-loader'
    route_prefix:      'content'
    markdown_provider: 'php-markdown'
    #locale_url:        false

扩展

如果您愿意,可以轻松添加新的 Markdown 解析器或内容加载器,甚至钩子。对于每种类型,都有一个接口,您可以在其基础上构建标记服务

加载器

Asm\MarkdownContentBundle\Content\ContentLoaderInterface

asm_markdown_content.content_file_loader:
class: 'Asm\MarkdownContentBundle\Content\ContentFileLoader'
arguments:
    - '%kernel.root_dir%'
    - '%asm_markdown_content.content_directory%'
    - '%asm_markdown_content.content_path_depth%'
tags:
    - { name: asm_markdown_content.content_loader, alias: file-loader }

解析器

Asm\MarkdownContentBundle\Parser\ParserInterface

asm_markdown_content.parsedown_parser:
    class: 'Asm\MarkdownContentBundle\Parser\ParsedownParser'
    tags:
        - { name: asm_markdown_content.parser, alias: parsedown }

钩子

Asm\MarkdownContentBundle\Hook\HookDataInterface Asm\MarkdownContentBundle\Hook\HookContentInterface

asm_markdown_content.front_matter_content_hook:
    class: 'Asm\MarkdownContentBundle\Hook\FrontMatterContentHook'
    tags:
        - { name: asm_markdown_content.hook, alias: front_matter }

钩子系统

系统基于两个事件

  • 内容转换前
  • 内容转换后

对于每个注册的钩子服务,您必须在 getType() 方法中设置钩子的类型。它可以是 'post' 或 'pre'。钩子只有一个额外的接口方法 workContent(),它接收内容数组。'pre' 钩子接收文件内容 ($content['content']) 作为行数组,'post' 钩子将获取整个内容作为 HTML 字符串,因为它已经转换为 Markdown。

$content = array(
    'content' => array()|string,
    'data'    => array(),
);

这也是您需要从 workContent() 返回的数据结构。您如何处理数据完全取决于您。'pre' 和 'post' 之间的主要区别是数据节点的状态。在 'pre' 中,所有内容仍然是原始的 Markdown,数据可能已经被其他钩子(例如元数据钩子)预先填充。'post' 获取您配置的 Markdown 解析器提供的已转换的 HTML 字符串。在那里,您有机会更改一些标签,添加类,等等。

模板化

基本布局使用 CDN 中的 bootstrap3,并为您的自定义设计提供了一些基本功能。只需在您的自己的 Bundle(s) 中覆盖

vendor/asm/markdown-content-bundle/Asm/MarkdownContentBundle/Resources/views/layout.html.twig

内容模板

vendor/asm/markdown-content-bundle/Asm/MarkdownContentBundle/Resources/views/Content/index.html.twig

元数据

由于 Markdown 页面元数据有一个接受的格式,我已经切换到前置文件。一般格式是

---
title: Awesome page title
author: me, myself and I
date: 2014/02/09
sample_data: { some: data, more: data_stuff }
---

此块需要是您的 Markdown 文件中的第一件事,不能在它之前有空格或换行符,FrontMatterContentHook 将提取内容作为 YAML 并在内容数组中提供数据。因此,您有机会在该块中放置您几乎需要的任何其他内容。此外,默认元数据将放置在数据数组的根目录中。如果未通过前置文件设置,它们将被空白内容填充。

$defaults= array(
    'title'       => '',
    'description' => '',
    'author'      => '',
    'date'        => '',
    'robots'      => '',
    'content'     => '',
    'name'        => '',
    'keywords'    => '',
);

上面的前言部分将生成此数组

$data = array(
    'title'       => 'Awesome page title',
    'author'      => 'me, myself and I',
    'date'        => '2014/02/09',
    'description' => '',
    'robots'      => '',
    'content'     => '',
    'name'        => '',
    'keywords'    => '',
    'sample_data' => array(
        'some'    => 'data',
        'more'    => 'data_stuff',
    ),
);

数据数组可在您的TWIG模板中使用并自动填充字段;-)

静态页面的导出

如果您想将所有Markdown文件导出为HTML,可以使用以下命令

app/console asm:markdown:export <absolute_export_dir> -i <optional_import_dir>

导出器将使用配置的Markdown解析器;如果没有提供导入目录,将默认使用配置的目录。然后根据提供的模板,将内容逐文件渲染到导出目录内的等效文件夹结构中。请记住,将任何css/js文件添加到您的静态内容目录中;-)

即将到来/计划中

  • 在编译器传递期间对Markdown文件搜索进行预缓存
  • Markdown内容的缓存
  • 可能还有更多加载器类型
  • 在线编辑器

许可协议

AsmMarkdownContentBundle遵循MIT许可协议。有关完整的许可协议文本,请参阅LICENSE

自由软件,万岁!