sqkhor / editorjs-html
将 Editor.js 清洁数据解析为 HTML 的实用工具。基于 Pavittar Singh 的 editorjs-html
Requires
- php: >=7.4
- ext-gd: *
This package is auto-updated.
Last update: 2024-09-19 03:47:52 UTC
README
这是由 editorjs-html 的 @pavittarx 开发的 editorjs-html 的 PHP 版本。
editorjs-html
是一个实用工具,可以将 Editor.js 清洁数据(JSON)解析为 HTML。
- 您可以使用任何您选择的 PHP 框架使用它。
- 快速、高效且轻量。
- 完全可自定义到核心。
- 支持基本 Editor.js 块,这些块也可以自定义。
- 可扩展以支持任何新或自定义 Editor.js 块。
[注意] 实际上您不需要将 Editor.js 数据转换为 HTML 来显示。为此目的,只需以只读模式嵌入 Editor.js 即可。
[注意] 此库主要面向那些需要将 Editor.js 清洁数据转换为 HTML 用于其他用途的用户,例如用于调用其他系统的 API 或迁移到另一个编辑器。
安装
Composer
composer require sqkhor/editorjs-html
用法
// Get an array of HTML based on original blocks $result = edjsHTML::parse($editorjs_clean_data); // Enclose in <section> for display $sections = array_map(function ($section) { return "<section>$section</section>"; }, $result); // Join for output $html = implode("", $sections); echo $html;
更新
见 发布
文档
支持的块类型
- 标题 (H1-H6)
- 列表(有序和无序列表)
- 嵌套列表
- 图片
- 分隔符
- 段落
- 引用
- 代码
- 嵌入
接受的数据格式
传递给 parse()
或 parse_strict()
的数据可以是未解码的 JSON 字符串,或任何已解码的 JSON 格式(支持 stdClass 和关联数组)
解析整个 Editor.js 数据
$HTML = edjsHTML::parse($editorjs_data); // returns an array of html strings per block var_export($HTML);
解析整个 Editor.js 数据(严格模式)
try { $HTML = edjsHTML::parse_strict($editorjs_data); // in case of success, returns an array of strings var_export($HTML) } catch (\Exception $e) { // returns an error when data is invalid }
解析单个清洁数据块
$block_HTML = edjsHTML::parse_block($editorjs_data_block); // returns a string of html for this block var_export(block_HTML);
获取缺失解析函数列表
// returns a list of missing parser functions $block_HTML = edjsHTML::validate($editorjs_data); var_export(block_HTML);
为自定义块扩展
要为不受支持的块类型添加自己的解析函数,只需将块解析器作为静态方法扩展到 edjsHTML
类。
您甚至可以覆盖现有的块解析器。
[注意] 方法名称必须与 Editor.js 自定义块类型匹配。
示例
// Your custom editorjs generated block { type: "custom", data: { text: "Hello World" } }
// Parse this block in editorjs-html class CustomParser extends edjsHTML { static public function custom ($block) { return "<div class=\"custom-block\">{$block['data']['text']}</div>"; } } const HTML = CustomParser::parse($editorjs_data);
设计笔记
[注意] 本节内容不重要。
与基于 JavaScript/TypeScript 的原始库不同,您不能在 PHP 中将函数作为变量传递。这限制了我们将解析函数传递给主类的方式。
因此我剩下两种选择
- 为主要的操作和块解析器创建单独的类。要添加自己的块解析器,扩展解析器类并将其传递给主类。
- 让块解析器到处都是,然后将其中的每个都注册到主类。
- 为所有内容创建一个单一类。要添加自己的块,只需扩展这个唯一的类。
选项 #1 和 #2 是正确的方法。
选项 #3 更容易使用。
我选择了选项 #3。
许可证
MIT 公共许可证
作者
@shuqikhor 基于 @pavittarx 的作品