以下是一个Discuz! X Markdown插件的完整实现方案,包含必要的文件结构和代码实现:
目录结构:
source/plugin/
└── markdown/
├── static/
│ ├── css/
│ │ └── editormd.min.css
│ ├── js/
│ │ ├── editormd.min.js
│ │ └── jquery.min.js
│ └── lib/
│ └── parsedown/
│ └── Parsedown.php
├── template/
│ ├── editor.htm
│ └── viewthread.htm
├── plugin.markdown.php
├── install.php
└── uninstall.php
1.plugin.markdown.php(插件主文件):
<?php
if(!defined('IN_DISCUZ')) exit('Access Denied');
class plugin_markdown {
public function common() {
require_once DISCUZ_ROOT.'./source/plugin/markdown/static/lib/parsedown/Parsedown.php';
}
}
class plugin_markdown_forum extends plugin_markdown {
public function viewthread_postcontent_output($output) {
global $post;
if($post['markdown']) {
$Parsedown = new Parsedown();
$output['message'] = $Parsedown->text($post['message']);
}
return $output;
}
}
class plugin_markdown_portal extends plugin_markdown {}
class plugin_markdown_home extends plugin_markdown {}
2.install.php(安装脚本):
<?php
if(!defined('IN_DISCUZ')) exit('Access Denied');
$sql = <<<SQL
ALTER TABLE `pre_forum_post` ADD `markdown` TINYINT(1) NOT NULL DEFAULT '0';
SQL;
runquery($sql);
$finish = true;
3.uninstall.php(卸载脚本):
<?php
if(!defined('IN_DISCUZ')) exit('Access Denied');
$sql = <<<SQL
ALTER TABLE `pre_forum_post` DROP COLUMN `markdown`;
SQL;
runquery($sql);
$finish = true;
4.template/editor.htm(编辑器模板):
<script src="{$_G['siteurl']}source/plugin/markdown/static/js/jquery.min.js"></script>
<link rel="stylesheet" href="{$_G['siteurl']}source/plugin/markdown/static/css/editormd.min.css">
<script src="{$_G['siteurl']}source/plugin/markdown/static/js/editormd.min.js"></script>
<script>
$(document).ready(function() {
var editor = editormd("editor-md", {
path : "{$_G['siteurl']}source/plugin/markdown/static/lib/",
height : 500,
syncScrolling : "single",
saveHTMLToTextarea : true,
emoji : true,
tex : true,
flowChart : true,
sequenceDiagram : true
});
});
</script>
<div id="editor-md">
<textarea name="message" style="display:none;"></textarea>
</div>
5.template/viewthread.htm(帖子显示模板):
<style>
.markdown-body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
word-wrap: break-word;
}
</style>
<div class="markdown-body">
<!--{if $post['markdown']}-->
{$post['message']}
<!--{else}-->
<!--{eval echo $post['message'];}-->
<!--{/if}-->
</div>
使用说明:
- 将插件文件夹上传到
source/plugin/
目录
- 进入Discuz!后台安装插件
- 下载Editor.md资源文件并放置到static目录
- 修改发帖模板以加载Markdown编辑器
注意事项:
-
需要下载以下依赖库:
-
需要在Discuz!的帖子表(pre_forum_post)中添加markdown字段用于标识是否使用Markdown格式
-
需要修改Discuz!的帖子发布逻辑以保存markdown字段状态
-
可根据需要调整Editor.md的配置选项和样式
该插件实现了:
- Markdown编辑器集成
- Markdown内容解析显示
- 兼容原有UBB内容
- 基本的Markdown语法支持(表格、代码块、流程图等)
可根据实际需求扩展以下功能:
- Markdown语法开关设置
- 用户组权限控制
- 内容转换工具
- 代码高亮支持
- LaTeX数学公式支持