Crystal Reversi, gratis para iPhone & iPod Touch

Esquemas en Earwyn

Esta semana estamos trabajando duro en la integración del nuevo diseño de Somflee, poniendo a prueba Earwyn, nuestro framework php en el que hemos basado su desarrollo. En un CMS que te dé todo hecho, es complicado llegar a tener una buena flexibilidad, manteniendo la filosofía de no cargar nada a mano. Es decir, por ejemplo, si en WordPress necesitamos una cabecera diferente (otro diseño, otra estructura, otro contenido) para dos secciones… podremos hacer un plugin, o podremos tocar el código php y mediante la comprobación de en qué sección estamos, mostrar una cosa u otra, pero cargando siempre el fichero header.php.

En nuestro caso, el nuevo diseño contempla 3 tipos de páginas diferentes: la portada (home), las páginas públicas y las páginas privadas. Cada uno de esos 3 grupos tiene su propia estructura, incluyendo capas y estilos ajenos al resto. Earwyn, en su versión anterior, era capaz de cargar de forma automática un estilo asociado al tema visual (theme) activo y un estilo adicional, si existía, asociado al módulo cargado. Aún así, el sistema se quedaba corto, pues no solucionaba el problema de forma eficiente: tener las tres estructuras definidas en el mismo .css podía ser algo caótico, y tenerlo en los estilos del módulo, si varios módulos tenían el mismo tipo de página, habría que repetir los estilos en cada .css.

Para dotar de más flexibilidad a Earwyn, dimos vueltas a lo que antes llamábamos “plantilla base“. Una plantilla base no es otra cosa que una plantilla xhtml, en la que definimos las capas principales del sitio (por ejemplo, cabecera, pie de página, barra de menú lateral, cuerpo…). ¿Y si pudiéramos tener varias plantillas base? Habíamos planteado la pregunta hace algún tiempo, pero hasta estos días no lo hemos dejado completamente operativo.

Sistema de Esquemas o “Schemas“. Con este nuevo nombre identificamos ahora a cada una de esas plantillas base existentes. Volviendo a tocar el núcleo, donde se cargan los archivos de estilos, añadimos la inclusión automática de estilos asociados a Schemas, de tal manera que si en la carpeta de estilos existe un fichero .css con cierta nomenclatura (por ejemplo, base_public.css, si public es el nombre del Schema), Earwyn lo cargará. Además, debido a que un Schema puede necesitar su propia cabecera o pie, el framework incluye, si existen, los estilos (en el caso supuesto, header_public.css y footer_public.css) y plantillas (header_public.html y footer_public.html) en relación. En caso contrario, siempre se tenderá al esquema por defecto, cargando también sus ficheros relacionados. Por último, en el archivo de configuración de módulos, se puede especificar qué Schema seguirá cada uno de ellos, si es diferente al default.

Con todo esto, hemos dado un paso interesante: mayor potencia, mejor gestión del código CSS…. Sin duda el factor más importante, es que nos resulta muy cómodo y práctico. Paralelamente a esta funcionalidad, hemos implementado una mejora en el sistema de idiomas, de tal forma que ahora también se permite la inclusión de un fichero de idioma (donde se definen las variables con los literales del idioma en uso) por cada módulo. Earwyn improved!

Artículos recientes relacionados:


El sistema multi – idioma de Earwyn / WoD

En la mayoría de aplicaciones, incluidas las basadas en entorno web, los detalles pueden complicar mucho el desarrollo / implementación de un proyecto. Cuanto más refinados están, más dificultades o trabas van apareciendo. E incluso algunas de ellas, se tornan insalvables. El sistema multi – idioma de Earwyn, que da soporte a Win or Defeat, es capaz de manejar un número ilimitado de idiomas conviviendo en el mismo servidor (o en diferentes, si se necesita), haciendo uso de base de datos, ficheros php, ficheros de texto…, pero para llegar a la versión actual, hubo que resolver varios problemas y optar por algunas soluciones a ellos.

La parte más básica del sistema que permite el multi – idioma no supuso mucha complicación. El sistema de plantillas reconoce tags asociados a literales, definidos en ficheros .php, donde a través de variables se declaran la traducción para ese idioma. Es decir…

  • Existe un fichero .php por cada idioma, llamado con el esquema cod.php, donde cod es el código de idioma. Earwyn sabe qué fichero cargar según el idioma marcado por el usuario, haciendo un include de él.

$GLOBALS["TXT_MY_TEXT"]=”Este es mi texto, definido en sp.php”;

  • En la plantilla .html escribimos algo como:

….<body>¡txt_my_text!</body>…

  • Y cuando la plantilla se carga, el framework sustituye el tag marcado entre exclamaciones por su texto equivalente, definido en el fichero de idioma incluido.

….<body>Este es mi texto, definido en sp.php</body>…

Todos los literales presentes en las plantillas, se traducen con este procedimiento. Pero un juego de idiomas también afecta a otros elementos, como literales más largos, mensajes y avisos del sistema, campos de la base de datos…. En muchas páginas, es corriente ver un formulario, en español, menos las opciones de un select, por ejemplo de países. Ese listado se genera a partir de leer una tabla, en la que se escribe el valor del campo en un idioma. Y no queda del todo bien leer todo en español menos ciertas partes. Para evitar este problema nuestra opción fue implementar un sistema de ficheros de texto asociado a los campos identificadores (id, campo clave), que tradujese en consecuencia. Es decir…

  • La tabla de países tiene un campo id, un número entero, único para cada registro.
  • Existe una carpeta, que a su vez contiene subcarpetas, donde según la naturaleza del dato se guardan los ficheros de texto asociados. En el caso de países, la carpeta es countries.
  • En esa carpeta existen tantos ficheros como países haya en la base de datos, nombrados como id.txt, donde id es el valor del campo id en la tabla. (1.txt, 2.txt, 3.txt…)
  • A través de Earwyn, cuando leemos la tabla y, por tanto, el id, leemos el fichero asociado, sacando el valor traducido para ese campo.

Para la traducción de entidades de la base de datos, usamos este método, siendo aplicable también a otros elementos. Cuando necesitamos un nuevo tipo de mensaje o entidad a traducir, creamos la carpeta con los ficheros de texto y usando las funciones del framework somos capaces de tener cualquier contenido en multi – idioma. Sin embargo, para el informe del resultado de un partido, estamos refinando más aún el proceso, al tratarse de algo especial, que contaremos más adelante.

En cuanto al proceso de inclusión de un nuevo idioma, es muy cómodo; basta traducir esos ficheros e indicarlo en la configuración del sitio.

Artículos recientes relacionados:


Avances y retrasos

Hoy era el día fijado para abrir la beta privada de nuestro juego web, WoD. No obstante, hemos tenido algunos retrasos de última hora con la maquetación de los datos (es decir, el juego está operativo pero visualmente no depurado) que harán que enviemos las invitaciones en unos días. Por otro lado, queda también pequeños detalles y ajustes en la inteligencia artificial, que iremos refinando una vez se vayan generando partidos, fichajes… Y, como decían post anteriores, mucha funcionalidad en el tintero que implementaremos de forma progresiva, siendo Octubre el plazo fijado para la apertura pública.

En cuanto a los avances, esta semana Earwyn sufrió una importante mejora en su sistema de módulos y temas… siendo ahora capaz de soportar estilos adicionales para un módulo en concreto o para varios módulos. Además, permite tener una plantilla base diferente para ellos, con lo que dentro de un mismo sitio, con el mismo theme, puede dar lugar a diferentes diseños. (Esto es notable en el tema “Military“, donde la home y los módulos públicos son diferentes a los internos).

En breve… más noticias… :P

Artículos recientes relacionados:


Nuevas funcionalidades

Esta semana y siguiendo con lo planeado en el último UC Meeting, hemos hecho importantes avances, tanto en el framework Earwyn como en el juego WoD. Aunque no traemos capturas (a espera de rematar el diseño del primer theme oficial), presentamos el listado de aquello que ya ha quedado implementado.

Earwyn

  • Seguridad integrada en el núcleo. Hasta ahora la seguridad se comprobaba en un script ajeno al framework, incluido en las páginas en las que era necesaria la seguridad. Ahora, está integrada como parte de la clase que gestiona la carga de módulos, comprobando los permisos del usuario para cada módulo antes de su carga.
  • Sistema de subplantillas mejorado. Varias mejoras en la estructuración y en el código, hacen posible definir ilimitadas subplantillas dentro de una plantilla. Además, se ha potenciado su uso no sólo para listados, sino para mostrar o no mostrar partes de la página en función de lo que sea conveniente. Un ejemplo de esto puede verse en el foro de cplabs.
  • Sistema de Log. Una nueva clase da soporte al sistema de log, que permite registrar todo lo que vaya pasando en el sistema… o vayan haciendo los usuarios. En el juego da soporte al sistema de alertas, comentado abajo.
  • Sistema de tiempo. Aunque ya estaba creado, la mejora en el sistema ha sido importante. Fechas, conversiones y un sistema de calendario.
  • Mejoras en varias librerías: nuevas funciones en el sistema de ficheros (como la subida, borrado…), en la clase principal de Earwyn, en el sistema multi – lenguaje…

WoD

  • Sistema de alertas. La IA del juego avisa al usuario a través de un mensaje de aquello que no está marchando bien en su equipo. Moral baja de los jugadores, ausencia de capitán, consejos varios… así de lo que va haciendo en su gestión.
  • Panel de control. Va tomando forma… están sentadas las bases para la completa gestión y personalización de la cuenta, así como el perfil que se mostrará a los demás usuarios. (Cambio de avatar, modificación de datos personales, elección del theme visual…)
  • Mensajería privada. Los mensajes privados entre usuarios, ya se encuentran operativos.

Complementando a la parte operativa, vamos definiendo y atando cada detalle del funcionamiento del juego (reglas, normas, ajustes en la inteligencia artificial…). El 25 se va acercando….

Artículos recientes relacionados:


Definiendo subplantillas en Earwyn

La semana pasada publicábamos un post sobre el sistema de plantillas de Earwyn, en el que se comentaba la necesidad de crear plantillas adicionales para definir elementos repetitivos dentro de la misma plantilla. En estos días, este tema ha quedado solventado.

Subplantillas

La forma de solucionarlo ha sido ampliando el parser de plantillas, reconociendo ahora la parte de código perteneciente a una subplantilla definida dentro de la propia plantilla. Es decir, existe una plantilla llamada list.html, ésta podrá contener tanto el código general de la lista como el código que dará formato a cada elemento de la lista, sin necesidad de tener este código aparte en otra plantilla, como se hacía en la anterior versión.

En una misma plantilla se pueden definir ilimitadas subplantillas, asignándolas un nombre. Por ejemplo:

<ul >
[st:list_item]< li class=”mi_clase”>¿elem?</li>[/st]
< /ul>

En el código php del módulo que tiene asociado la plantilla que aloja el código de ejemplo, podríamos cargar la subplantilla con un método, tal que

$wod_engine->set_subtpl(“list_item”);

Y utilizar la subplantilla como si se hubiera definido una plantilla normal, reemplazando el tag y lo presente dentro de él de forma análoga a las variables calculadas:

$wod_engine->add_subtpl(“list_item”, $listado);

De este modo, nos ahorramos todas las plantillas .html que pertenecían a filas de tablas, elementos de listas… ganando mucho en organización tanto de ficheros como de funcionamiento.

Resumiendo

La forma básica del uso de todo esto, sería algo como:

  • Definir cual será la plantilla general que el módulo lleva asociada. (set_template)
  • Calcular el contenido de cada subplantilla en ella (set_subtpl y add_subtpl)
  • Calcular el contenido de la plantilla general
  • Obtener el código xhtml de todo el conjunto (get_xhtml)

Y algo más

En el post anterior, no comentamos que desde las plantillas también es posible llamar a funciones php, encerrándolas entre los símbolos []. Así en muchas ocasiones podemos ahorrar definir y calcular variables mediante ¿? y mostrar el contenido deseado directamente.

Artículos recientes relacionados: