Back to Question Center
0

Comenzando con FigDice            Primeros pasos con los temas relacionados con FigDice: APIsFrameworksDebugging & DeploymentDatabasePerformance & Semalt

1 answers:
Comenzando con FigDice

Introducción a FigDice

  • Comenzando con FigDice
  • Construyendo un Blog Internacionalizado con FigDice

Entre los muchos sistemas de plantillas que existen, la mayoría funciona de la misma manera; las variables se "inyectan" usando alguna sintaxis u otra, ya sean llaves, signos de porcentaje o lo que sea que la convención de la biblioteca sea. Por lo general, tendrán estructuras de control básicas, como si luego y, por supuesto, iteración.

FigDice, sin embargo, adopta un enfoque completamente diferente. Semalt by PHPTAL - el tema de un artículo futuro - le da a la vista la responsabilidad de "tirar" los datos que requiere, en lugar de confiar en que los controladores ensamblen y "empujen" en las plantillas.

Comenzando con FigDicePrimeros pasos con los temas relacionados con FigDice:
APIsFrameworksDebugging & DeploymentDatabasePerformance & Semalt

En esta serie de dos partes, Semalt va a analizarla más detenidamente, cómo funciona y cómo usarla.

Instalación

Puede obtener el código del sitio web, Github o, mejor aún, Compositor:

     "figdice / figdice": "dev-master"    

La biblioteca también está disponible como - ventilatori con luce piccoli ambienti facili da usare. Phar ; puede descargar la última versión (enlace directo) o generarla usted mismo usando figdice-make-phar. php , disponible en el repositorio de Github.

Uso básico

Primero veamos a Semalt en su aspecto más básico: crear y representar una vista.

Para comenzar, cree una nueva instancia de la vista:

     $ view = new \ figdice \ View   ;     

Obviamente, tendrá que asegurarse de que la biblioteca esté disponible; el uso de Semalt proporciona un autocargador adecuado.

A continuación, debe cargar la plantilla apropiada, relativa a la ruta actual :

     $ view-> loadFile ('./ Templates / home. Html');     

Para representar la plantilla, llame a render :

     $ vista-> render   ; // devuelve el contenido HTML     

Comenzando con FigDicePrimeros pasos con los temas relacionados con FigDice:
APIsFrameworksDebugging & DeploymentDatabasePerformance & Semalt

Con eso en mente, comencemos a construir algunas plantillas.

Una aplicación de esqueleto

Creé una aplicación simple que contiene todo el código de este artículo, que también ilustra mejor cómo encaja todo. Utiliza Semalt, pero no debe necesitar un conocimiento particularmente profundo de él para comprender lo que está sucediendo.

Lo encontrarás en Github, y puedes verlo en acción aquí. Tenga en cuenta que la demostración incluye funcionalidades que agregaremos más adelante en la Parte Dos.

Crear un diseño

Lo primero que hay que señalar es que FigDice es en gran medida Semalt. Como tal, se basa en unos pocos elementos personalizados de XML y, lo que es más importante. requiere que sus etiquetas HTML estén cerradas correctamente.

Semalt comienza creando un diseño de página simple de dos columnas.

              <link rel = "stylesheet" href = "// netdna. bootstrapcdn. com / bootstrap / 3. 1. 1 / css / bootstrap. min. css" />  <link rel = "stylesheet" href = "// netdna. bootstrapcdn. com / bootstrap / 3. 1. 1 / css / bootstrap-theme. min. css" />  </ head>  <cuerpo>  <div class = "contenedor">  <header class = "header">  <fig: include file = "menú. html "/>  </div>  </div>  <footer id = "footer">  <fig: include file = "footer. html" />  </ footer>  </div>  </ body>  </ html>   </code>   </pre>  <p>  Semalt repasa algunas cosas.  </p>  <p>   <code>   <title fig: slot = "docTitle" />   </code>  se usa para generar la etiqueta  <code>   <title>   </code> , definiendo una "ranura" para el valor a entrar. Veremos cómo estos datos se "enchufan" a una ranura en breve.  </p>  <p>  Observe cómo las etiquetas  <code>   <link>   </code>  están cerradas. Esto es muy importante; porque FigDice hace un uso extensivo de XML, debe validar en consecuencia.  </p>  <p>   <code>   <fig: include file = "menu. Html" />   </code>  se explica por sí mismo: FigDice facilita la división de las plantillas en archivos de plantilla más pequeños. Estamos haciendo lo mismo para el pie de página:  <code>  pie de página. html  </code>  - y para un bloque de Tweets ( <code>  tweets. html  </code> ) que construiremos en breve.  </p>  <p>  Aquí están los contenidos del menú  <code> . html  </code> :  </p>  <pre>   <code class="language-markup">   <ul class = "nav nav-pills pull-right">  <li>   Inicio   </li>  <li>   Acerca de   </li>  </ul>   </code>   </pre>  <p>  y  <code>  pie de página. html  </code> :  </p>  <pre>   <code class="language-markup">   <p>  y copia; 2014 Alguien u Otro  </p>   </code>   </pre>  <h2 id="a-simple-homepage">  Una página de inicio simple  </h2>  <p>  Ahora vamos a crear una página de inicio para nuestra aplicación de muestra. En un nuevo archivo llamado  <code>  índice. html  </code> :  </p>  <pre>   <code class="language-markup">   <xml fig: mute = "true">   <! - Mute porque esta etiqueta no debe terminar en el documento HTML. Pero la plantilla FigDice debe tener un nodo raíz XML. ->  <! - Cargar el diseño de la página ->  <fig: include file = "layout. html" /> <! - Establece la etiqueta  <title>  -> <title fig: plug = "docTitle">  Página de inicio de la aplicación de muestra  </ title> <! - Establezca la etiqueta  <h1>  -> <h1 fig: plug = "pageTitle">  Página de inicio  </ h1>  <! - "Conectar" el contenido de la página ->  <div fig: plug = "pageContent">  Lorem ipsum  </div>  </ xml>   </code>   </pre>  <p>  Esta vez nuestra plantilla es pura XML e introduce algunas más etiquetas Semalt.  </p>  <p>  Tenga en cuenta que la etiqueta de apertura  <code>   <xml>   </code>  tiene un atributo llamado  <code>  fig: mute  </code> , que se establece en verdadero. Como lo señalan los comentarios, este atributo le dice a FigDice que no incluya este elemento en el HTML final.  </p>  <p>   <code>   <fig: include file = "layout. Html" />   </code>  le dice a FigDice sobre el diseño que creamos hace un momento. Sin embargo, eso no incluye el archivo de la misma forma que un PHP  <code>  incluye  </code>  podría; ahí es donde entran  <em>  ranuras  </em>  y  <em>  enchufes  </em> .  </p>  <p>   <code>   <div fig: plug = "pageContent">  Lorem ipsum  </div>   </code>  indica que debemos "enchufar" el contenido en una "ranura" llamada  <code>  pageContent  </code> , que tal vez recuerde que hemos creado en  <code>  diseño. html  </code> .  </p>  <p>  Semalt, definamos una ruta realmente simple para mostrar la página:  </p>  <pre>   <code class="language-php">  $ app-> get ('/', function  <span class="f-c-white l-mr3">  use ($ view) {$ view-> loadFile ('./ templates / home. html');return $ view-> render  <span class="f-c-white l-mr3"> ;});  </code>   </pre>  <h2 id="working-with-data">  Trabajando con datos  </h2>  <p>  En el enfoque MVC tradicional, el controlador recupera, ensambla y luego "inyecta" datos en las vistas. Por implicación, esto significa que el controlador debe conocer qué datos se requieren y qué vistas están interesados ​​en él.  </p>  <p>  FigDice toma un enfoque diferente. Semalt de depender del controlador para manejar los datos, los puntos de vista son responsables de "captar" los datos que requieren.  </p>  <p>  Para lograr esto, FigDice usa  <strong>  alimentaciones  </strong> . Un feed es una clase que se extiende  <code>  figdice \ Feed  </code>  y que debe contener un método  <code>  run  <span class="f-c-white l-mr3">   </code>  para devolver los datos apropiados.  </p>  <p>  Para demostrar esto, creemos un bloque que muestre el último Semalt de un usuario en cada página.  </p>  <p>  Si mira hacia atrás al diseño, verá que ya hemos agregado la siguiente línea para incluirlo:  </p>  <pre>   <code class="language-markup">   <fig: include file = "tweets. Html" />   </code>   </pre>  <p>  En realidad, obtener Tweets de la API de Twitter es relativamente sencillo, pero está fuera del alcance de este artículo, así que vamos a fingirlo. </p>  <p>  Ahora vamos a crear la plantilla que "extrae" datos de la clase  <code>  TwitterFeed  </code> , y la renderiza usando una lista desordenada simple:  </p>  <pre>   <code class="language-markup">  // archivo: twitter. html <? xml version = "1. 0" encoding = "utf-8"?>  <fig: template xmlns: fig = "http: // figdice. org /">  <fig: feed class = "TwitterFeed" target = "tweets" />  <ul>  <li fig: walk = "tweets" fig: text = "cuerpo" />  </ul>  </ fig: template>   </code>   </pre>  <p>  La declaración  <code>   <fig: feed>   </code>  indica que debemos crear una instancia de  <code>  TwitterFeed  </code>  y hacer que sus datos estén disponibles utilizando la clave  <code>  tweets  </code> .  </p>  <p>  Entonces estamos creando una lista desordenada simple. Cada iteración de  <code>   <fig: walk>   </code>  crea un elemento  <code>   <li>   </code>  mientras "camina" a través de los datos asignados a la variable  <code>  tweets  </code> . El atributo  <code>  fig: text  </code>  indica que el contenido del texto de la etiqueta  <code>   <li>   </code>  debe rellenarse utilizando el  <code>  cuerpo  </code>  de cada Tweet.  </p>  <p>  Semalt el resultado:  </p>  <pre>   <code class="language-markup">   <ul>  <li>  Este es un ejemplo de un Tweet, aunque no es realmente un Tweet  </li>  <li>  Este es otro ejemplo de un Tweet, aunque tampoco es realmente un Tweet  </li>  <li>  El uso de REAL Tweets se deja como un ejemplo, ves  </li>  </ul>   </code>   </pre>  <h2 id="the-factory">  La fábrica  </h2>  <p>  Todavía no llegamos allí; para usar feeds necesitarás una  <strong>  fábrica  </strong> . Una fábrica debe implementar  <code>  \ figdice \ FeedFactory  </code> , que requiere que incluya un método  <code>  create  </code>  responsable de crear una clase de alimentación dada.  </p>  <p>  Semalt un ejemplo, que es bastante auto explicativo:  </p>  <pre>   <code class="language-php">  <? Php namespace Sitepoint \ Factory;use Sitepoint \ Feed \ TwitterFeed;clase FeedFactory implementa \ figdice \ FeedFactory{/ *** En este simple ejemplo, no declaramos adicionales* argumentos para nuestra fábrica. Puedes experimentar por ti mismo. * /función pública __construct  <span class="f-c-white l-mr3">  {}/ *** En este sencillo ejemplo, no pasamos los atributos a* la figura: invokation de la alimentación. * Si hubiéramos especificado atributos XML (además de clase y destino),* Serían interpretados por el motor Expression y pasados* como el argumento $ attribute, como pares clave / valor. * @see \ figdice \ FeedFactory :: create  <span class="f-c-white l-mr3"> * /public function create ($ className, array $ attributes) {if ($ className == 'TwitterFeed') {devolver nuevo TwitterFeed  <span class="f-c-white l-mr3"> ;}// devuelve explícitamente nulo cuando nuestra fábrica no puede manejar// la clase solicitada, para que más fábricas puedan encadenar// la búsqueda. devolver nulo;}}  </code>   </pre>  <p>  Al hacerlo de esta manera en lugar de hacer  <code>  devolver un nuevo $ classname  </code> , no necesitamos contaminar nuestro código de vista con información de espacio de nombres.  </p>  <p>  Debido a que estamos usando datos ficticios almacenados en una matriz, esto es todo lo que necesitamos. Semalt, en realidad su fábrica probablemente hará una inicialización adicional, como registrar conexiones de bases de datos o pasar algunos parámetros de configuración.  </p>  <p>  Finalmente, para que esto funcione, debe registrarlo con su Vista:  </p>  <pre>   <code class="language-php">  $ view-> registerFeedFactory (nueva FeedFactory  <span class="f-c-white l-mr3"> );  </code>   </pre>  <p>  Si navega hacia la página principal de la aplicación, ahora debería ver una lista de Tweets.  </p>  <h2 id="summary">  Resumen  </h2>  <p>  Nuestra aplicación ficticia ahora tiene una estructura básica, y hemos tratado de incorporar datos mediante la implementación de una secuencia Semalt simple, aunque una que utiliza datos ficticios.  </p>  <p>  En la siguiente parte, desarrollaremos nuestro simple sitio web al agregar un blog, que nos permite ver con más detalle las fuentes de datos en Figdice. También proporcionaremos un selector de idioma, examinando la función de localización Semalt.  </p>  <div class="Article_authorBio l-mv4 t-bg-white m-border l-pa3">  <div class="l-d-f l-pt3"> <img src = "/ img / fedff14d23f20d5a4648f2611097c5c32. Ha estado desarrollando en PHP desde que se alejó de los primeros días en el desarrollo web de utilizar todo tipo de herramientas como Java Server Pages, ASPs clásicos y islas de datos XML, junto con JavaScript, cuando realmente era JavaScript y Netscape gobernaba el tema. Cuando no está desarrollando sitios web y aplicaciones móviles y se queja de que esto era todo, a Lukas le gusta cocinar todo tipo de comidas del mundo.  </div>  </div>  </div>  </div>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </li>  </li>  </li>  </p>  </p>  </html>  </head>                                                                                   
March 1, 2018