如何突出Laravel 5.2的搜索结果?

时间:2016-08-16 22:35:30

标签: laravel laravel-5 laravel-5.2 laravel-5.1

在视图中:

@if($posts)
            @foreach($posts as$post)
                <h2>
                    <a href="{{route('home.post',$post->id)}}">{{$post->title}}</a>
                </h2>
                <p class="lead">
                    by <a href="index.php">{{$post->user->name}}</a>
                </p>
                <p><span class="glyphicon glyphicon-time"></span> Posted {{$post->created_at->diffForHumans()}}</p>
                <hr>
                <img class="img-responsive" src="{{$post->photo->file}}" alt="">
                <hr>
                {!! str_limit($post->body,35 )!!}
                <a class="btn btn-primary" href="{{route('home.post',$post->id)}}">Read More <span class="glyphicon glyphicon-chevron-right"></span></a>
                <hr>
            @endforeach
        @endif
控制器中的

public function searchmulti(){
        $keyword=Input::get('title');
        $posts = Post::where('title', 'like', "%$keyword%")->get();
        return view('Admin.comments.postsauthor',compact('posts'));
       }

/////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////

1 个答案:

答案 0 :(得分:1)

使用toArray()方法(see here)将搜索结果转换为数组,然后 迭代结果并使用str_replace将搜索到的单词替换为<span class="highlight">your word</span>

在此之后,您将$post['title'](而不是$post->title)内部突出显示的范围

当然,您必须在css中添加.highlight样式

$posts = Post::where('title', 'like', "%$keyword%")->get()->toArray();
foreach($posts as &$post){
  $post['title']=str_replace($keyword,"<span class='highlight'>$keyword</span>",$post['title']);
}

PS如果您不想将结果转换为数组,您可以直接在eloquent模型中编辑tile,但我更喜欢数组,以确保我不会意外地保存更改