Jordan Doyle
Jordan Doyle

Reputation: 3026

Conditional extends in Blade

Is there any way to do a conditional @extends statement in the Blade templating language?

What I've tried:

@if(!Request::ajax())
    @extends('dashboard.master')
    @section('content')
@endif

<div class="jumbotron">
    Hey!
</div>

@if(!Request::ajax())
    @stop
@endif

Output

When the request was not AJAX it printed out @extends('dashboard.master'), but the AJAX request worked fine.

What I'm trying to do

Stop including the master template (which includes header and footer) for AJAX so it can easily display the requested content

Upvotes: 20

Views: 16045

Answers (3)

Christopher Raymond
Christopher Raymond

Reputation: 1235

@extends((( Request::ajax()) ? 'layouts.ajax' : 'layouts.default' ))

Upvotes: 76

itachi
itachi

Reputation: 6393

in the master layout:

   @if(!Request::ajax())

       //the master layout with @yield('content'). i.e. your current layout

   @else

       @yield('content')

   @endif

Upvotes: 12

Adam Lavin
Adam Lavin

Reputation: 783

This kind of logic should really be kept out of the template.

In your controller set the $layout property to be dashboard.master then instead of calling returning your view or response, terminate with just $this->layout->content = View::make('dashboard.template')

Take a look at the Laravel docs on this

You could end up with something like this

<?php

class Something extends BaseController {

    $layout = 'dashboard.master';

    public function getIndex()
    {
        $template = View::make('dashboard.template');

        if(Request::ajax()) {
            return $template;
        }

        $this->layout->content = $template;
    }
}

Upvotes: 3

Related Questions