asm / markdown-content-bundle
Symfony2 静态 markdown 文件内容管理包
Requires
- php: >=5.3.0
- erusev/parsedown: ~0.9
- michelf/php-markdown: ~1.4
- symfony/config: ~2.2
- symfony/console: ~2.2
- symfony/dependency-injection: ~2.2
- symfony/event-dispatcher: 2.5.*@dev
- symfony/filesystem: ~2.2
- symfony/finder: ~2.2
- symfony/http-kernel: ~2.2
- symfony/yaml: 2.5.*@dev
Requires (Dev)
- symfony/framework-bundle: ~2.2
- symfony/security-bundle: ~2.2
This package is auto-updated.
Last update: 2024-08-24 03:46:30 UTC
README
该项目的基本思想是能够在没有数据库后端的情况下轻松提供、配置和版本控制内容。此外,Markdown 语法也非常吸引人。
它能做什么?
您可以配置以下内容:
- 内容目录
- Markdown 解析器(php-markdown 或 parsedown)
- 文件的加载器类型(目前只有 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。
自由软件,万岁!