2015-04-22 1 views
1

J'ai une route globale qui utilise layout.html qui spécifie le header.html. Je voudrais savoir comment:Créer une page de connexion/d'inscription avant le routage vers la page principale de Meteor?

1) avoir une page d'atterrissage principale pour la connexion/inscription avec le formatage approprié, sans l'en-tête. (Im using UserAccounts d'atmosphère mais le formatage est différent, je ne sais pas pourquoi). L'en-tête de layout.js ne peut pas non plus être supprimé.

2) Lors de la connexion/connexion, il devrait aller à la page principale.

Quelqu'un peut-il conseiller comment?

Router.configure({ 
     layoutTemplate: 'layout', //This is where header is specified globally 
     waitOn: function() { 
     return [Meteor.subscribe('notifications')] 
     } 
    }); 

Router.route('/', { 
    name: 'auth' 
}); //added this new line 

Router.route('/posts', { 
    name: 'home', 
    controller: NewPostsController 
}); 

var requireLogin = function() { 
    if (! Meteor.user()) { 
    if (Meteor.loggingIn()) { 
     this.render(this.loadingTemplate); 
    } else { 
     this.render('accessDenied'); 
    } 
    } else { 
    this.next(); 
    } 
} 

Router.onBeforeAction('dataNotFound', {only: 'postPage'}); 
Router.onBeforeAction(requireLogin, {only: 'postSubmit'}); 


C'est le layout.html défini globalement.

<template name="layout"> 
    <div class="container"> 
    {{> header}} 
    {{> errors}} 

    <div id="main"> 
     {{> yield}} 
    </div> 
    </div> 
</template> 

mise à jour après la suggestion de @ Chase. - Cela fonctionne sur le routage et l'en-tête est parti. - Le formatage est différent du site Web.

Ce que j'est illustré ci-dessous alors que son supposé ressembler http://useraccounts.meteor.com/ enter image description here

Répondre

2

En utilisant cette configuration, vous n'aurez pas besoin de définir la disposition avec en-tête pour chaque itinéraire.

Le package Comptes d'utilisateurs dispose d'un plug-in Iron Router pour garantir la connexion de l'utilisateur que j'utilise (more info). Je configure également les itinéraires fournis par le package Comptes d'utilisateurs (more info) afin que je puisse directement accéder à une page d'inscription Comptes d'utilisateurs.

Javascript

Router.configure({ 
    layoutTemplate: 'layout' //main layout with header 
}); 

//Iron router plugin to ensure user is signed in 
AccountsTemplates.configureRoute('ensureSignedIn', { 
    template: 'atTemplate', //template shown if user is not signed in 
    layoutTemplate: 'atLayout' //template for login, registration, etc 
}); 

//Don't require user to be logged in for these routes 
Router.plugin('ensureSignedIn', { 
    except: ['login', 'register'] 
}); 

//Configure route for login 
AccountsTemplates.configureRoute('signIn', { 
    name: 'login', 
    path: '/login', 
    template: 'atTemplate', 
    layoutTemplate: 'atLayout', 
    redirect: '/' 
}); 

//Configure route for registration 
AccountsTemplates.configureRoute('signUp', { 
    name: 'register', 
    path: '/register', 
    template: 'atTemplate', 
    layoutTemplate: 'atLayout', 
    redirect: '/' 
}); 

//Home page to show once logged in 
Router.route('/', { 
    name: 'home', 
    action: function(){ 
     this.render('home'); 
    } 
}); 

HTML

<template name="layout"> 
    <div class="container"> 
     {{> header}} 
     {{> errors}} 

     <div id="main"> 
      {{> yield}} 
     </div> 
    </div> 
</template> 

<template name="atLayout"> 
    <div class="at-container"> 
     {{> yield}} 
    </div> 
</template> 

<template name="atTemplate"> 
    {{> atForm}} 
</template> 
+0

Merci @Chase. Je ne peux pas sembler atteindre le même formatage que celui affiché sur le site. Est-ce que tu sais pourquoi? J'ai joint la photo ci-dessus. – Thinkerer

+0

Quel package de style UserAccounts utilisez-vous? – Chase

+0

J'utilise sémantique-ui. J'ai essayé avec styleless, le m et le p ... tout finit par le même. J'ai essayé de supprimer tous mes CSS ... ne fonctionne pas aussi. – Thinkerer

2

Vous pouvez créer 2 diferents modèles de mises en page avec une configuration différente.

Javascript

Router.configure({ 
     layoutTemplate: 'adminLayout', //layout without header 
    }); 

Router.route('/', { //main page, different layout 
    layout:layout, 
    name: 'auth' 
    }); 

HTML

<template name="adminLayout"> 
    <div class="container"> 
    {{> errors}} 
    <div id="main"> 
     {{> yield}} 
    </div> 
    </div> 
</template> 

Avec cela, vous aurez diferents mises en page, aux routes Diferentes.

+0

Salut Ethaan, juste pour clarifier. La route d'authentification que vous avez écrite n'utilise-t-elle pas le même adminLayout que le modèle de présentation? – Thinkerer

+0

c'était juste un exemple, laissez-moi le réparer. – Ethaan

+0

et vous avez un 'Router.configure ({ layoutTemplate: 'autht', // mise en page sans en-tête });'? – Ethaan