How to display multiple post in single blade by using two row(example starting post, expired_date post)

182 Views Asked by At

I have a category page and in this I want to display two types of box in single page, one is starting_post and old_post or expired. How can divide a single page in two part?

class FrontendController extends Controller
{
    public function welcome()
    {

        // @TODO Refactor This Line
        return view('welcome')

            ->with('title', Setting::first()->site_name)
            ->with('levels', Category::take(7)->get())

            ->with('levels', Category::take(7)->get())
            ->with('first_post', Post::orderBy('created_at','asc')->first())
            ->with('second_post', Post::orderBy('created_at', 'asc')->skip(1)->take(1)->get()->first())
            ->with('third_post', Post::orderBy('created_at','asc')->skip(2)->take(2)->get()->first())
            ->with('forth_post', Post::orderBy('created_at','asc')->skip(3)->take(3)->get()->first())
            ->with('HOME', Category::find(1))
            ->with('ABOUT US', Category::find(2))
            ->with('RESEARCH', Category::find(3))
            ->with('NEWS AND PUBLICATION', Category::find(4))
            ->with('EVENTS', Category::find(5))
            ->with('PEOPLE', Category::find(6))
            ->with('CONTACT US',Category::find(7));
    }

    public function singlePost($slug)
    {
        $post=Post::whereSlug($slug)->first();

        return view('single')->with('post', $post)
                       ->with('content', $post)
                       ->with('levels', Category::take(7)->get());
    }

    public function category($slug)
    {
       $category=Category::whereSlug($slug)->firstOrFail();

       return view($category->getTemplateFile())->with('category', $category)
                     ->with('title',$category->name)
                     ->with('levels', Category::take(7)->get());

    }

    public function events($slug)
    {
       $post = Post::where('slug', $slug)->first();

       $coming_events = Post::where('id', '>', $post->id)->desc('id');
       $past_events = Post::where('id', '<', $post->id)->asc('id');

       return view('events_blade')
                ->with('post', $post)
                ->with('categories', Category::take(7)->get())
                ->with('next', Post::find($coming_events))
                ->with('prev', Post::find($past_events));
    }
}

// View | blade

<div class="entry-meta">
<span>{{ \Carbon\Carbon::parse($post->date_time)->format('F j, Y') }}</span> 
<div>
<h class="entry-title">
{{ $post->title }}</h3> 
<div class="entry-content">
   <a target="_blank" href="{{ asset("$post->
      file") }}">
      <p style="font-size: 18px;color: #468b10;"> {{ $post->content }}</p>
   </a>
</div>
3

There are 3 best solutions below

12
Vikash Pathak On BEST ANSWER

Change your events function like this. Issue with your query builder and you are incorrect setting values for view.

public function events($slug)
{
   $post = Post::where('slug', $slug)->first();

   $coming_events = Post::where('id', '>', $post->id)->orderBy('id', 'desc')->get();
   $past_events = Post::where('id', '<', $post->id)->orderBy('id', 'asc')->get();

   return view('events_blade')
            ->with('post', $post)
            ->with('categories', Category::take(7)->get())
            ->with('coming_events', $coming_events)
            ->with('past_events', $past_events);
}

And inside the events_blade.blade.php loop on these two variables separetly.

// show upcoming events.

@foreach($coming_events as $ce)
  <div class="entry-meta">
  ...
  <h3> {{ $ce->title }}</h3> 
  ...
  </div>
@endforeach




// show past events.

@foreach($past_events as $pe)
  <div class="entry-meta">
  ...
  <h3> {{ $pe->title }}</h3> 
  ...
  </div>
@endforeach

Check the laravel documentation to setting values for blade for more details.

3
Julius Fasema On

try this

public function events($slug)
    {
       $post = Post::where('slug', $slug)->first();

       $data['coming_events'] = Post::where('id', '>', $post->id)->orderBy('id', 'desc')->get();
       $data['past_events'] = Post::where('id', '<', $post->id)->orderBy('id', 'asc')->get();

       return view('events_blade', $data)

    }



<div class="row">

   <div class="col-sm-4">
     <i>current events</i>
     @foreach($coming_events as $new)

           {{ $new->title}}

     @endforeach

    </div>
    <div class="col-sm-4">

    <i>Past events</i>
     @foreach($past_events as $old)

           {{ $old->title}}

     @endforeach

    </div> 
</div>
0
Julius Fasema On

then you have to do it this way:

public function events($slug)
{
       $post= Post::where('slug', $slug)->first();
       $data['post'] = Post::where('slug', $slug)->first();

       $data['coming_events'] = Post::where('id', '>', $post->id)->orderBy('id', 'desc')->get();
       $data['past_events'] = Post::where('id', '<', $post->id)->orderBy('id', 'asc')->get();

       data['categories']=Category::take(7)->get();

       return view('events_blade', $data)
}