【问题标题】:Displaying feeds and blogs according to the created time根据创建时间显示提要和博客
【发布时间】:2016-11-16 14:51:50
【问题描述】:

我有一个主页,其中显示了所有提要以及 cmets 和博客。现在它首先显示所有提要,然后显示博客。但我希望它应该根据创建时间显示,提要和博客的混合器不像第一个提要然后博客。谁能告诉我如何实现这一点。这是我的 index.blade.php

@extends('layouts/default')

{{-- Page title --}}
@section('title')
Home
@parent
@stop

{{-- page level styles --}}
 @section('header_styles')
<!--page level css starts-->
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/frontend/action.css') }}">
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/frontend/tabbular.css') }}">
<link rel="stylesheet" type="text/css" href="{{ asset('assets/css/frontend/jquery.circliful.css') }}">
<link rel="stylesheet" type="text/css" href="{{ asset('assets/vendors/owl.carousel/css/owl.carousel.css') }}">
<link rel="stylesheet" type="text/css" href="{{ asset('assets/vendors/owl.carousel/css/owl.theme.css') }}">
<!--end of page level css-->
@stop

{{-- content --}}
@section('content')

<div class="row">
    <div class="column col-md-1 col-xs-1 col-sm-1"></div>
    <div class="column col-md-3 col-xs-3 col-sm-3"><!--gm-editable-region--> </div>

    <div class="column col-md-4 col-xs-4 col-sm-4">

       @include ('action.partials.form')

       @include ('action.partials.error')

       @include ('action.partials.feed')

       @include ('action.partials.blogfeed')

    </div>

    <div class="column col-md-3 col-xs-3 col-sm-3"><!--gm-editable-region--></div>
    <div class="column col-md-1 col-xs-1 col-sm-1"></div>

@stop
{{-- footer scripts --}}
@section('footer_scripts')
<!-- page level js starts-->
<script type="text/javascript" src="{{ asset('assets/js/frontend/jquery.circliful.js') }}"></script>
<script type="text/javascript" src="{{ asset('assets/vendors/owl.carousel/js/owl.carousel.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('assets/js/frontend/carousel.js') }}"></script>
<script type="text/javascript" src="{{ asset('assets/js/frontend/index.js') }}"></script>
<!--page level js ends-->

@stop

这是 action.partials.feed

@foreach($feeds as $feed)
<article class="media">
    <div class="well">
        <div class="pull-left"> 
            <img class="profile" src="{{ URL::to('/uploads/users/'.$feed->user->pic)  }}" class="img-responsive" alt="Image" style="width:48px;height:48px;padding-right : 10px;padding-bottom: 5px;">
         </div>
        <strong>{{ $feed->user->first_name }} 
                {{ $feed->user->last_name }}
                <small> posted </small>
         </strong>
                {{ $feed->created_at->diffForHumans() }}<br><hr>
                {{ $feed->feed_content }}

            <hr>
            {!! Form::open(['url' => 'home/{storecomment}']) !!}
                <div><input type="hidden" name="feed_id" value="{{ $feed->feed_id }}" /></div>
                <div class="form-group">
                    {!! Form::text('comment', null, ['class'=>'form-control', 'rows'=>3, 'placeholder'=>"Comment"]) !!}
                </div>

                <div class="form-group feed_post_submit">
                    <a href="/home">{!! Form::submit('Comment', ['class' => 'btn btn-default btn-xs']) !!}</a>
                </div>
            {!! Form::close() !!}

            @foreach($feed->comments as $comment)
                <div class="pull-left"> 
                    <img class="profile" src="{{ URL::to('/uploads/users/'. $comment->user->pic)  }}" class="img-responsive" alt="Image" style="width:48px;height:48px;padding-right : 10px;padding-bottom: 5px;">
                </div>
                {{ $comment->user->first_name }} 
                {{ $comment->created_at->diffForHumans() }}
                {{ $comment->comment }}<hr>
            @endforeach
    </div>
</article>
@endforeach

action.partials.blogfeed

@foreach($blogs as $blog)
<article class="media">
    <div class="well">
        <div class="pull-left"> 
            <img class="media-object" src="{{ URL::to('/uploads/users/'.$blog->user->pic)  }}" class="img-responsive" alt="Image" style="width:48px;height:48px;padding-right : 10px;padding-bottom: 5px;">
        </div>
        <strong>{{ $blog->user->first_name }} 
                {{ $blog->user->last_name }}
                <small> posted blog</small>
        </strong>
                {{ $blog->created_at->diffForHumans() }}<br><hr>
                <h4><a href="{{ URL::to('blogitem/'.$blog->slug) }}">{{ $blog->title }}</a></h4>
                <div class="featured-post-wide thumbnail">
                     @if($blog->image)
                        <img src="{{ URL::to('/uploads/blog/'.$blog->image)  }}" class="img-responsive" alt="Image">
                     @endif
                 </div>
        </div>
</article>
@endforeach

这是我的 feedcontroller

<?php

namespace App\Http\Controllers;

use Request;
use Auth;
use Sentinel;
use App\Feed;
use App\Http\Requests;
use App\Blog;
use App\Http\Controllers\Controller;
use App\Comment;

class FeedsController extends Controller
{
    public function index() {

  // $comments = Comment::latest()->get();
  $feeds = Feed::with('comments', 'user')->where('user_id', Sentinel::getUser()->id)->latest()->get(); 
  $blogs = Blog::latest()->simplePaginate(5);
  $blogs->setPath('blog');
  return view('action.index', compact('feeds', 'blogs'));
}

public function store(Requests\CreateFeedRequest $request)
{
  $request->merge( [ 'user_id' => Sentinel::getuser()->id] );
  Feed::create($request->all());
  return redirect('home');
}

 public function storecomment(Requests\CommentRequest $request, Feed $feed)
 {

  $comment = new Comment;
  $comment->user_id =Sentinel::getuser()->id;
  $comment->feed_id = $request->feed_id;
  $comment->comment = $request->comment;
  $comment->save();
  return redirect('/home');
}  
}

谁能告诉我如何根据发布时间显示提要和博客。

【问题讨论】:

  • 请同时显示控制器。
  • 您要查找的内容需要数组合并和排序,然后更改视图
  • 你整理好了吗?
  • 不,实际上我现在正忙于处理其他一些问题,我会尽快检查并通知您。
  • 不赶时间 - 只是好奇。

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


【解决方案1】:

在您的控制器 index 方法中,尝试这样的操作:

public function index() {
    // $feeds = Feed::with('comments', 'user')->where('user_id', Sentinel::getUser()->id)->latest()->get(); 
    // $blogs = Blog::latest()->simplePaginate(5);
    // $blogs->setPath('blog');

    $feeds = Feed::with('comments', 'user')->where('user_id', Sentinel::getUser()->id)->latest()->get();
    $blogs = Blog::latest()->paginate(5);
    $feeds = $feeds->merge($blogs)->sortByDesc('created_at');

    return view('action.index', compact('feeds'));
}

您将遇到的最大问题是您的Feed 对象可能与您的Blog 对象不同。这意味着每个都将具有另一个没有的唯一列名。这会让foreach 变得一团糟……

删除@include ('action.partials.blogfeed')。这与我们不再相关。

action.partials.feed...我们将全部输出(希望没有太多“hacks”和条件):

@foreach($feeds as $feed)
    <article class="media">
        <div class="well">
            <div class="pull-left"> 
                <img class="profile" src="{{ URL::to('/uploads/users/'.$feed->user->pic)  }}" class="img-responsive" alt="Image" style="width:48px;height:48px;padding-right : 10px;padding-bottom: 5px;">
            </div>

            <strong>
                {{ $feed->user->first_name }} 
                {{ $feed->user->last_name }}
                <small> posted </small>
            </strong>            

            // We'll use @if(isset($feed->title)) to check if it's a blog post, aka ugly hack.
            @if(isset($feed->title))
                {{ $blog->created_at->diffForHumans() }}
                <br><hr>
                <h4><a href="{{ URL::to('blogitem/'.$blog->slug) }}">{{ $blog->title }}</a></h4>
                <div class="featured-post-wide thumbnail">
                     @if($blog->image)
                        <img src="{{ URL::to('/uploads/blog/'.$blog->image)  }}" class="img-responsive" alt="Image">
                     @endif
                 </div>
            @else
                {{ $feed->created_at->diffForHumans() }}<br><hr>
                {{ $feed->feed_content }}

                <hr>

                {!! Form::open(['url' => 'home/{storecomment}']) !!}
                    <div><input type="hidden" name="feed_id" value="{{ $feed->feed_id }}" /></div>
                    <div class="form-group">
                        {!! Form::text('comment', null, ['class'=>'form-control', 'rows'=>3, 'placeholder'=>"Comment"]) !!}
                    </div>

                    <div class="form-group feed_post_submit">
                        <a href="/home">{!! Form::submit('Comment', ['class' => 'btn btn-default btn-xs']) !!}</a>
                    </div>
                {!! Form::close() !!}

                @foreach($feed->comments as $comment)
                    <div class="pull-left"> 
                        <img class="profile" src="{{ URL::to('/uploads/users/'. $comment->user->pic)  }}" class="img-responsive" alt="Image" style="width:48px;height:48px;padding-right : 10px;padding-bottom: 5px;">
                    </div>
                    {{ $comment->user->first_name }} 
                    {{ $comment->created_at->diffForHumans() }}
                    {{ $comment->comment }}<hr>
                @endforeach
            @endif     
        </div>
    </article>
@endforeach

【讨论】:

    【解决方案2】:

    因为Illuminate\Database\Eloquent 扩展了Illuminate\Support\Collection,我们可以轻松地将它们合并在一起。因为$feeds$blogs 都是Eloquent Collection,我们可以轻松地将它们合并为一个集合:

     $feeds_and_blogs = collect($feeds->toArray(), $blogs->toArray());
    

    现在您将拥有两者的结合。因为您在迁移中使用了$table-&gt;timestamps() 来获取列,所以我们可以轻松地与created_at 时间戳进行比较以获得您想要的排序:

    $sorted_feeds_and_blogs = $feeds_and_blogs->sortBy(function($item){
        return $item->created_at;
    });
    

    但是,您可能希望它们首先按newest 排序。值得庆幸的是,collections 有一个 sortByDesc 函数,它可以完全满足我们的需求。

    虽然从整体上看,您可能真的想要Polymorphic relationship

    【讨论】:

    • @MikeBarwick 让我看看我能为你想出什么。与此同时,here's a good read 来自另一个关于多态实现的答案。
    • 我不是提问者,只是好奇。我会读一读。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2015-05-29
    • 2013-09-25
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    相关资源
    最近更新 更多