Gor
Gor

Reputation: 505

Sailsjs: Multiple Layouts

I realize this is the same issue raised here: How to use multiple layout within a SailsJS app?. I'm not sure if something has changed with Sails.js or I'm just a numbskull. Hoping someone can help...

The application I'm developing has two sides to it, a public side, and an admin side. For the life of me, I cannot get a view to use a different layout than the default. I'm using the default "ejs" templating engine.

The location of the alternate layout resides here:

/views/layoutadmin.ejs

Here's my /config/routes.js file:

module.exports.routes = {

  '/': {
    view: 'home/index'
  },

  '/dashboard': {
    view: 'admin/index'
    ,controller: 'dashboard'
    ,action: 'index'
  }

};

Here's my /api/controllers/DashboardController.js file:

module.exports = {

  index: function (req, res) {
    res.view({ layout: 'layoutadmin' });
  }

};

Upvotes: 2

Views: 1896

Answers (2)

Marcelo Boeira
Marcelo Boeira

Reputation: 880

You could create a policy and change the layout in it: Check this out: https://github.com/vimia/blew/blob/master/api/policies/isPjaxRequest.js

I change the layout with the param...

You can create a isAdminModule policy, at config/policies.js, put something like:

AdminController: [ '*': 'isAdminModule']

Then all the admin requests will have another layout...

Upvotes: 2

sgress454
sgress454

Reputation: 24948

The problem here is that you're specifying both a view and a controller/action in your route config. You can only do either/or. You want:

module.exports.routes = {

  '/': {
    view: 'home/index'
  },

  '/dashboard': {
    controller: 'dashboard'
    ,action: 'index'
  }

};

And in DashboardController:

module.exports = {

  index: function (req, res) {
    res.view('admin/index', { layout: 'layoutadmin' });
  }

};

Upvotes: 2

Related Questions