Laravel 使用 Markdown 做文章编辑后台

laravel中使用composer包编辑markdown文章

1.composer安装指定的包

composer require chenhua/laravel5-markdown-editor

2.在 config/app.php 中 providers 中添加

Chenhua\MarkdownEditor\MarkdownEditorServiceProvider::class,

3.修改 config/app.php 中 aliases 中添加

'MarkdownEditor' => Chenhua\MarkdownEditor\Facades\MarkdownEditor::class,

4.执行 artisan 命令,生成 config/markdowneditor.php 配置文件

php artisan vendor:publish --tag=markdown

5.修改 config/markdowneditor.php 配置文件

<?php
return [
    "default"     => 'local', //默认返回存储位置url.也可以设置七牛上传路径,阿里云存储文件等等
    "dirver"      => ['local'], //存储平台 ['local', 'qiniu', 'aliyun']
    "connections" => [
        "local"  => [
            'prefix' => 'uploads/markdown', //本地存储位置,默认uploads
        ],
        "qiniu"  => [
            'access_key' => '',
            'secret_key' => '',
            'bucket'     => '',
            'prefix'     => '', //文件前缀 file/of/path
            'domain'     => '' //七牛自定义域名
        ],
        "aliyun" => [
            'ak_id'     => '',
            'ak_secret' => '',
            'end_point'  => '',
            'bucket'    => '',
            'prefix'    => '',
        ],
    ],
];

6.创建view页面 index.blade.php.然后添加指定代码:

 <form method="post" action="{{route('admin.eidt')}}">
        <div id="test-editormd">
            <textarea name="test-editormd" style="display:none;"></textarea>
        </div>
        @include('markdown::encode',['editors'=>['test-editormd']])
        <button type="submit" class="btn btn-primary">提交</button>
    </form>
    <script>
    var testEditor = editormd("test-editormd",{
        width :"90%",
        height :640,
        path :"../vendor/markdown/lib/",
        saveHTMLToTextarea :true
  });
  testEditor.getHTML();// 获取 Textarea 保存的 HTML 源码\
</script>

7.创建控制器打开指定页面

  //主页显示
    public function index(Request $request)
    {
        return view('index');
    }
    //提交
    public function add(Request $request)
    {
        $content = $request->input('test-editormd-html-code');
        $article=Article::create($content);
    }

Laravel 融合 Markdown 做博客书写后台案例

总结

希望有能力的同学还是把markdown页面写到vue里面,不建议直接写到laravel项目里面,我这里只是一个案例测试.

补充:vue实现markdown

首先下载相关的包

npm install mavon-editor --save

编辑提交模板

<template>
    <div class="max-w">
        <el-form ref="form" :model="form" label-width="80px" @submit.prevent="onSubmit" style="padding-top:20px;">
            <el-form-item label="内容" >
                <mavon-editor v-model="form.content" :toolbars="toolbars" />//主要是加这一句话
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="onSubmit">提交</el-button>
                <el-button @click.native.prevent>取消</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

//设置输出方式
export default {
    name: 'markdown',
    data(){
        return {
            form: {
   title: '',
   tags: '',
   content: ''
},
 toolbars: {
  bold: true, // 粗体
  italic: true, // 斜体
  header: true, // 标题
  underline: true, // 下划线
  mark: true, // 标记
  superscript: true, // 上角标
  quote: true, // 引用
  ol: true, // 有序列表
  link: true, // 链接
  imagelink: true, // 图片链接
  help: true, // 帮助
  code: true, // code
  subfield: true, // 是否需要分栏
  fullscreen: true, // 全屏编辑
  readmodel: true, // 沉浸式阅读
  /* 1.3.5 */
  undo: true, // 上一步
  trash: true, // 清空
  save: true, // 保存(触发events中的save事件)
  /* 1.4.2 */
  navigation: true // 导航目录
  }
        }
    },
//ajax请求后端数据
     methods: {
       onSubmit() {
           let t = this;
           let form = t.form;
           addArticle({
content: form.content
  }).then((res)=>{
           if(res && res.code == 200){
           console.log('添加成功')
           this.$router.push({ path: "/list"});
              }
           })
       },

详情展示模板

<template>
  <div class="item max-w">
    <mavon-editor
      class="md"
     :value= "context.content"
     :subfield = "prop.subfield"
     :defaultOpen = "prop.defaultOpen"
     :toolbarsFlag = "prop.toolbarsFlag"
     :editable= "prop.editable"
     :scrollStyle= "prop.scrollStyle"
  ></mavon-editor>
  </div>
</template>
export default {
  name: 'detail',
  props: {
    msg: String
  },
  data(){
    return {
      context: '',
      articleDetail: '',
      prop: {
        subfield: false,// 单双栏模式
  defaultOpen: 'preview',//edit: 默认展示编辑区域 , preview: 默认展示预览区域 
 editable: false,
        toolbarsFlag: false,
        scrollStyle: true
  }
    }
  },
  //ajax请求后端数据
  methods: {
    getDetails(){
      let t = this;
      let id = t.$route.query.id;
      api.getDetail({
        id: id\
  }).then((res)=>{
        console.log(res)
        if(res && res.data && res.data && res.data.data){
          let result = res.data.data;
          t.context = result
       }
      })
    }
  },
  mounted() {
    let t = this;
    t.getDetails();
  },
}

后端控制器书写

//添加
  public function add(Request $request)
    {
        $article=Article::updateOrCreate(['id' => $request->id],$content );//这里直接存数据库就行
         return $this->output(null, '请求成功', STATUS_OK);
    }
//显示
    public function detail(ArticleIdRequest $request)
    {
        $data=Article::where('id',$request->id)->first();
        //直接从数据库拿出来就行,如果是laravel的composer包这里编辑的话需要有markdown的解析函数,
        //搭配。后端不用操心。
         return $this->output($data, '请求成功', STATUS_OK);
    }

显示效果

Laravel /Vue 融合 Markdown 编辑文章,超级实用简单
顺便再看下不同方式的数据库数据存储方式
Laravel /Vue 融合 Markdown 编辑文章,超级实用简单

总结

哈哈,这样就解放了后端的的很多操作。
一开始想着数据库直接存html页面,然后详情显示的时候再去解析,这样麻烦,直接让vue显示的时候只显示分栏的 一部分就好了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
cfun
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

请问如何将html再转换成markdown格式的,因为我将html从数据库中读取出来,需要显示到Markdown编辑页面中进行编辑修改

4年前 评论
代码的坏味道 (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!