Los tres primeros nombres para las chicas Bond

Esta es la primera parte de una pequeña serie sobre Middleman, "un generador de sitios estáticos que utiliza todos los accesos directos y herramientas en el desarrollo web moderno". Los primeros dos tutoriales cubrirán los aspectos básicos, después de lo cual pondremos en práctica lo que hemos aprendido con un proyecto práctico. Middleman requiere el uso de Ruby, pero no dudes en seguir leyendo si esto te es ajeno; esta serie es completamente amigable para los novatos.

Mediados y Páginas Estáticas

¿Qué es todo el fuzz últimamente con los sitios estáticos? Bueno, son rápidos, bastante sencillos de configurar y ligeros. Como no está sirviendo nada relacionado con la base de datos, los sitios estáticos son bastante confiables y rápidos. HTML, CSS y si es necesario JS, eso es todo..

Muchas personas usan sitios web estáticos para configurar sus blogs y páginas personales. Las páginas de destino que son muy afectadas por el tráfico también son un buen candidato. HealthCare.gov de la administración de Obama usó a Jekyll, otro generador de sitios estáticos, para su sitio. Si necesita algo rápido y fácil, que pueda escalar fuera de la caja, los sitios estáticos pueden ser increíbles. Especialmente porque puedes alojarlos gratis en GitHub Pages o Heroku.

Podría decirse que todo el hipness del sitio estático comenzó hace unos años cuando apareció Jekyll. Por supuesto, los sitios estáticos son tan antiguos como el primer "¡Hola mundo!" De Sir Tim Berners-Lee, pero en los últimos 15 años, las aplicaciones respaldadas por bases de datos se convirtieron en "todo lo que importaba". Hace un par de años, uno de los co-fundadores de GitHub necesitaba una mejor forma de escribir blogs y se le ocurrió a Jekyll, este generador de sitios estáticos para "Blogging like a hacker". Lo he usado en un par de ocasiones y solo tengo cosas buenas que informar. El equipo central también es increíble. De todos modos, para esta serie, mi editor y yo acordamos que sería más interesante cubrir Middleman. Podría ser justo decir que Middleman es un poco menos “consciente de los blogs” de la caja, pero no obstante es igualmente poderoso y de gran calidad..

Rubí

Middleman usa Ruby, que ofrece un conjunto bastante extenso de características para construir cosas geniales. Si alguna vez has usado Rails o Sinatra, te sentirás como en casa. Parece que Middleman y Jekyll son las opciones para los sitios estáticos en la comunidad de Ruby. También he oído a más y más diseñadores argumentar que les gusta usarlos para crear prototipos y para configurar sus propias páginas personales. Lo que muchos de estos marcos de sitios estáticos tienen en común es que son bastante fáciles de usar.

En este artículo asumiré que eres al menos un poco Interesado en Ruby, y tenerlo instalado en su sistema. Si necesita ayuda, eche un vistazo a Ruby para principiantes: cómo instalar Ruby y cómo comenzar por Andrew Burgess.

Saber cómo tratar con RubyGems también es necesario y, nuevamente, Ruby for Newbies de Andrew Burgess: Trabajar con gemas te ayudará a comenzar si es necesario. Haré mi mejor esfuerzo para no pasar por alto tu cabeza con los conceptos de programación, pero no estaré cubriendo conceptos básicos de programación como bucles, bloques de código y demás. Para los novatos entre ustedes, no se preocupen, Middleman no tiene muchas partes móviles, y demostraré lo fácil que es aprender..

Instalación y puesta en marcha

¿Así que tienes Ruby y RubyGems en tu cinturón? Genial, entonces estamos bien para ir.

Abre tu terminal y entra:

bash gem instalar intermediario

Si se le niega el permiso para hacerlo, deberá anteponer el comando con sudo e ingrese su contraseña de administrador del sistema. Después de que este proceso haya finalizado, podrá usar un par de comandos de intermediarios a través del indicador de comandos.

intermediario inic

Este comando inicia un nuevo proyecto. Tendrá que proporcionarlo con el nombre de su aplicación, luego presionar enter.

bash middleman init your_fancy_app También toma argumentos adicionales como con qué plantilla quieres comenzar. Esto hace que sea realmente útil personalizar sus aplicaciones con plantillas desde el principio, ¡reduciendo bastante las tareas de configuración repetitivas! Discutiremos más sobre las plantillas en un tutorial posterior..

bash middleman init your_fancy_blog --template = blog

bash middleman init your_fancy_mobile_app --template = mobile

servidor de intermediarios

Middleman viene con un servidor local para su desarrollo. Iniciándolo te permite ver tu sitio en http: // localhost: 4567 / **. Si acaba de entrar ** intermediario sin ningún argumento adicional, esto también activará su servidor. Apague su servidor con CTRL-c.

compilación de intermediarios

Una vez que tenga algo que esté listo para poner en un servidor orientado a Internet, deberá construir Tú sitio. Esto significa que cualquier cosa que haya preparado en su /fuente carpeta será procesada y la salida final se enviará a la /construir carpeta que intermediario también crea para ti. Todos sus archivos que utilizan preprocesadores como Slim, Haml, Sass, CoffeeScript se procesarán en sus respectivos homólogos y se colocarán en su directorio / build.

despliegue de intermediarios

Una vez que su sitio esté listo para enfrentar Internet, este comando implementa su /construir carpeta en su servidor web. Cada actualización que hagas pasará por este proceso..

carga de hígado

Hazte un favor de inmediato y activa LiveReload para actualizar automáticamente tus páginas después de los cambios en tus archivos HTML, Sass o JS. Esto es de gran conveniencia durante el desarrollo, ¡no te arrepentirás! El intermediario en estos días ofrece LiveReload fuera de la caja-solo necesitas agregar

gema de rubí 'intermediario-livereload'

para usted Gemfile y descomenta la siguiente línea en config.rb:

ruby # Recarga el navegador automáticamente cada vez que se cambian los archivos, activa: livereload

Entonces atas al intermediario

paquete de bash #o intermediario exec paquete

Fuente vs. Construir vs. Desplegar

Así que vamos a empezar con /fuente y /construir carpetas Entre ellos se encuentra la línea divisoria que separa las secciones de desarrollo y producción. Cuando usa su servidor web local para el desarrollo, / source se usa para servir su aplicación. La carpeta / build es utilizada por sus servidores no locales para servir sus páginas estáticas. / build se crea cada vez que usas compilación de intermediarios en tu linea de comando Por lo tanto, debe tener cuidado de no gastar accidentalmente su tiempo de codificación / compilación porque este trabajo desaparecerá después del proceso de compilación. En general, todo su desarrollo se supone que ocurre en / source.

El proceso de compilación crea los sitios estáticos que desea que aloje su servidor. Cada archivo en su /fuente carpeta será procesada y luego almacenada en /construir. Como se mencionó anteriormente, su Sass, CoffeeScript, Slim / Haml y sus parciales se procesarán en sus equivalentes confiables. Todos los diseños se juntarán también. Si ha activado la compresión para estos archivos, este es el momento en que también se "uglifican". Durante todo este shabang, la carpeta / build se descompone al deshacerse de los archivos que ya no tienen ninguna referencia en / source. Durante compilación de intermediarios, cualquier cambio que haya realizado en los archivos en / source desencadenará una regeneración de los nuevos archivos estáticos correspondientes para / build.

El proceso de despliegue es el último paso. Con el /construir directorio en su lugar, tiene todo lo que necesita para poner su aplicación allí. Mi recomendación es hacer esto temprano para evitar encontrar sorpresas..

Un nuevo sitio

Vamos a ver la estructura básica de una aplicación Middleman. Los componentes principales son:

  • / imágenes
  • / javascripts
  • / diseños
  • / hojas de estilo
  • config.rb
  • Un archivo index.html.erb
  • Un gemfile

Como se puede ver a continuación, la mayoría del Jazz entra en el /fuente carpeta. Lo que me gusta de las aplicaciones Middleman es su organización simple. Navegar por la estructura del documento es sencillo, incluso para principiantes.

Si no está satisfecho con la denominación de algunas de estas carpetas, puede cambiar eso en sus configuraciones (config.rb). Los mismos nombres serán utilizados para su acabado. /construir carpeta.

"ruby set: css_dir, 'custom_folder_name'

set: js_dir, 'custom_folder_name'

set: dir_imágenes, 'custom_folder_name "

Una vez que tenga su servidor en funcionamiento, puede ver otras opciones para configurar Middleman directamente en su navegador: http: // localhost: 4567 / __ middleman / config /. No todos ellos pueden tener sentido, o incluso es importante saberlo en esta etapa. Dale un vistazo y un marcador mental es totalmente suficiente por ahora..

Uno tu corres compilación de intermediarios puedes echar un vistazo a la /construir carpeta. Todos los archivos HTML, CSS y JS que necesita para servir a su sitio estático.

Eso es prácticamente todo lo que necesita saber para comenzar y orientarse..

Sugerencia: En este punto, tendría mucho sentido si usted mismo comienza a armar una aplicación de prueba. Mira a tu alrededor y experimenta cómo están organizadas las cosas y cómo encajan las piezas.

Materia delantera

El término Front Matter proviene de la publicación de libros, y se refiere a la información al frente de un libro. En el caso de archivos de sitios web estáticos, se refiere a bloques de información que se almacenan en YAML. Cada página le permite tener variables que se pueden almacenar en la parte superior dentro de un guión triple inicial y otro final. Por ejemplo, aquí está la parte superior de un archivo ficticio llamado: some.html.erb.

"html

Diseño: Título del bono: Nombres de las chicas de bond favoritas Fecha: 2015-11-09 tags: bond, 007

some_secret: no seré renderizado hasta que me uses.

bond_girls: - Strawberry Fields - Jill Masterson - Tiffany Case


Los tres primeros nombres para las chicas Bond

    <% current_page.data.bond_girls.each do |name| %>
  • <%= name %>
  • <% end %>

"

Las variables YAML se ven como un hash. Puede acceder a esos datos locales a través de página actual objeto:

ruby current_page.data.some_variable

A menudo lo utiliza para almacenar etiquetas, fechas, títulos y opciones de configuración, como el diseño que desea usar para páginas particulares. La materia delantera es una tienda YAML para sus variables. También puedes usar JSON si lo prefieres. Piense en ello como un lugar para colocar datos que normalmente podrían residir en una base de datos. Discutiré las diferentes opciones y usos a lo largo del camino cuando surjan..

ERB

Esta es una buena oportunidad para repasar brevemente ERB. ERB le permite crear plantillas dinámicas que tienen código incrustado en ellas. Sus nombres de archivo necesitan tener una .erb extensión y usted necesita poner su código en los siguientes dos "contenedores".

Para el código que se ejerce pero no se "imprime" en la página, use esto:

html <% %>

Piense en ello como "solo cálculo".

De lo contrario, para los valores de retorno que desea que aparezcan "impresos" en la página, también debe agregar un signo igual. Eso es.

html <%= %>

Diseños

Los conceptos de layouts y parciales están estrechamente relacionados. Déjame darte una pequeña gira en caso de que no hayas jugado con Rails, Sinatra o similar antes. Creo que debería comenzar con diseños primero.

Los diseños le proporcionan la estructura para compartir el marcado común entre diferentes páginas, que pertenecen a la misma "familia" de páginas. Es una herramienta para evitar la duplicación y acelerar tu trabajo. En lugar de escribir el mismo esqueleto HTML en todo el lugar, debe componer diseños para casos de uso particulares. Los ejemplos populares son dos diseños diferentes tanto para un administrador como para un usuario "normal". Por lo general, tienen una experiencia muy diferente al mirar la página "igual".

Cuando inicias una aplicación de intermediarios simple, obtendrás automáticamente un layout.erb presentar en fuente / diseños. Tenga en cuenta que este archivo termina en .erb y no .html.erb. Los diseños no deben representarse en HTML y Middleman emitirá un error si crea diseños con una extensión .html. Si utiliza un lenguaje de plantillas diferente como Slim o Haml, los diseños podrían tener sus extensiones. Como sugiere el valor predeterminado, debe colocar todos sus diseños en el / diseños carpeta en fuente.

Aquí hay un ejemplo de source / layouts / layout.erb:

"html

<%= current_page.data.title || "The Middleman" %> <%= stylesheet_link_tag "normalize", "all" %> <%= javascript_include_tag "all" %> <%= yield %>

"

Este diseño predeterminado es bastante básico, pero proporciona todo lo que necesita para comenzar. Echemos un vistazo:

  • Un poco de información meta.
  • Un título de página dinámico que lee datos de la parte frontal de cada página..
  • Métodos de ayuda que incluyen archivos de estilo y JavaScript.
  • Y finalmente, una etiqueta de cuerpo para envolver su contenido que se "cede" en el diseño a través de <%= yield %>.

Y desde allí puede personalizar este diseño para cada una de sus necesidades. Un aspecto potencialmente confuso para los novatos de Ruby es el rendimiento palabra clave: esto solo significa que pasa por el resto del contenido que creas. En otras palabras, rendimiento es un marcador de posición para sus puntos de vista que se representarán en él. Si ese concepto es completamente ajeno a ti, recuerda no tocarlo por ahora o tu aplicación podría no funcionar como se esperaba. Cada vez que crees tus propios diseños, teniendo rendimiento allí es esencial, de lo contrario su contenido no se mostrará. Lo dominarás en poco tiempo, lo prometo.

Si creó diferentes diseños, puede especificar a través de la materia frontal qué diseño desea utilizar página por página. Digamos que tiene un diseño especial para dar la bienvenida a los usuarios, que es un poco más comercial. Aquí tenemos welcome.html.erb.

"html

diseño: ventas -

Hola!

Adivina qué, estamos tratando de venderte algunas cosas.?

"

Alternativamente, puede especificar diseños en su archivo config.rb.

página ruby ​​"/welcome.html",: layout => "sales"

Si desea evitar hacer esto manualmente en cada página, puede recopilarlas en un solo lugar. Nuevamente, en config.rb, usas un comodín (** \ ***) para recoger un montón de páginas que utilizan el mismo diseño.

ruby page "/ sales / *",: layout => "sales"

Personalmente, me gusta poner esta información de diseño en la parte frontal. Es muy explícito y no demasiado repetitivo. Sin embargo, si tuviera un montón de ellos, preferiría usar el método de comodín.

Parciales

Los parciales le brindan los medios para encapsular el código de vista que puede reutilizar donde lo necesite. Solo necesitas decirle a tu ver donde insertar un parcial y se procesa justo ahí. Los parciales son una técnica muy común para SECAR su código.

Los ejemplos más comunes incluyen barras de navegación, pies de página y secciones de encabezado, que no querría duplicar por todas partes. Los archivos para parciales comienzan con un guión bajo. Para empezar puedes colocarlos debajo. /fuente. Sus diseños son un buen lugar para comenzar con la recopilación de códigos para extraer en parciales. Cuando encuentre algo que necesite reutilizar, los parciales serán un amigo útil.

Aquí hay un ejemplo de /source/layouts/layout.erb.

"html

<%= partial "head" %> <%= partial "navbar" %> <%= yield %> <%= partial "footer" %>

"

Y la fuente parcial / _head.html.erb:

"html

<%= current_page.data.title || "The Middleman" %>

<%= stylesheet_link_tag “normalize”, “all” %> <%= javascript_include_tag “all” %>"

A veces querrá extraer un parcial, no solo para evitar la duplicación, sino también para que sus vistas sean más legibles. Con el tiempo, las secciones principales son conocidas por estar bastante cargadas, por ejemplo. Dentro de ellos puedes tener otro parciales que solo tratan con estilo o archivos JS.

Te darás cuenta de lo convenientes que son los parciales una vez que puedas aplicar los cambios que se extienden a través de toda tu aplicación, donde sea que incluyas el parcial. No hay necesidad de revisar un montón de archivos para aplicar el mismo cambio una y otra vez.

Ayudantes

Los ayudantes son métodos que puede utilizar para muchas tareas diarias en sus vistas. Creo que esto fue pionero en Rails Land y rápidamente se convirtió en omnipresente para el desarrollo web moderno de la web. Ya has visto ayudantes que incluyen hojas de estilo y archivos JavaScript. Hay mucho más de donde viene esto, aunque.

Aquí está nuestra /source/_head.html.erb parcial de nuevo:

"html

<%= stylesheet_link_tag "normalize", "all" %> <%= javascript_include_tag "all" %>

"

Estos ayudantes están diseñados para ayudarlo a escribir un código de vista más claro y conciso. En la lista de ayudantes a continuación encontrará muchas cosas útiles que salen de la caja. No estás limitado por estos sin embargo. Escriba sus propios métodos de ayuda en config.rb o recójalos por separado en un módulo.

Funciona así: en tu config.rb creas un ayudantes Bloquea y coloca todos tus métodos de ayuda dentro. Eso es. Ahora tus vistas tienen acceso a ellas..

Ejemplo: /source/_navbar.erb.

"html

"

Y en config.rb:

"ayudantes de rubí hacen

def random_username "# lorem.first_name # lorem.last_name" fin

def random_image image_tag "# lorem.image ('30x40',: background_color => '333',: color => 'fff')" end

fin"

Estos ayudantes pueden ser útiles cuando rápidamente quiero crear un prototipo de algo y evitar la configuración de imágenes ficticias y texto por mi cuenta. En general, debe buscar el código que le gustaría que sea más conciso o que duplique una y otra vez. Los ayudantes son a menudo un buen hogar para eso..

Dentro de estos ayudantes personalizados, utilicé otros ayudantes de Middleman para crear img etiquetas a través etiqueta_imagen así como el lorem objeto para algunos nombres de usuario aleatorios y marcadores de posición de imagen. Estas cosas pueden ser un poco personalizadas para satisfacer sus necesidades.

Sin embargo, al utilizar el enfoque del módulo, necesita un archivo separado para su módulo. Cree un directorio "lib" en su carpeta raíz (el mismo nivel que "source" y "build") y cree un archivo para sus ayudantes.

Aquí tenemos /lib/helpers.rb:

"ruby module PrototypingHelpers def random_image image_tag" # lorem.image ('300x400',: background_color => '333',: color => 'fff') "end

def random_username "# lorem.first_name # lorem.last_name" end end "

Luego deberá informar a su archivo config.rb que desea usar estos ayudantes:

ruby require helpers 'lib / helpers' PrototypingHelpers

¡Auge! Estás listo para rodar. En general, me gustaría ir con el enfoque del módulo de inmediato. Me parece mucho más limpio, y además evitas contaminar tu archivo de configuración con demasiadas cosas..

También me gustaría mirar en ayudantes de salida y contenido_para en particular, ya que pueden ser un poco confusos para los novatos. Esto le permite capturar un montón de contenido que puede producir / reutilizar en otro lugar. Es una especie de miniatura parcial. Personalmente acudiría parcialmente la mayor parte del tiempo, pero de vez en cuando, cuando quiera aplicar más quirúrgicamente los cambios de encendido y apagado, es útil saberlo:

Aquí está index.html.erb:

"html <% content_for :navigation do %>

  • <%= link_to 'Home', '#' %>
  • <%= link_to 'Posts', '#' %>
  • <%= link_to 'About', '#' %>
  • <%= link_to 'Contact', '#' %>

<% end %>

Hola nuevo usuario!

... "

Y admin_index.html.erb:

"html <% content_for :admin_navigation do %>

  • <%= link_to 'Home', '#' %>
  • <%= link_to 'Stats', '#' %>
  • <%= link_to 'Edit', '#' %>
  • <%= link_to 'Posts', '#' %>
  • <%= link_to 'About', '#' %>
  • <%= link_to 'Contact', '#' %>

<% end %>

<% content_for :admin_javascript do %> <%= javascript_include_tag “admin” %> <%= javascript_include_tag “some_library” %> <% end %>

Hola señorita admin!

... "

Luego en layout.erb:

"html

<% if content_for?(:admin_javascript) %> <%= yield_content :admin_javascript %> <% else %> <%= javascript_include_tag "all" %> <% end %> <%= yield %> <%= partial "footer" %>

"

contenido_para?

La clave es usar contenido_contenido que es poner su contenido recopilado de la página individual en el diseño, si se encuentra. Tampoco es necesario utilizarlos solo con diseños. Cuando necesite hacer esto un poco más complicado, use contenido_para? para verificar bloques de contenido específicos antes de insertarlos. Es útil cuando desea realizar pequeñas adaptaciones para secciones que difieren solo un poco. Es fantástico que pueda guardar este contenido un poco como una configuración en las páginas relevantes y "activarlo" solo cuando sea necesario. Probablemente no deberías ponerte demasiado listo con estas cosas..

enlace a

Una palabra sobre el enlace a ayudante que he usado anteriormente. Este es probablemente el que te encontrarás con más frecuencia. Básicamente, alimenta al método con un nombre y una url o ruta donde este enlace debe apuntar. Reemplazé la última parte con un marcador de posición por brevedad..

A continuación se muestra una descripción general de los ayudantes que están listos para usar a su disposición. Creo que la mayoría de los nombres se explican por sí mismos y no debería explicar en qué puede ayudarlos cada uno de ellos. Haga un marcador mental de lo que hay ahí fuera y verifique con la documentación si le dan algún problema..

Ayudantes de etiquetas

  • etiqueta
  • enlace a
  • input_tag
  • favicon_tag
  • stylesheet_link_tag
  • javascript_include_tag

Ayudantes de salida

  • contenido_para
  • contenido_para?
  • capture_html
  • contenido_contenido
  • concat_content

Ayudantes de formulario

  • form_tag
  • etiqueta
  • select_tag
  • submit_tag
  • field_set_tag
  • text_field_tag
  • check_box_tag
  • password_field_tag

Ayudantes de formato

  • truncar
  • pluralizar
  • ajuste de línea
  • escape_html
  • simple_format
  • js_escape_html
  • time_ago_in_words
  • distance_of_time_in_words

Ayudantes de lorem

  • lorem.date
  • lorem.word
  • lorem.name
  • lorem.email
  • lorem.image
  • lorem.words
  • lorem.sentence
  • lorem.last_name
  • lorem.paragraph
  • lorem.first_name
  • lorem.paragraphs

Pensamientos finales

Creo que esta es una buena base para comenzar a jugar con una aplicación de juguete. Debe tener un buen sentido de lo que ofrece Middleman y cómo navegar por el marco. En la siguiente parte de esta serie iremos más lejos y profundizaremos un poco más en el marco. El equipo de Middleman realmente ha hecho un gran trabajo diseñando la API y manteniendo las cosas simples.

Afortunadamente, ya puede ver por qué este marco ha ganado popularidad y por qué es una buena opción para todo tipo de proyectos estáticos..