2011-12-13 14 views
5

En uno de mis proyectos, tengo que escribir el código HTML & JavaScript. Preferiría usar un lenguaje estáticamente estáticamente en su lugar, entonces estoy evaluando OPA. Sin embargo, mi objetivo es generar una colección de páginas estáticas, por lo que no me importa el servidor HTTP OPA y la capa persistente.generando páginas estáticas en OPA

Así que aquí viene mi pregunta: ¿hay una manera (fácil) de generar una colección de páginas estáticas en OPA?

Respuesta

5

Si lo entiendo correctamente, ¿quieres construir tu xhtml con Opa, pero en lugar de servir, imprimirlo en archivos?

Tenemos 2 funciones para ello:

Las diferencias entre esos 2 funciones, es que el primero no va a generar código de la opa asociado js.

Luego puede escribir la cadena resultante en un archivo HTML en el disco.

Tenga en cuenta que no proporcionamos ningún método para escribir un archivo en el disco en nuestro archivo stdlib. Tienes que utilizar el sistema para que BSL:

write = %%BslFile.of_string%% 

Un pequeño ejemplo:

static.opa

write = %%BslFile.of_string%% 

xhtml_page(num:int) = 
    <p>Page {num}</p> 

pages = [1, 2, 3, 4, 5] 

do List.iter(i -> 
    xhtml_content = xhtml_page(i) 
    string_content = Xhtml.serialize_as_standalone_html(xhtml_content) 
    write("{i}.html", string_content) 
, pages) 

Compile y ejecute: opa static.opa --

Esto generará 5 páginas html.

+0

¡Dulce! ¿Qué sucede si llamas a algunas funciones de JavaScript en 'xhtml_page' (como' {Random.int num} ')? ¿Hay alguna forma de garantizar que la página generada no contenga algún código JavaScript que intente comunicarse con el servidor? – Thomas

+0

No habrá comunicación del servidor con 'Random.int' (en mi ejemplo) porque se ejecutará cuando genere sus páginas. – Fred

+0

Puede tener comunicación de "servidor" si asocia el detector de eventos a alguna parte xhtml (por ejemplo ''), pero si usa 'Xhtml.serialize_as_standalone_html' esas acciones se eliminarán del xhtml , por lo tanto, no habrá una llamada al servidor. Depende de qué html quieras generar. Tenga en cuenta que no puede generar algo como porque Opa lo prohíbe. – Fred

0

Thomas, supongo que quieres usar Opa para el código (en lugar de JS), ¿correcto?

Tener sólo un montón de páginas estáticas no sería un uso típico del lenguaje, pero seguro que puede hacerlo fácilmente:

Server.start(Server.http, { resources: @static_resource_directory("resources") }) 

Lo anterior es un programa Opa completa (S4 style) que se acaba de servir estáticamente el contenido del directorio de recursos (HTML incluido).

El escenario más convencional sería utilizar el mecanismo de plantillas de Opa (un marcado que acepta un gran subconjunto de HTML).

Espero que ayude.

+0

Realmente no. Lo que quiero es escribir un solo archivo .opa para generar un montón de páginas estáticas. Me complace usar solo un subconjunto de características de OPA (por ejemplo, no necesito ningún tipo de comunicación).Entonces, las páginas estáticas pueden ser servidas por cualquier servidor HTTP. – Thomas

+0

¿Quiere decir que quiere _programar_ generar esas páginas? (es decir, ¿tiene un programa que genera un montón de páginas estáticas?) – akoprowski

+0

¡Sí, exactamente! Por supuesto, puedo escribir mi aplicación, ejecutarla localmente y luego usar wget para obtener un montón de páginas estáticas (y sus recursos) ... pero luego necesito confiar en el compilador OPA para no incluir ninguna comunicación del lado del servidor construye en las páginas generadas. – Thomas

2

Puede usar Xhtml.precompiled. Toma un valor xhtml y le devuelve un xhtml que está precompilado (internamente ya está acoplado a una cadena).

Es útil cuando una parte de la página web es estática, mientras que la restante es dinámica. Puede evitar pagar algunos costos (serialización, memoria ...) por la parte estática.

Cuestiones relacionadas