Necesita representar varios fragmentos HTML en diferentes lugares dentro de una plantilla de aldea
Pregunta
en mi default-layout.hamlet
:
!!!
<html lang="en">
<head>
<meta charset="utf-8">
<title>#{pageTitle pc}
^{pageHead pc}
<body>
<div id="main">
<div id="header">
????
<div id="content">
^{pageBody pc}
Desde una función de controlador, necesito reemplazar el ????
arriba con algunos contenidos HTML.
¿Cómo se hace esto?
Gracias por cualquier aporte.
EDITAR:
Estoy buscando una funcionalidad similar a, por ejemplo, los bloques de plantilla de Django. Puedo definir un bloque dentro de una plantilla y el controlador que usa esta plantilla para representar, puede completar los bloques de la plantilla con el contenido necesario. En este momento, Yesod tiene efectivamente un solo bloque en el cuerpo de una plantilla. que "definido" por la llamada ^{pageBody pc}
. Sé que puedo construir la salida generada por pageBody
de cualquier forma que quiera usar addWidget
etc., pero en este momento necesitaré generar mi <div id="header">
y <div id="content">
también y quiero evitar eso porque todos mis manejadores tendrán que generar estos div
'S tener la misma estructura de marcado en todas las páginas.
Solución
Creo que la respuesta es definir una función además de predeterminado. Lo único que es mágico de ForautorLayout es que los subsitios (p. Ej., Auth) y los mensajes de error lo usan de forma predeterminada. Pero podrías definir un "mydefaultLayout" que toma las otras piezas de contenido que quieres. Incluso podría definir una función de ayuda que envuelva los bloques adicionales en un solo bloque y luego lo pasa a la capa de defecto.