laravel中使用markdown及语法高亮

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

内容简介: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…


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

查看所有标签

猜你喜欢:

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

Python for Everyone

Python for Everyone

Cay S. Horstmann、Rance D. Necaise / John Wiley & Sons / 2013-4-26 / GBP 181.99

Cay Horstmann's" Python for Everyone "provides readers with step-by-step guidance, a feature that is immensely helpful for building confidence and providing an outline for the task at hand. "Problem S......一起来看看 《Python for Everyone》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具