nikolay-oskin / contents
Laravel 包,用于生成帖子、新闻、文章等文本的目录表
dev-master
2019-05-26 23:03 UTC
Requires
- php: ^7.0
- illuminate/support: 5.5.*
Requires (Dev)
- phpunit/phpunit: ^6.4
This package is auto-updated.
Last update: 2024-09-27 11:00:53 UTC
README
此包根据输入文本中的 h2-h6 HTML 标签为您提供的帖子、新闻、文章等提供可点击的目录表。
用法
假设您有一些存储在数据库中的帖子(来自 WYSIWYG 编辑器或其他内容),其外观如下
<h2>First h2 header</h2>
<p>Some text</p>
<h3>First h3 header</h3>
<p>Some text</p>
<h3>2nd h3 header</h3>
<p>Some text</p>
<h4>First h4 header</h4>
<p>Some text</p>
<h4>2nd h4</h4>
<p>Some text</p>
<h2>Latest header</h2>
您有一个 PostController,其中包含 show() 方法,该方法将您的 Post 模型对象数据发送到您的视图。
public function show ($id) { $post = Post::find($id); $header = $post->title; $body = $post->body; return view('post', compact('header', 'body'); }
您的 'post.blade.php' 视图非常简单,如下所示
<div> <h1>{{$header}}</h1> {!! $body !!} </div>
这就是您如何在控制器中使用此包生成“目录表”的方法
public function show ($id, Contents $contents) { $post = Post::find($id); $header = $post->title; $body = $contents->fromText($post->body)->getHandledText(); $contents = $contents->getContents(); return view('post', compact('header', 'body', 'contents'); }
现在您已经传递了包含您的标题标签的“contents”数组。同时,如您所见,您还传递了“handledText”,它包含标题 HTML 标签中的 id 属性。
您的视图
<div> <h1>{{$header}}</h1> @if(!empty($contents)) @include('nikolay-oskin.contents.table', $contents) @endif {!! $post !!} </div>
table.blade.php 是带有 ul-li 标签的视图,您可以在其中添加 CSS 样式或进行其他自定义。
结果
选项
默认情况下,为 h2-h6 标签创建内容。您可以为包含在“目录表”中的标题标签设置。
示例
public function show ($id, Contents $contents) { $post = Post::find($id); $contents->fromText($post->body)->setTags(['h2', 'h3']); $body = $contents->getHandledText(); $contents = $contents->getContents(); return view('post', compact('body', 'contents'); // Only h2 and h3 headers will be added to table of contents }
您还可以设置文本的最小长度数字,如果文本长度低于此数字,则 $contents 数组将为空,并且 $contents->getHandledText() 返回原始文本。
示例
public function show ($id, Contents $contents) { $post = Post::find($id); $contents->fromText($post->body)->setTags(['h2', 'h3'])->setMinLength(5000); $body = $contents->getHandledText(); $contents = $contents->getContents(); return view('post', compact('body', 'contents'); // Table of contents will not be shown for texts length less than 5000 chars. }
安装
适用于 Laravel 5.5+
composer require nikolay-oskin/contents
将视图复制到您的 resource/views 目录
php artisan vendor:publish --provider="NikolayOskin\Contents\ContentsServiceProvider"
许可证
MIT