xaav
xaav

Reputation: 7926

Change admin layout in CakePHP

I am working in cakephp, and I have the following two lines in my /app/config/routes.php file:

/**
 * ...and setup admin routing
 */
 Router::connect('/admin/:controller/:action/*', array('action' => null, 'prefix' => 'admin', 'admin' => true, 'layout' => 'admin' ));
/**
 * ...and set the admin default page
 */
 Router::connect('/admin', array('controller' => 'profiles', 'action' => 'index', 'admin' => true, 'layout' => 'admin'));

I also have a layout at /app/views/layouts/admin.ctp

However, the layout is not changed when I visit admin URLs

Upvotes: 9

Views: 14811

Answers (5)

Tomas Gonzalez
Tomas Gonzalez

Reputation: 1175

For CakePHP 3.X you should edit your src/View/AppView.php file and add the following code to your initialize() method:

public function initialize()
{
    if ($this->request->getParam('prefix') === 'admin') {
        $this->layout = 'Plugin.layout';
    }
}

Upvotes: 1

user5625924
user5625924

Reputation: 1

For cakephp 3.0 you can set a view variable by calling Auth->user in the beforeRender in AppController. This is my beforeRender:

public function beforeRender(Event $event)
{
    ///...other stuff

    $userRole = $this->Auth->user();
    $this->set('userRole', $userRole['role']);
}

Upvotes: 0

Chris Pierce
Chris Pierce

Reputation: 736

the approaches above are good but if you are looking to change the layout for every page when logged in you might try the following using Auth Component

function beforeFilter() {
    if ($this->Auth->user()) {
        $this->layout = 'admin';
    }
}

Upvotes: 0

nusrat
nusrat

Reputation: 29

Add this code in beforeFilter() function in app_controller.php

<?php    

class AppController extends Controller {

function beforeFilter() {
    if (isset($this->params['prefix']) && $this->params['prefix'] == 'admin') {
        $this->layout = 'admin';
    } else {
       $this->layout = 'user';  
    } 

    }

}
?>

Set layout='admin' in routes.php

<?php    
Router::connect('/admin', array('controller' => 'users', 'action' => 'index','add', 'admin' => true,'prefix' => 'admin','layout' => 'admin'));
?>

Upvotes: 3

Marko
Marko

Reputation: 3599

Create a app/app_controller.php and put this in:

<?php
class AppController extends Controller {

    function beforeFilter() {
        if (isset($this->params['prefix']) && $this->params['prefix'] == 'admin') {
            $this->layout = 'admin';
        } 
    }

}

Don't forget to call parent::beforeFilter(); in your controllers if you use it in other controllers.

Semi related to the question, you don't need the routes defined, you just need to enable Routing.admin config option and set it to admin in the app/config/core.php. (CakePHP 1.2)

Upvotes: 30

Related Questions