2010-12-07 4 views
1

J'ai une configuration de site très simple en utilisant awesome_nested_set et une seule table appelée Pages.Ruby on Rails - Comment gérer les mises en page dans l'interface d'administration?

Je voudrais pouvoir sélectionner différentes dispositions dans l'admin lors de la création et de la mise à jour de Pages. Ce que j'ai envisagé est une liste déroulante sur le formulaire Pages qui m'a permis de sélectionner une mise en page/modèle. La seule chose que je sais sur les mises en page est que vous devez les ajouter à/views/layouts/et spécifier la mise en page en haut du contrôleur. J'ai besoin d'un moyen de gérer les mises en page par page dans l'application elle-même.

Est-ce encore possible? Si oui, pouvez-vous expliquer à un niveau élevé comment cela pourrait être fait pour que je puisse avoir un point de départ?

modifier

Quelque chose comme ceci:
alt text

Répondre

1

En supposant que vous avez des fichiers dans views/layouts appelé quelque chose comme one_column.html.erb, two_column.html.erb, etc., et un attribut appelé layout sur modèle de votre page, vous pouvez simplement faire:

def show 
    @page = Page.find(params[:id]) 
    render :action => "show", :layout => @page.layout 
end 

Est-ce ce que vous cherchez?

+0

Je pense, oui. Vous avez dû répondre en même temps j'ai ajouté presque la même question de suivi à la réponse de karmajunkie. Finalement, je voudrais gérer le contenu des mises en page dans l'admin aussi, mais pour l'instant je vais bien créer quelques mises en page prédéfinies (one_column.html.erb, two_column.html.erb) et ensuite je les sélectionne via l'attribut déroulant. Merci! – jyoseph

+0

De rien. Je suis content que ça aide. P.S. - Si c'est ta réponse, s'il te plaît marque-le. :-) – Todd

+0

Fait! Hey à propos, pensez-vous que c'est une idée stupide? Je suis un noob total donc je ne sais pas si cela va à l'encontre de la convention. Je veux fondamentalement avoir des dispositions de diff pour les pages de diff. – jyoseph

4

Vous pouvez facilement modifier la mise en page au moment du rendu en fournissant la touche: mise en page comme ceci:

def some_action 
    #... stuff 
    render "some_action", :layout => "custom_layout" 
end 

Vous pouvez également définir mise en page à un symbole dans la définition du contrôleur, et le contrôleur exécutera la méthode associée pour décider quelle mise en page choisir

class UsersController < ApplicationController 
    layout :decide_layout 

    private 
    def decide_layout 
     some_boolean ? "layout1" : "layout2" 
    end 
end 

Vous pouvez également remplacer le symbole par un proc si vous ne souhaitez pas que la méthode soit éloignée de l'utilisation. Enfin, vous pouvez également appeler #layout dans une action même.