laravel中使用markdown及语法高亮

栏目: PHP · 发布时间: 6年前

内容简介:laravel中使用markdown及语法高亮

composer create-project laravel/laravel=5.3 blog --prefer-dist

laravel中使用markdown及语法高亮

二、安装所需要的扩展包

  1. 切换到项目目录
cd blog
  1. 创建并修改数据库

  2. npm安装

npm install
	如果是淘宝镜像源用
	cnpm install
laravel中使用markdown及语法高亮

没有报错就算安装好了

  1. artisan生成登录注册模块
php artisan make:auth
  1. 执行迁移
php artisan migrate

因为上面的auth命令会生成这两个表,执行 php artisan migrate 迁移命令之后,就会自动创建好这两个表。

laravel中使用markdown及语法高亮
  1. 安装中文语言包
composer require "caouecs/laravel-lang:~3.0"

如果你不确定要安装什么版本或者包名称以及版本等,也可以这样使用

composer requre
通过关键词`lang`搜索
Search for a package: lang
输入关键词之后会列出所有关键词相关的包
Enter package # to add, or the complete package name if it is not listed: 1
然后输入对应数字就可以安装了
版本之类的默认可以了
laravel中使用markdown及语法高亮

安装之后将语言包移动到对应位置就好了,语言包默认位置是 resources/lang

cp -a vendor/caouecs/laravel-lang/src/zh-CN resources/lang

最后我们将本地语言改成 zh-CN 就好了 修改 config/app.phplocal 的值改为 zh-CN

laravel中使用markdown及语法高亮

三、安装laravel-admin后台管理

当然了,你也可以自己写一个后台模板。但毕竟费时费力,laravel后台有很多优秀的开源管理后台。为了方面快捷的演示,我们就选择laravel-admin这个管理后台。

项目:GitHub地址: z-song/laravel-admin

中文说明文档

  1. 安装laravel-admin
composer require encore/laravel-admin "1.3.*"
  • 注意:因为我们演示是使用的 laravel 5.3版本

当然也可以这样安装

composer requre
输入关键字`laravel-admin`
Enter package # to add, or the complete package name if it is not listed: 3
这列表项里选择 [3] `encore/laravel-admin`
Enter the version constraint to require (or leave blank to use the latest version): 1.3
注意我们这里版本不能选默认版本的,版本填1.3就好了。
laravel中使用markdown及语法高亮

config/app.php 加入 ServiceProvider:

Encore\Admin\Providers\AdminServiceProvider::class

然后运行下面的命令来发布资源:

php artisan vendor:publish --tag=laravel-admin
laravel中使用markdown及语法高亮

在该命令会生成配置文件config/admin.php,可以在里面修改安装的地址、数据库连接、以及表名。

然后运行下面的命令完成安装:

php artisan admin:install
laravel中使用markdown及语法高亮

启动服务后,在浏览器打开 http://localhost:8000/admin/ ,使用用户名 admin 和密码 admin登陆.

如果需要上传图片请参考文件上传设置

四、快速创建文章管理

  1. 创建迁移表
php artisan make:migration create_posts_table --create=posts
  1. 修改迁移表 database/2018_01_13_165831_create_posts_table.php
public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->text('title');
            $table->text('subtitle');
            $table->text('cover');
            $table->enum('type', ['0', '1', '2', '3', '4', '5', '9'])->default('0');
            $table->text('content');
            $table->timestamps();
        });
    }
  1. 执行迁移 php artisan migrate
laravel中使用markdown及语法高亮
  1. 创建文章模型和控制器

创建 Post 模型

php artisan make:model App\\Models\\Post
laravel中使用markdown及语法高亮

创建 PostController 控制器

php artisan admin:make PostController --model=App\\Models\\Post
laravel中使用markdown及语法高亮
  1. 新增一条路由 Admin/routes.php
$router->resource('/post', 'PostController');
  1. 修改 Admin/PostController 里面的 formgrid 两个方法
protected function grid()
    {
        return Admin::grid(Post::class, function (Grid $grid) {

            $grid->id('ID')->sortable();
            $grid->title('标题');
            $grid->subtitle('副标题');
            $grid->type('类型')->options([
                '0' => 'php',
                '1' => 'laravel',
                '2' => 'javascript',
                '3' => 'python',
                '4' => 'golang',
                '5' => 'linux',
                '9' => 'other'
            ]);
            $grid->cover('封面')->image();
            $grid->content('内容')->limit(100);
            $grid->created_at('创建时间');
            $grid->updated_at('修改时间');
        });
    }

    protected function form()
    {
        return Admin::form(Post::class, function (Form $form) {

            $form->display('id', 'ID');
            $form->text('title', '标题');
            $form->textarea('subtitle', '副标题')->rows(3);
            $form->select('type', '类型')->options([
                '0' => 'php',
                '1' => 'laravel',
                '2' => 'javascript',
                '3' => 'python',
                '4' => 'golang',
                '5' => 'linux',
                '9' => 'other'
            ]);
            $form->image('cover', '封面');
            $form->editor('content', '内容');
            $form->display('created_at', '创建时间');
            $form->display('updated_at', '修改时间');
        });
    }

创建一个文章表单,打开是这样的。laravel_admin默认是集成了 CKEditor

laravel中使用markdown及语法高亮

五、集成markdown编辑器

如何修改默认编辑器,请参考form组件管理部分

public/packages/admin/simplemde
app/Admin/Extensions/Simplemde.php
<?php

namespace App\Admin\Extensions;

use Encore\Admin\Form\Field;

class Simplemde extends Field
{
    protected $view = 'admin::form.editor';

    protected static $css = [
        '/packages/admin/simplemde/dist/simplemde.min.css',
    ];

    protected static $js = [
        '/packages/admin/simplemde/dist/simplemde.min.js',
    ];

    public function render()
    {
        $this->script = <<<EOT

 var simplemde = new SimpleMDE({
               autofocus: true,
                autosave: {
                    enabled: true,
                    delay: 5000,
                    unique_id: "editor01",
                },
                spellChecker: false,
            });

EOT;
        return parent::render();

    }
}
  1. 注册组件 在 app/Admin/bootstrap.php 中添加以下代码
<?php

/**
 * Laravel-admin - admin builder based on Laravel.
 * @author z-song <https://github.com/z-song>
 *
 * Bootstraper for Admin.
 *
 * Here you can remove builtin form field:
 * Encore\Admin\Form::forget(['map', 'editor']);
 *
 * Or extend custom form field:
 * Encore\Admin\Form::extend('php', PHPEditor::class);
 *
 * Or require js and css assets:
 * Admin::css('/packages/prettydocs/css/styles.css');
 * Admin::js('/packages/prettydocs/js/main.js');
 *
 */
use App\Admin\Extensions\Simplemde;
use Encore\Admin\Form;

Form::extend('editor', Simplemde::class);
  1. 使用 在控制器使用 $form->editor('content'); 就可以使用markdown编辑器了。
laravel中使用markdown及语法高亮

六、前端解析及语法高亮

  1. npm安装simplemde
npm install simplemde --save
  1. 引用 在 resources/assets/js/bootsrap.js 中引入simplemde
window.simplemde = require('simplemde');
  1. 编译 使用命令编译刚引入的资源,这样才可以编辑在 public/app.js 中
npm run dev
laravel中使用markdown及语法高亮
  1. 创建markdown解析类 segmentfault 的Markdown解析类: SegmentFault/HyperDown

Laravel 引入第三方类文件,我们在app目录下新建一个路径, app/Markdown ,并将下载的类文件 Parser.php 放在该目录下,然后再新建一个文件,引用该类,这样做的好处就是可以完全分离核心类文件,如同合约contacts 一样,如果以后我们的解析类变了,我们只需对核心类做改变,而其他应用的方法不需要再修改。

markdown.php 引用 parse.php 类:

laravel中使用markdown及语法高亮

App\Markdown\Markdown.php

<?php

namespace App\Markdown;

/**
 * Class Markdown
 *
 * @package \App\Markdown
 */
class Markdown
{
    protected $parser;

    /**
     * Markdown constructor.
     *
     * @param $parser
     */
    public function __construct(Parser $parser)
    {
        $this->parser = $parser;
    }

    public function markdown($text)
    {
        $html = $this->parser->makeHtml($text);

        return $html;
    }


}

在引用第三方类后,需要执行下面命令进行自动加载:

composer dump-autoload

使用方法

<?php

protected $markdown;
public function __construct(Markdown $markdown)
{
   $this->markdown = $markdown;
}

// 解析Markdown 内容
$this->markdown->markdown($article->content);
  1. markdown语法高亮 一个非常简洁的 Markdown 样式文件 Gist: corwien/Markdown.scss

将该文件下载放在Laravel中 resources/assets/css/vendor/markdown.scss ,然后在 resources/sass/app.scss 中引入

// Markdown

// 代码高亮
import "./../css/vendor/highlight.min";

// 编辑器样式文件
import "./../css/vendor/simplemde.min";

// 引入markdown样式文件
import "./../css/vendor/markdown.scss";

然后编译前端资源文件:

npm run dev

这样,该markdwon样式文件就编译到前端资源文件中了。

我们可以在前端的内容字段处引入 class="markdown" 样式,然后看看渲染效果: article.blade.php

<div class="markdown" >
       {!! $article->content !!}
    </div>

七、完成前台markdwon解析及高亮显示

  1. 创建一条路由 route/web.php
Route::resource('/article', 'ArticleController');
  1. 创建控制器 ArticleController
php artisan make:controller ArticleController
  1. 创建文章列表及详情页模板 在 resource\home\article 下创建 index.blade.phplist.blade.php

index.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
	<div class="row">
		<div class="col-md-8 col-md-offset-2">
			<div class="panel">
				<h2>文章列表页</h2>
			</div>
			@foreach ($data as $list)
			<div class="panel panel-default">
				<h3><a href="/article/{!! $list->id !!}">{!! $list->title !!}</a></h3>
				<div class="panel-heading">
					{!! $list->subtitle !!}
				</div>

				<div class="panel-body" style="max-width:100%;height:300px;overflow:hidden;">
					<a href="/article/{!! $list->id !!}">
						<img src="/upload/{!! $list->cover !!}" style="max-width:100%;">
					</a>
				</div>
				<div class="panel-footer">
					{!! $list->created_at !!}
				</div>
			</div>
			@endforeach

			{!! $data->links() !!}
		</div>
	</div>
</div>
@endsection

list.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <h3><a href="/article/{!! $data->id !!}">{!! $data->title !!}</a></h3>
                <div class="panel-heading">
                    {!! $data->subtitle !!}
                </div>
                <div class="panel-body">
                    <div class="markdown">
                        {!! $data->content !!}
                    </div>
                </div>
                <div class="panel-footer">
                    {!! $data->created_at !!}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
  1. 修改 ArticleController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Post;
use App\Markdown\Markdown;

class ArticleController extends Controller
{
    protected $markdown;
    public function __construct(Markdown $markdown)
    {
       $this->markdown = $markdown;
    }

    public function index()
    {
    	$data = Post::paginate(5);
    	return view('home.article.index', compact('data'));
    }

    public function show($id)
    {
    	$data = Post::find($id);
        $data->content = $this->markdown->markdown($data->content);
    	return view('home.article.list', compact('data'));
    }
}

列表页效果图

laravel中使用markdown及语法高亮

详情页及高亮效果图

laravel中使用markdown及语法高亮
  1. google地图的问题 因为laravel-admin默认加载了google地图,网页加载会非常慢。 修改一下源码即可。 /vendor/encore/laravel-admin/src/Form/Field/Map.php
public static function getAssets()
    {
		// 将语言包判断`zh_CN`改为`zh-CN`,因为语言包我们默认的就是`zh-CN`
        if (config('app.locale') == 'zh-CN') {
            $js = 'http://map.qq.com/api/js?v=2.exp';
        } else {
            $js = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&key='.env('GOOGLE_API_KEY');
        }

        return compact('js');
    }

八、markdown侧边栏

生成文章侧边栏

<script type="text/javascript">
 $(document).ready(function(){
      $("h2,h3,h4,h5,h6").each(function(i,item){
        var tag = $(item).get(0).localName;
        $(item).attr("id","wow"+i);
        $("#category").append('<a class="new'+tag+'" href="#wow'+i+'">'+$(this).text()+'</a></br>');
        $(".newh2").css("margin-left",0);
        $(".newh3").css("margin-left",20);
        $(".newh4").css("margin-left",40);
        $(".newh5").css("margin-left",60);
        $(".newh6").css("margin-left",80);
      });
 });
</script>
<div id="category"></div>

效果图

laravel中使用markdown及语法高亮

markdown解析部分基本上参考 Corwlen 大神的Laravel5.4 博客开发

关于 laravel-admin 使用,可以去laravel-admin官网阅读说明文档

原文链接 www.bear777.com/blog/larave…

github地址 github.com/pandoraxm/l…


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java解惑

Java解惑

(美)布洛克·加夫特 / 陈昊鹏 / 人民邮电出版社 / 2010-11-22 / 49.00元

你认为自己了解Java多少?你是个爱琢磨的代码侦探吗?你是否曾经花费数天时间去追踪一个由Java或其类库的陷阱和缺陷而导致的bug?你喜欢智力测验吗?本书正好适合你! Bloch和Gafter继承了Effective Java一书的传统,深入研究了Java编程语言及其核心类库的细微之处。本书特写了95个噩梦般的谜题,中间穿插着许多有趣的视觉幻象,寓教于乐。任何具备Java知识的人都可以理解这......一起来看看 《Java解惑》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具