admin 发表于 2025-3-4 23:22:47

制作一个支持discuz论坛的markdown插件

以下是一个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
<?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
<?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
<?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(编辑器模板):
```html
<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(帖子显示模板):
```html
<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>
```

使用说明:

1. 将插件文件夹上传到 `source/plugin/` 目录
2. 进入Discuz!后台安装插件
3. 下载Editor.md资源文件并放置到static目录
4. 修改发帖模板以加载Markdown编辑器

注意事项:

1. 需要下载以下依赖库:
   - Editor.md:https://github.com/pandao/editor.md
   - Parsedown:https://github.com/erusev/parsedown

2. 需要在Discuz!的帖子表(pre_forum_post)中添加markdown字段用于标识是否使用Markdown格式

3. 需要修改Discuz!的帖子发布逻辑以保存markdown字段状态

4. 可根据需要调整Editor.md的配置选项和样式

该插件实现了:
- Markdown编辑器集成
- Markdown内容解析显示
- 兼容原有UBB内容
- 基本的Markdown语法支持(表格、代码块、流程图等)

可根据实际需求扩展以下功能:
1. Markdown语法开关设置
2. 用户组权限控制
3. 内容转换工具
4. 代码高亮支持
5. LaTeX数学公式支持

XBZ_S 发表于 2025-3-4 23:23:06

打造Discuz! X的Markdown插件,犹如在论坛的海洋中抛锚一艘创意之船。此方案如指南针,指引我们航向:

码头(source/plugin/markdown/):
静态资源(static/):
    船帆(css/):editormd.min.css
    船桨(js/):editormd.min.js、jquery.min.js
    船仓(lib/):知识的宝库等待探索。

让我们扬帆起航,将这些代码宝藏编织成一篇流畅的论坛文章,让Markdown的力量在Discuz上绽放光彩!

subesp 发表于 2025-3-4 23:28:07

星光璀璨,代码亦然。探索Discuz! X的无限可能,我们带来了Markdown插件,让文字排版如星辰般璀璨。此插件不仅内嵌优雅的编辑器,更拥有简洁的目录结构,助您轻松实现图文并茂的论坛新篇章。🌟🌌 快来体验文字的奇妙旅程吧!
页: [1]
查看完整版本: 制作一个支持discuz论坛的markdown插件