Un Meta Layout?

Tengo varios metodos y cada uno llama a su layout

el la cuestion es que entre si son diferentes, pero comparten
mucho, es mas estudiandolos detenidamete, se podria decir que tan solo
se
diferencia el contenido dinamico y el menu lateral que llamo segun el
caso.

<%= render(:partial => “/menuautor”) %>
<%= render(:partial => “/menuCD”) %>

como no quiero repetir codigo me planteo 2 opciones,

Crear un Metalayout que contenga el codigo repetido (en principio me
parece ma mejor opcion, pero no se como hacerlo)

o tener un unico layout con codigo que muestre un menu u otro segun el
codigo ejecutado.

como lo ven?
es mactible lo que yo llamo Metalayout?

app/views/layouts/

creá un master.rhtml con el contenido que quieras:

.......... ........

<%= content_for_layout %> <-- esto es lo importante

y luego en app/controllers/application.rb

class ApplicationController < …
layout ‘master’
end

creo que eso es todo :slight_smile:

Eso no haría que todos los controladores usaran master, quizás es más
conveniente poner la linea layout :master en los controladores que
utilicen
ese layout.

saludos,
Juan P…

2006/11/14, Damian J. [email protected]:

Mmm… sí, por herencia, todos los controladores usarían master (de
hecho es lo que hago en todos mis proyectos)

quizás te referís a que el scaffold genera un layout para cada
controlador… la solución es borrar esos archivos (o borrar la línea
que genera ese archivo en el generador del scaffold :slight_smile:

el método content_for_layout ha sido reemplazado por yield, que es
propio de ruby

El 14/11/2006, a las 17:59, Damian J. escribió:

<%= content_for_layout %> ← esto es lo importante

caso.
segun el
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

marze
[email protected]

Hay que estar informado xq Rails no creo que se estabilice hasta 2.0
y para eso falta bastante
Échale un vistazo a las novedades en 1.2

http://www.railtie.net/articles/2006/11/02/deprecations-in-rails-1-2

El 14/11/2006, a las 19:30, Damian J. escribió:

muchachos del core sobre Ruby mismo.

marze
[email protected]

Hola Marcelino, qué buena noticia! :slight_smile:

Me gusta cuando van corrigiendo los errores de “TOD” (the old days). Y
se nota que también va creciendo el entendimiento que tienen los
muchachos del core sobre Ruby mismo.

Gracias por el dato.

Una forma más DRY de crear un layout usado por todos los controller
por defecto es llamarlo application.rhtml

/app/views/layout/application.rhtml

Salu2

On 11/14/06, Damian J. [email protected] wrote:

creo que eso es todo :slight_smile:

<%= render(:partial => “/menuautor”) %>
como lo ven?


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Edgar González González
E-mail: [email protected]
http://vp.com.ve
http://lacaraoscura.com
http://rubycorner.com
http://to2blogs.com

Es cierto
No sé por qué todavía no tenía el blog de Bob S. en mi Google Reader :slight_smile:

Saludos!

que mal me explico, o las cosas que quiero hacer son una locura.

ya utilizo el layout y lo utilizo con
<%= yield :layout %>

(no es q este a la ultima, sino que como hace dos dias q empece …)

tengo una web con una estructura de mas normal,

Cabecera
Menu
Submenu y contenido

Cabecera y Menu con estaticos y por lo tanto van al Metalayout

El contenido se genera por el controlador y son formularios y
operaciones tipicas de listado borrado, … de los modelos.

pero tb tenemos un SUBMENU que varia segun el menu que tenemos
seleccionado y muestra contenido muy dinamico que tb varia en funcion
del usuario (pe: listado de prestamos pendientes.

eso q parece un lioso, se comprende facilmete al decir que cada
controlador asignado un layout

class ApplicationController < …
layout ‘submenu1’

class ApplicationController < …
layout ‘submenu2’

donde el layout tiene dos puntos interesantes.
<%= render(:partial => “/menu1”) %>
y
<%= yield :layout %>

que muestran el submenu y el contenido respectivamente.
==========================================0

teniendo 6 layous diferentes donde en cada uno muestre un submenu
diferente,
pues todo arreglado.

pero claro RoR dice NOTE REPITAS.

entonces tenia dudas, si exitia algo como los LAYOUTS ANIDADOS

pero creo q queria inventar lo no inventado y es mejor tener un solo
layout
y el submenu sea elegido dinamicamente, algo como

 <%= render(:partial => "/@menu") %>

(tengo q ver la forma correcta pq la / es importante)
y asinar esa variable en algun sitio, seguramente en el inicio del
controlador,
llamar a una funcion submenu, alojada en Application.rb y pasandole los
parametros del submenu elejido y de paso otros como podria ser el title.

eso si me aclaro co la sintaxis q me esta contasco mucho en adaptarme

A ver… una solucion de ejemplo al problema de “parametrizar” el
layout:

class Application
def initialize
@page_menu = :default
end
end

class Controlador
def accion

end
def otra_accion
@page_menu = :alterno
end
end

layouts/applications.rhtml

<% if @page_menu == :default -%>

<% elsif @page_menu == :alterno -%>

<% end -%>

Mi convencion personal es usar el prefijo page_ en todas las
variables destinadas al layout. Siempre uso @page_title, o
@page_name, @page_extra_headers, @page_extra_styles, etc, etc

Jajaj! muy buena esa de “no es q este a la ultima, sino que como hace
dos dias q empece …” :slight_smile:

Lo que decís lo tengo en mi lista de pendientes más importantes, hacer
algún sistema de “menú” bien declarativo, quizás que se defina en un
YAML con toda la estructura de árbol y qué usuarios/perfiles tienen
acceso, etc. y después que se genere automáticamente desde el layout
maestro.

Si en estos días logro hacer algo más o menos genérico no voy a dejar
de comentarles para el que le pueda servir…

PD: la idea de llamar al layout “application” me encantó

Propongo una variante

crear un helper submenu

def submenu
case controller.controller_name
when ‘controller1’
“/submenu1”
when 'controller2"
“/submenu2”
else
“/submenu_default”
end
end

y luego en el template podrías usar

render :partial => submenu

Saludos
Hernán