2012-10-01 13 views
13

Estoy armando un sitio de cartera simple en intermediario. Genero las páginas de 'trabajo' de forma dinámica en base a los datos locales de YAML. Esto es en el config.rb:Uso de MIddleman 3.0 - ¿Cómo puedo configurar títulos de páginas individuales en páginas dinámicas?

data.work.projects.each do |project| 
    page "/work/#{project[0]}.html", :proxy => "project_template.html" do 
    @project = project 
    end 
end 

Para fines de SEO, me gustaría que cada una de estas páginas generadas dinámicamente para mostrar un título y una descripción únicos.

El título se establece actualmente en el archivo de diseño como éste

%title 
    = current_page.data.title 

y sé que puedo usar frontmatter para establecer variables CURRENT_PAGE como esto

--- 
title: "Recent Work - " 
--- 

Y puede pegar que en mi project_template .haml, pero ¿hay alguna manera de hacer que algo como esto funcione?

--- 
title: "Recent Work - " + @project.title 
--- 

Respuesta

21

En lugar de establecer el título en la frontmatter (como lo está haciendo), se puede usar content_for.

E.g. en el diseño:

%title= yield_content(:title)

Y en la plantilla de la página dinámica:

- content_for(:title, @project.title)

+0

gracias! el enfoque content_for funciona, solo en el diseño es yield_content (: title) –

+0

gracias, actualizó la respuesta para usar 'yield_content' – ghempton

2

he encontrado otra manera de evitar esta limitación. En vez de ir a los datos de la página, obtener los datos frontmatter de los metadatos:

%title = current_page.metadata[:page]['title'] 

No es tan agradable y corto como obtener los datos a través de current_page.data, pero sólo he conseguido cambiar los metadatos:

proxy newpath, oldpath, :page => { 'title' => newtitle } 

no estoy seguro de por qué, pero si recuerdo bien tuve que fijar también el recurso de metadatos después de listo:

resource.add_metadata :page => { 'title' => newtitle } 

sigo pensando/esperemos que debe haber una mejor sol ution. Es algo totalmente extraño que no podamos establecer datos de FrontMate para páginas proxy.

6

Aquí está la solución modular más simple.

En su diseño, el tiro en:

%title= 'Your Site Title | ' + @title 

@title es una variable de instancia de rubí, que estará disponible en la página actual.

En la página actual, el tiro en (no se olvide el guión):

- @title = 'Your Page Title' 

entonces usted debe ser bueno para ir!

Cuestiones relacionadas