我如何编译出一个这样的 ckeditor 类似wp的经典编辑器

作者: koic 分类: Ai 发布时间: 2025-12-31 14:17

我如何编译出一个这样的 ckeditor 类似wp的经典编辑器

 

这张截图展示的是 Typecho 后台非常经典的文章编辑界面。从界面风格(图标、工具栏布局)来看,这极有可能是 CKEditor 4 的某个定制版本,或者是基于 KindEditor / WangEditor 修改的插件。

由于 CKEditor 4 已经在 2023 年停止维护(EOL),如果你要为“律师门户”开发一个稳定、现代的编辑器,我强烈建议你使用 CKEditor 5 进行“编译”(构建),并将其配置成截图中的样子。

以下是如何使用 CKEditor 5 Online Builder 编译出一个具备图中所有功能(甚至更强)的编辑器的步骤:

第一步:使用官方构建器 (Online Builder)

CKEditor 5 是模块化的,你必须通过“构建”来选择你需要的功能。

  1. 访问 CKEditor 5 Online Builder

  2. 选择类型 (Choose editor type):

    • 选择 “Classic” (经典模式),这是最接近你截图布局的模式。

  3. 选择插件 (Choose plugins):

    这是最关键的一步。为了还原你截图中的功能,你需要勾选以下插件:

    • Essentials: (必选)

    • Formatting: Bold (加粗), Italic (斜体), Strikethrough (删除线), Underline (下划线).

    • Block: Block Quote (引用), Heading (标题).

    • Alignment: Alignment (对齐方式 – 对应图中的左/中/右对齐).

    • List: List (列表 – 对应图中的无序/有序列表).

    • Font: Font Size (字号), Font Family (字体), Font Color (字体颜色).

    • Link: Link (超链接).

    • Image: Image, Image Caption, Image Resize, Image Upload (对应图中的图片功能).

    • Code: Code Block (代码块 – 对应图中 {} 图标), Code (行内代码).

    • Source: Source Editing (源码模式 – 对应图中 <>源码 按钮,这对开发者很重要).

    • Undo: Undo (撤销/重做).

    • 特殊推荐 (针对律师行业): 强烈建议勾选 Paste from Office。律师通常用 Word 写稿,这个插件能完美保留 Word 的格式粘贴进编辑器,大大提高效率。

  4. 配置工具栏 (Toolbar Configuration):

    • 在这一步,你可以拖拽图标。

    • 按照你截图的习惯,将 Bold, Italic 放左边,Alignment 放中间,Code 和 Image 放右边。

    • 你可以添加 | 分隔符来模仿截图中的分组效果。

  5. 选择语言 (Choose language):

    • 选择 Chinese (Simplified),这样界面就是全中文的。

  6. 下载 (Download):

    • 点击 Start,下载生成的 zip 包。


第二步:集成到 Typecho (二次开发)

下载下来的包里核心是 ckeditor.js。你需要把它塞进 Typecho 的插件结构里。

  1. 创建插件目录:

    在 usr/plugins/ 下创建一个文件夹,例如 MyLawyerEditor。

  2. 放置构建文件:

    将下载的 build/ckeditor.js 放入该目录。

  3. 编写 Plugin.php (核心逻辑):

    你需要利用 Cursor 写一个简单的 Plugin.php,利用 Typecho 的接口把原本的 textarea 替换掉。

    给 Cursor 的 Prompt:

    “我正在为 Typecho 开发一个编辑器插件。我已经有了编译好的 CKEditor 5 的 ckeditor.js 文件。请帮我写一个 Plugin.php。

    需求:

    1. 在后台文章编辑页面 (admin/write-post.php) 引入 ckeditor.js

    2. 使用 JavaScript 将 Typecho原本的 ID 为 text 的 textarea 初始化为 CKEditor。

    3. 确保表单提交时,编辑器的数据能同步回 textarea,从而能正常保存文章。”

  4. 处理图片上传 (难点):

    CKEditor 5 需要一个上传适配器 (Upload Adapter)。

    • 截图中的“保存站外图片”: 这是一个后端功能。你需要写一个 PHP 脚本来抓取远程图片。

    • 普通上传: 你需要写一段 JS 代码(Custom Upload Adapter),调用 Typecho 原生的上传接口,或者让 Cursor 帮你写一个简单的 PHP 接口来接收图片。


替代方案:直接使用现成的 Typecho 插件魔改

如果你觉得从头编译太麻烦,且必须要有**“保存站外图片”**这种特有功能,截图中的编辑器很可能是一个名为 “Joe Editor” 或者 “PandaEditor” 的 Typecho 插件。

  • 方案: 去 GitHub 搜索 “Typecho CKEditor” 或 “Typecho Editor”。

  • 推荐: 找一个基于 Editor.mdWangEditor 的现成插件(因为它们对中文和本地化支持更好,且代码比 CKEditor 简单)。

  • 魔改: 下载后,让 Cursor 修改它的 CSS,把工具栏配色改成你截图中的灰白色,并调整按钮顺序。

总结建议

为了你的律师门户项目:

  1. 不要追求 1:1 还原截图: 那个截图的界面风格(CKEditor 4)已经过时了,而且在移动端(手机上写文章)体验很差。

  2. 拥抱 CKEditor 5: 使用我上面说的“第一步”构建一个现代版编辑器。

  3. 核心卖点: 为律师加上 “Paste from Office” (从 Word 粘贴) 功能。这是旧版编辑器(截图那个)很难做好的,但对律师来说是杀手级功能。

我主要想要截图上面的功能,能不能在本地编译一份离线版 CKEditor

 

要在本地编译一份完全离线的、包含截图功能的 CKEditor 5,你需要使用 Node.js 环境。这种方式比在线构建器更强大,因为你可以随意添加、删除插件,并完全控制 UI 布局。

以下是从零开始在本地编译出符合你截图需求的 CKEditor 5 的详细步骤。

准备工作

  1. 安装 Node.js: 确保你的电脑安装了 Node.js (推荐 v18 或更高版本)。

  2. 终端 (Terminal): 你需要在命令行中执行操作。


第一步:下载官方自定义构建脚手架

不要从零写代码,直接克隆官方的“自定义构建”模板。

Bash

# 1. 创建并进入目录
mkdir my-lawyer-editor
cd my-lawyer-editor

# 2. 克隆官方的 stable 构建模板 (这是一个基础版)
git clone -b stable https://github.com/ckeditor/ckeditor5-build-classic.git .

# 3. 安装依赖 (这会下载基础的包)
npm install

第二步:安装截图中的核心功能插件

你截图里的核心功能包括:源码模式代码块图片上传对齐。我们需要单独安装这些插件。

在终端执行以下命令:

Bash

# 安装 源码编辑 (对应截图里的 <>)
npm install --save @ckeditor/ckeditor5-source-editing

# 安装 代码块 (对应截图里的 {})
npm install --save @ckeditor/ckeditor5-code-block

# 安装 对齐方式 (对应截图里的 居中/居右)
npm install --save @ckeditor/ckeditor5-alignment

# 安装 字号和字体颜色 (对应截图里的 A 按钮)
npm install --save @ckeditor/ckeditor5-font

# 安装 缩进 (对应截图里的 tab 缩进)
npm install --save @ckeditor/ckeditor5-indent

# 安装 水平线 (对应截图里的 分割线)
npm install --save @ckeditor/ckeditor5-horizontal-line

# (可选) 如果你需要 Word 粘贴功能
npm install --save @ckeditor/ckeditor5-paste-from-office

第三步:修改代码 (src/ckeditor.js)

打开项目中的 src/ckeditor.js 文件。这是核心配置文件。你需要做两件事:引入插件配置工具栏

请用以下代码完全替换该文件的内容,我已经帮你按截图的逻辑排好了序:

JavaScript

/**
 * @license Copyright (c) 2014-2024, CKSource Holding sp. z o.o. All rights reserved.
 * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
import { ClassicEditor } from '@ckeditor/ckeditor5-editor-classic';

import { Autoformat } from '@ckeditor/ckeditor5-autoformat';
import { Bold, Italic, Underline, Strikethrough } from '@ckeditor/ckeditor5-basic-styles';
import { BlockQuote } from '@ckeditor/ckeditor5-block-quote';
import { CloudServices } from '@ckeditor/ckeditor5-cloud-services';
import { Essentials } from '@ckeditor/ckeditor5-essentials';
import { Heading } from '@ckeditor/ckeditor5-heading';
import { Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, ImageResize } from '@ckeditor/ckeditor5-image';
import { Indent } from '@ckeditor/ckeditor5-indent';
import { Link } from '@ckeditor/ckeditor5-link';
import { List } from '@ckeditor/ckeditor5-list';
import { MediaEmbed } from '@ckeditor/ckeditor5-media-embed';
import { Paragraph } from '@ckeditor/ckeditor5-paragraph';
import { PasteFromOffice } from '@ckeditor/ckeditor5-paste-from-office';
import { Table, TableToolbar } from '@ckeditor/ckeditor5-table';
import { TextTransformation } from '@ckeditor/ckeditor5-typing';
import { Undo } from '@ckeditor/ckeditor5-undo';

// --- 新增的插件引用 ---
import { SourceEditing } from '@ckeditor/ckeditor5-source-editing';
import { Alignment } from '@ckeditor/ckeditor5-alignment';
import { Font } from '@ckeditor/ckeditor5-font';
import { CodeBlock } from '@ckeditor/ckeditor5-code-block';
import { HorizontalLine } from '@ckeditor/ckeditor5-horizontal-line';

class Editor extends ClassicEditor {
	// 插件列表
	static builtinPlugins = [
		Autoformat,
		BlockQuote,
		Bold, Italic, Underline, Strikethrough,
		CloudServices,
		Essentials,
		Heading,
		Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, ImageResize,
		Indent,
		Link,
		List,
		MediaEmbed,
		Paragraph,
		PasteFromOffice,
		Table, TableToolbar,
		TextTransformation,
		Undo,
		// 新增插件
		SourceEditing,
		Alignment,
		Font,
		CodeBlock,
		HorizontalLine
	];

	// 配置项
	static defaultConfig = {
		toolbar: {
			items: [
				'sourceEditing', '|', // 源码模式在最左侧
				'heading', '|',
				'bold', 'italic', 'underline', 'strikethrough', 'fontColor', '|', // 字体样式
				'alignment', '|', // 对齐
				'bulletedList', 'numberedList', 'outdent', 'indent', '|', // 列表与缩进
				'link', 'blockQuote', 'insertTable', 'horizontalLine', '|', // 插入类
				'imageUpload', 'codeBlock', 'mediaEmbed', '|', // 媒体与代码
				'undo', 'redo'
			],
			shouldNotGroupWhenFull: true // 强制不折叠菜单
		},
		language: 'zh-cn', // 默认中文
		image: {
			toolbar: [
				'imageTextAlternative',
				'toggleImageCaption',
				'imageStyle:inline',
				'imageStyle:block',
				'imageStyle:side'
			]
		},
		table: {
			contentToolbar: [
				'tableColumn',
				'tableRow',
				'mergeTableCells'
			]
		}
	};
}

export default Editor;

第四步:编译 (Build)

在终端运行:

Bash

npm run build

发生了什么?

Webpack 会将所有代码打包。完成后,看你的项目目录,会多出一个 build/ 文件夹。

  • build/ckeditor.js: 这就是你要的唯一核心文件。它是完全离线的,包含了所有图标、逻辑和翻译。

第五步:如何应用到 Typecho

  1. build/ckeditor.js 复制到你的 Typecho 插件目录。

  2. 关于截图中的 “保存站外图片” 功能:

    • CKEditor 5 本身是前端库,它没有能力直接去下载远程图片。

    • 解决方案: 这个按钮需要在 Typecho 的 functions.php 或者插件 PHP 里写逻辑,然后在编辑器上方加一个自定义的 HTML 按钮(不属于 CKEditor 内部工具栏,而是作为 Typecho 后台界面的一部分),点击后触发 PHP 脚本去抓取内容里的图片。

想要更接近截图的“老旧”风格?

CKEditor 5 默认是现代扁平化风格。如果你非常喜欢截图里那种灰色的、有边框的立体感,你需要写一点 CSS 来覆盖默认样式。1

 

在 Typecho 后台引入这个 CSS:2

 

CSS

/* 让工具栏看起来更像截图 */
.ck-toolbar {
    background: #f6f6f6 !important; /* 灰色背景 */
    border-bottom: 1px solid #dcdcdc !important;
}
.ck-content {
    min-height: 400px; /* 默认高度 */
}

💡 下一步3

现在你手里已经有了 ckeditor.js4

 

你需要我为你提供一个 Typecho 插件的 Plugin.php 模版吗? 你只需要把编译好的 js 文件放进去,上传到服务器就能直接用了。56

 

发表回复