sqkhor/editorjs-html

将 Editor.js 清洁数据解析为 HTML 的实用工具。基于 Pavittar Singh 的 editorjs-html

v1.0.0 2023-12-18 19:37 UTC

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. 为所有内容创建一个单一类。要添加自己的块,只需扩展这个唯一的类。

选项 #1 和 #2 是正确的方法。
选项 #3 更容易使用。

我选择了选项 #3。

许可证

MIT 公共许可证

作者

@shuqikhor 基于 @pavittarx 的作品