2009-06-08 12 views
18

Utilizo staticmatic para las plantillas que uso más adelante con PHP. Hay una situación extraña en la que algunos atributos de etiquetas tienen comillas simples, mientras que otros tienen comillas dobles. Me gustaría que todos ellos tienen comillas dobles exclusivamente (! No es que importe, supongo, pero los quiero así)Haml: ¿cómo obligo a los atributos de las etiquetas a usar solo comillas dobles Y cómo pido los atributos de las etiquetas de la forma que quiero?

Por ejemplo, el código haml:

!!! XML 
%html{html_attrs('hr-HR')} 
    %head 
    %title Some title 
    %meta{'http-equiv' => 'Content-Type', :content => 'text/html; charset=utf-8'}/ 
    %meta{'name' => "description", :content => 'Some title - YO!'}/ 
    = stylesheets 
    = javascripts('test', :other) 
    %body 
    = yield 

produce siguiente:

<?xml version='1.0' encoding='utf-8' ?> 
<html lang='hr-HR' xml:lang='hr-HR' xmlns='http://www.w3.org/1999/xhtml'> 
    <head> 
    <title>Some title</title> 
    <meta content='text/html; charset=utf-8' http-equiv='Content-Type' /> 
    <meta content='Some title - YO!' name='description' /> 
    <link href="stylesheets/application.css" media="all" rel="stylesheet" type="text/css"/><link href="stylesheets/grid.css" media="all" rel="stylesheet" type="text/css"/><link href="stylesheets/text.css" media="all" rel="stylesheet" type="text/css"/> 
    <script language="javascript" src="javascripts/test.js" type="text/javascript"></script><script language="javascript" src="javascripts/other.js" type="text/javascript"></script> 

    </head> 
    <body> 
    <h1>some body stuff!</h1> 
    utf test šđčćž ŠĐČĆŽ 
    </body> 
</html> 

tenga en cuenta que no importa si uso comillas simples o comillas dobles en código haml, ¡siempre obtengo el mismo resultado!

Además, parece que la salida de haml-> html ordena los atributos de las etiquetas alfabéticamente, no de la manera en que los he ordenado en haml. Sospecho que esto tiene algo que ver con las matrices de ruby, pero no estoy seguro ya que no puedo/no puedo usar Ruby aparte de haml en staticmatic. ¿Cómo puedo ordenarles lo mismo que les ordené en el conjunto de ruby ​​en el código haml?

Respuesta

28

intente lo siguiente:

Haml::Template.options[:attr_wrapper] = '"' 
+1

dónde voy a poner esto en staticmatic? configuration.rb en src/under proyecto realizado por staticmatic no es así. Como aún no tengo mucha información sobre el rubí, no sé dónde poner esa configuración. – Keyframe

+0

ok, he parcheado render.rb en staticmatic para incluir esa opción, todo es "ahora. ¡Gracias! – Keyframe

+3

Para Rails3 he puesto esta línea en' config/initializers/haml.rb'. –

2

Haml en efecto, atribuye orden alfabético, y esto es de hecho una consecuencia del analizador de Ruby. En el futuro, los atributos se pueden ordenar en orden de documentos tanto como sea posible, pero eso no es probable hasta Haml 2.2 o posterior.

+0

Me pregunto si es posible en absoluto?Sé que no importa, el orden de los atributos, pero simplemente no se siente bien cuando se mira el código. Podría preparar un ayudante e incluir eso, pero ¿por qué iba a usar haml para nada, entonces? – Keyframe

+3

El problema se debe a la forma en que Haml compila las plantillas. Convierte las plantillas primero en código Ruby que se ejecuta para producir una cadena de HTML. Intenta analizar el hash de atributos antes de compilar (recientemente ha mejorado con esto, debería poder analizar cualquier hash de atributo que no incluya valores dinámicos), pero si no puede, inserta el hash como Ruby literal. hash en el código compilado. Como los hashe Ruby no conservan el orden (al menos en Ruby 1.8), esto significa que los atributos resultantes están en un orden indefinido. Entonces, para hacer la salida determinista, Haml la alfabetiza. –

+1

Como Haml analiza los atributos estáticos sin descargarlos en Ruby, es posible generarlos en el orden de las plantillas. El problema entonces es averiguar qué hacer con algunos atributos estáticos y algunos dinámicos. Este es un problema que se puede solucionar, y probablemente se solucione con el tiempo, pero la próxima versión de Haml (2.2) se acerca al lanzamiento, por lo que puede descartarse hasta la versión 2.4. –

0

Cita de: http://haml.info/docs/yardoc/file.REFERENCE.html#options

Haml comprende varias opciones de configuración que afectan a su rendimiento y salida.

En Rails, las opciones se pueden configurar mediante el establecimiento de la Haml::Template.options de hash en un inicializador:

# config/initializers/haml.rb

Haml::Template.options[:format] = :html5 

rieles en el exterior, se puede establecer que mediante la configuración en forma global y Haml::Options.defaults:

Haml::Options.defaults[:format] = :html5 

Finalmente, también puede configurarlos pasando un hash de opciones a [Haml :: Engine # initialize] [1]. Para la lista completa de opciones disponibles, consulte [Haml :: Opciones] [2].

[1]: http://haml.info/docs/yardoc/Haml/Engine.html#initialize-instance_method

[2]: http://haml.info/docs/yardoc/Haml/Options.html

+0

La pregunta tiene casi seis años :) – Keyframe

+0

Sin embargo, soy nuevo en esto, tan real para mí. Y puede ser para otros. –

Cuestiones relacionadas