Curso de Drupal 7 (XI): Vistas, Vistas y más Vistas

Módulos de generación automática de contenidos

 Una de las tareas básicas en el diseño de sitios web es la generación de contenidos que nos permitan visualizar cómo podría quedar el sitio web una vez se hayan introducido los contenidos.
Para ello será necesario la instalación de un conjunto de módulos:

  • Devel: módulo base de generación
  • Devel image provider: módulo que permite la introducción de fotografías en los contenidos generados
  • Drupal Ipsum: módulo de generación de lorem ipsum para los textos de los contenidos
  • Variable: módulo de pedendencia del módulo Lorem Ipsum

Una vez instalados y activados los módulos dispondremos de un nuevo apartado en la Configuración, llamado “Desarrollo”…

como puede verse en la captura disponemos de una serie de enlaces que nos vana permitir la generación de contenidos, menús, taxonomías, términos, usuarios, etc…
La parte más interesante es la generación de contenidos, si pulsamos en el enlace veremos lo siguiente…



como puede observarse, nos salen disponibles todos los tipos de contenido que disponemos, apra poder selccionar los que queremos generar y las siguientes ocpiones:

  • Drupal Ipsum Settings: donde podemos configurar si deseamos usar el drupal ipsum para generar los textos y los comentarios.
  • Delete all content: si queremos borrar todo el contenido disponible en el sitio. Esta opción es sólo recomendable si estamos maquetando Views o si el sitio realmente está vacío de contenido.
  • How many nodes would you like to generate? indicamos en número de nodos (contenido) que queremos generar.
  • How far back in time should the nodes be dated? indicamos la fecha en la que los nodos deberían ser generados.
  • Maximun number of coments por node. Número de comentarios maximos de comenarios por nodo.
  • Max word length of titles. Número máximo de palabras para el título.
  • Add url alias  for each node. Añadir una alias de URL para cada nodo.
  • Set Language on nodes. Seleccionar el idioma o idiomas del contenido generado.

Una vez configurado el formulario pulsamos en el botón “Generate”.Nos indicará los nodos que haya añadido y eliminado. Si vamos al listado de contenidos nos aparecerán los nuevos contenidos…

Y ya podremos usarlos como ejemplos en a configuración de las Views.

Integración Panels con Views

una de las cuestiones principales en la generación de los paneles es la posibilidad de integrar Views (en adelante Vistas) con los paneles.
Para ello deberemos realizar la activación de módulos de integración: page manager, views content panes
A continuación, veremos un ejemplo de inetgración de una vista en un panel y la asignación de nodos a paneles. Como vimos en la anterior entrega tendremos que generar una vista y un nuevo panel.
Con los módulos activamos deberíamos poder integrar ambos contenidos en una misma página.
Desde el menú de administración->Estructura->Paneles llegaremos al menú principal de gestión de paneles…

como puede observarse disponemos de los siguientes elementos en pantalla:

  • En la parte de la superior izquierda está un listado de acciones principales:
    • Añadir una nueva página de panel.
    • Añadir un mini panel: un bloque con contenidos
    • Añadir un panel con contenido (nodo)
    • Construir un nuevo Layout: una nueva manera de estructurar los contenidos en paneles
    • Construir un estilo nuevo para paneles.
  • En la parte inferior izquierda aparecen los listados de minipaneles y estilos
  • En la parte superior derecha aparece el asistente de creación de “Landing page” páginas con url , entradas a menú, etc…
  • En la parte inferior derecha aparece el listado de páginas con paneles.

 Para la práctica utilizaremos el panel que hemos contruido en la anterior entrega y que deberíamos ver en listado de páginas de panel de la derecha. Como puede verse podemos elegir un conjunto de acciones la lado de cada página. Aquellas páginas que hemos generado nosotros, la operación por defecto es la edición, pero si pulsamos sobre el triángulo que tiene la lado al botón nos aparecerán las otras opciones disponibles para ese elemento. De esta manera podremos cambiar la selección y luego pulsar sobre el botón una vez cambiado.
En este caso pulsamos sobre el botón “edición” del panel y llegaremos a la configuración del panel…

Como puede observarse en un formulario bastante complejo y está organizado en pestañas que facilitan su configuración:

  • Opciones:
    • Resumen de los datos de la página generada con el panel
    • Básico: donde podemos configurar su nombre, su URL de acceso, hacerla página principal, etc..
    • Access: nos permite cambiar varios criterios dependiendo del contexto en el que nos movamos, tales como el tema presente en ese momento, si estamos en la página principal, etc…
    • Menú: nos permite configurar la entra al panel desde los menús.
  • Panel:
    • Resumen
    • General: donde podemos configurar los ID’s y estilos visuales asignados al panel.
    • Selection Rules: configuración similar a la de access de las opciones, pero esta vez específicas del panel que estamos editando.
    • Contexts: contexto en el que nos encontramos, tales como si estamos presentado un determinado nodo, o si estamos en un determiando término de una taxonomía.
    • Layout: configuración de la forma del panel, con sus elementos, nos ofrecen plantillas de paneles a elegir.
    • Content: elección del contenido a integrar en los paneles.
    • Vista previa: previsualización del panel.

Cuando termiamos de configurar el panel pulsamos en el botón “Guardar”.
En este caso nos centraremos en la introducción de contenido en los paneles, para ello pulsaremos en la opción Contenido del Panel…

como puede observarse, podemos gestionar las distintas zonas visuales que tenemos en el panel, en este caso sólo hay dos zonas, la izquierda y la derecha. Para agregar un contenido a una de estas zonas existen en cada zona menús contextuales con el icono de una rueda dentada, si los pulsamos se nos despliega el menú y nos aparece la opción de agregar contenido…

si pulsamos sobre el enlace de “Agregar contenido” nos aparecerá una nueva ventana sobre la que podremos selccionar el contenido que queremos agregar…

En nuestro caso seleccionaremos primero la opción existing node y nos aparecerá la pantalla de búsqueda de nodo…

En ella buscaremos en la caja principal de texto por título o número de nodo la página que buscamos, al ser un autocompletado nos irá mostrando las distintas páginas que cumplen con la búsqueda, selccionaremos una, configuramos el resto de campos a nuestro gusto y pulsamos en “Finish”. Y volveremos a la configuración de zonas visuales donde nos aparecerá el contenido que hemos seleccionado en la zona en la que lo agregamos.
De la misma manera que intentamos agregar un nodo, intentaremos agregar una vista. Salvo que después de “agregar contenido” seleccionaremos “Views” y debería aparecer un listado similar al siguiente…

seleccionamos la Vista pulsando en ella y pulsamos en continuar. Nos aparecerá la pantalla de configuración de la vista en el panel…

configuramos los parámetros y pulsamos en “Finish” y veremos la vista en la zona definida.

Como puede verse tanto el módulos Views com Panels son muy complejos, pero con estos pequeños consejos podemos hacer un uso sencillo y práctico de ellos para construir vistas complejas y listados de tipos de contenidos, incluso mini paneles para usar como bloques en los temas visuales.

Gestión de Eventos y Calendarios 

Módulo: Calendar
Dependencias: Date
Una vez instalador y activados los módulos, incluido el Date Views, para su integración con Views. podemos añadir un nuevos nuevos tipos de campos a los tipos de contenido de Drupal 7.
A modo de ejemplo crearemos un nuevo tipo de contenido denominado Eventos al que agregaremos un campo de tipo “Date(Iso Format)” al tipo de contenido tal como vimos en anteriores entregas…

Después de añadir el campo y seleccionar el control como campo de texto, pulsaremos en “Guardar”.
De esta manera ya dispondremos de un tipo de contenido con un campo por el que podremos filtar por fecha.
Desde el módulo Views podremos gestionar una vista de calendario, así desde el listado de Vistas…

pulsamos sobre el enlace “Add view from template” y llegaremos a la selcción de plantilla…

de esta manera podremos selccionar una plantilla de View conforme al tipo del contenido y el campo por el que queremos filtrar, en este caso por la plantilla de “A calendar view of the ‘field_nombredelcampoquehayamospuestoenloseventos’ in the node base table” y pulsamos en el enlace “add” que hay al lado derecho de dicha pantilla de vista.
Rellenamos el nombre de la vista, por ejemplo con “Calendario de Eventos” y pulsamos en “Continuar”. Y nos lleva a la pantalla de configuración de la vista del Calendario…

donde podemos gestionar el resto de campos de friltrado que consideremos necesarios y después pulsaremos en “Guardar”.
De esta manera dispondremos de una vista con el calendario configurado que podremos usar como página, bloque o parte de un panel.

Mejoras de Views 

Los módulos que podeís echarle un vistacillo, son aquellos que complementan las Vistas:

  • Views slideshow (para hacer sliders y similares), Libraries (dependencia de views slideshow) 
  • Advanced help (ayuda para views y panels)
Licencia Creative Commons

Curso de Drupal 7 (X): Módulos: Views, Wysiwyg y Panels

Views

URL: http://drupal.org/project/views 
Dependencias: ctools
Views es un módulo de drupal que permite generar vistas de contenido a través del propio interfaz de drupal.
Para empezar a funcionar será necesario acceder al menú de administración al enlace de estructura…

como puede verse después de la instalación del módulo y sus dependencias y su posterior activación, nos ha colocado un nuevo enlace en “Estructura” llamado “Views”. Pulsamos en él y accedemos al listado de vistas disponibles…

como puede observarse en la captura nos presentala el listado de vistas así como varios enlaces:

  • Add new View: Añadir nueva Vista
  • Add new view from template: añadir nueva vista desde plantilla
  • Importar.

En esta entrega veremos las bases de este módulo, pero es un móduloq ue ofrece multitud de posibilidades, no descarto hacer una entrega sólo para explicar las opciones avanzadas que ofrece.
Para empezar plsamos sobre el enlace “Add new View” y así accedemos al formulario de alta de una nueva vista…

como puede verse en la captura en este formulario rellenarse los siguientes campos:

  • Título: nos genera a su vez un machine name único, para su referencia interna.
  • Descripción.
  • Show: Este apartado trata de filtar entre todos los datos dados de alta en el sitio web, cuales son aquellos que nos interesa mostrar en la vista. Según vamos seleccionando en los distintos selectores, sus campos van modificándose y adantándose a los datos, para permitir su filtrado, por defecto aparece selccionado contenido.
    • Selector de tipo de Origen de datos: Por defecto, el contenido del sitio web.
    • Selector del tipo de contenido: los distintos tipos de contenido.
    • Tagged by: etiquetas de selección para filtrar los resultados.
    • Sorted by: manera de ordenar los resultados.
  • Create a page: creación de una página asociada a la vista para su posterior referencia.
    • Título de la página
    • Ruta
    • Display Format: para elegir cóm presentar los resultados de la búsqueda.
    • Items to display: número de elementos a presentar por página.
    • Use a pager: utilizar un paginados para los resultados o no.
    • Create a menu link: crear un enlace en un menú.
    • Include a RSS feed: para crear un RSS de los contenidos que se vaya publicando en la vista y se pueda sindicar.
  • Create a Block: por si queremos crear un bloque de contenido para después colocarlo en la apariencia del tema principal.

Cuando terminemos de rellenar los datos pulsaremos en el botón “Continue and edit” y veremos la configuración de la visualización de la vista…

donde podemos llegar a configurar:

  • El formato de salida
  • Los campos a presentar
  • Los criterios de filtrado
  • La manera de ordenar los resultados
  • Las configuraciones de la página
  • El encabezado y pie de página
  • El paginador

cuando hayamos termiando de configurar la vista, pulsamos en el botón “guardar” y ya podremos enlazar dicha vista desde cualquier menu.

Wysiwyg

URL: http://drupal.org/project/wysiwyg
Dependencias: ninguna
Wysiwyg es un módulo de drupal que permite la introducción de contenido mediante varios wysiwyg que están presentes en el mercado.
Tras la instalación del módulo pasaremos a la configuración del mismo a través de configuración del módulo, desde el listado de módulos, en la fila de Wysiwyg, pulsamos en el enlace “Configuración”, tal como aparece en la siguienet captura…

así accedemos a la configuración del modulo, como puede observase, en la captura…

De esta manera podemos ver que no hay ningún editor wysiwyg instalado en el drupal, así que deberemos descargarlo e instalarlo manualmente, según nos indican los textos. Inicialmente nos decantaremos por descarga e instalar el CKEditor. Lo descargarmos desde la url: http://ckeditor.com/download exactamente la útlima versión disponible, en el momento de la redacción de esta entrega es la siguiente: http://download.cksource.com/CKEditor/CKEditor/CKEditor%203.6.3/ckeditor_3.6.3.zip
antes de nada debemos generar un directorio llamado “libraries” dentro del directorio “sites/all” dentro de la instalación de drupal. entonces desacargamos el fichero del CKEditor.
Una vez descargado, descomprimimos el fichero directamente dentro del directorio “sites/all/libraries”, por lo que deberíamos disponer de un directorio llamado “ckeditor” dentro de la carpeta “sites/all/libraries”.
Una vez copiada la carpeta a su sitio, volvemos a entrar en la configuración de Wysiwyg y nos encontraremos con un formulario similar al siguiente…

como puede observarse, podemos elegir de todos los wysiwyg instalados cual es elq ue queremos utilizar para los distintos tipos de formatos de entrada. Seleccionaremos el CKeditor en lso selctores de Filtered HTML y Full HTML y pulsaremos en el botón “Guardar” y aparecerá otra vez el formulario pero con el CKeditor ya seleccionado, en ambos casos y un enlace llamado “editar” y otro llamado “eliminar”.
Con el enlace “eliminar”, conseguiremos de-selecccionar el editor y poder elegir otro para ese formato de entrada.
Con el enlace “editar” podremos selccionar a través de el siguiente formulario…

Las distintas opciones para el editor. fundamentalmente resultan interesantes las de “Buttons and Plugins” donde podemos marcar los botones que queremos que aparezcan en ese formato de entrada en concreto. Una vez configurado el Wysiwyg, pulsaremos en el botón “Guardar”. Apareceremos de nuevo en el formulario de selección de editor.
si todo ha ido correctamente ahora al introducir un contenido que disponga de algún tipo de formato de entrada, como el body de los artículos, dispondremos de este editor si seleccionamos este tipo de formato de entrada…

Panels

URL: http://drupal.org/project/panels
Dependencias: ctools
Panels es un módulo que permite la genración de zonas visuales en una página.

Después de instalarlo, para acceder a la configuración de panels, entraremos a través del menú de Configuración-> Estructura, donde aparecerá un nuevo enlace llamado “Panels”…

 donde accedemos al apartado de dar de alta un nuevo panel…

como puede verse nor ofrecen distintas posibilidades de dar de alta un panel:

  • Mini Panel
  • Panel node:
  • Custom Layout

En esta entrega, elegiremos  “Panel Node” y veremos la configuración del panel…

dependiendo del diseño que elijamos a través del selector, nos presentará unas plantilla u otras distintas para elegir…

En el ejemplo, elegiremos “2 columnas” y “2 Column Bricks” y nos presentará el siguiente formulario…

Con los siguientes campos:

  • Título
  • Id CSS
  • Renderer:
    • Standard: ve normalmente la página.
    • In place editor: permite a usurios privilegiados (con permisos suficientes) para cambiar o actualizar lso contenidos de los paneles.
  • Las opciones típicas de un contenido.

Después de seleccionar las opciones deseadas, pulsaremos sobre el botón “Guardar”, entonces veremos la vista de dicho panel y podremos configurar su visualización y su contenido…

Curso de Symfony 2 (III): del modelo de la BBDD al Controlador CRUD Básico

Una vez configurada la aplicación tal como se indicaba en la parte II, donde disponíamos ya de una base de datos llamada s2 y nuestra aplicación estaba configurada para funcionar con dicha base de datos, a través del fichero de configuración app/config/parameters.ini:
[parameters]
    database_driver=”pdo_mysql”
    database_host=”localhost”
    database_port=””
    database_name=”s2″
    database_user=”root”
    database_password=””
    mailer_transport=”smtp”
    mailer_host=”localhost”
    mailer_user=””
    mailer_password=””
    locale=”es”
    secret=”xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”
Será necesario crear un nuevo Bundle para poder ir introduciendo nuestro código en la aplicación.
Para ello deberemos ejecutar un comando en terminal de comandos llamando al php.exe, sí éste se ha incluido en el Path del sistema, podremos ejecutarlso simplemente escribiendo “php” en la línea de comandos, si no es así deberemos escribir la ruta completa al fichero php.exe desde el directorio de instalación de xampp, en el caso de la instalación por defecto sería “C:xamppphpphp.exe”.
Todos los comandos deberán ser ejecutados en el directorio de instalación de Symfony2.
El comando que debemos ejecutar para crear el Bundle es:

php app/console generate:bundle --namespace=Pepesan/NuevoBundle --format=yml 

He aquí una captura de la consola de Aptana (mi gestor de proyectos y editor de ficheros PHP), ejecutando el comando de consola…

aunque también podemos ejecutar todos los comandos desde el intérprete de comandos de Windows, como en esta captura…

Como puede observase en el comando:

  • Primero se llama al php.exe, sin poner la extensión, es el intérprete que vamso a utilizar para ejecutar el comando, en el ejemplo “php”
  • Después indicamos que queremos utilizar la consola de aplicaciones de symfony2, en el ejemplo “app/console”.
  • Después indicamos el comando en concreto que queremos ejecutar, la generación de un nuevo bundle, en el ejemplo “generate:bundle”.
  • Después indicamos el espacio de nombres del nuevo bundle, exactamente donde se va a guardar, indicando la ruta a partir del directorio src, en el ejemplo “–namespace=Pepesan/NuevoBundle”.
  • Después indicamos el formato que queremos utilizar para la configuración, en este caso YAML, en el ejemplo “–format=yml”

A continuación, veremos la salida del comando que acabamos de ejecutar,  donde el comando se verá la información y las preguntas que nos va haciendo y las contestaciones que debemos ir dando para seguir el ejemplo. Pondré en Itálica, la información que presenta el comando por sí mismo y en negrita lo que hago para continuar el comando:
 Welcome to the Symfony2 bundle generator

Your application code must be written in bundles. This command helps
you generate them easily.

Each bundle is hosted under a namespace (like Acme/Bundle/BlogBundle).
The namespace should begin with a “vendor” name like your company name, your
project name, or your client name, followed by one or more optional category
sub-namespaces, and it should end with the bundle name itself
(which must have Bundle as a suffix).

See http://symfony.com/doc/current/cookbook/bundles/best_practices.html#index-1
for more
details on bundle naming conventions.

Use / instead of for the namespace delimiter to avoid any problem.

Bundle namespace [Pepesan/NuevoBundle]: aquí pulso la tecla “enter”, porque me sirve ese espacio de nombres para el Bundle.

In your code, a bundle is often referenced by its name. It can be the
concatenation of all namespace parts but it’s really up to you to come
up with a unique name (a good practice is to start with the vendor name).
Based on the namespace, we suggest PepesanNuevoBundle.

Bundle name [PepesanNuevoBundle]: aqui vuelvo a pulsar la tecla “enter”, porque me sirve ese nombre para referenciar al Bundle, este nombre lo suaremos cuando queramos referenciar elementos de este Bundle en el código.

The bundle can be generated anywhere. The suggested default directory uses
the standard conventions.

Target directory [C:xampphtdocsSymfony/src]: Simplemente pulso la tecla “enter”, porque el directorio src me sirve para guardar las carpetas y ficheros del bundle.

Determine the format to use for the generated configuration.

Configuration format (yml, xml, php, or annotation) [yml]: vuelvo a pulsar “enter”, porque quiero usar el formato YAML para la configuración.

To help you getting started faster, the command can generate some
code snippets for you.

Do you want to generate the whole directory structure [no]? yes (pulso enter, despues de escribir “yes”, para aceptar que me genere el arbol completo de directorios del bundle)

  Summary before generation

You are going to generate a “PepesanNuevoBundlePepesanNuevoBundle” bundle
in “C:xampphtdocsSymfony/src/” using the “yml” format.

Do you confirm generation [yes]? aqui vuelvo a pulsar la tecla “enter”, para aceptar las configuraciones que me han resumido

  Bundle generation

Generating the bundle code: OK
Checking that the bundle is autoloaded: OK
Confirm automatic update of your Kernel [yes]?
pulso “enter”, porque quiero que me añada el Bundle automáticamente al kernel de mi apliciación, fichero “app/AppKernel.php”.
Enabling the bundle inside the Kernel: OK
Confirm automatic update of the Routing [yes]?
pulso “enter”, porque quiero que me incluya las rutas definidas en el Bundle en la aplicación, en el fichero “app/config/routing.yml”
Importing the bundle routing resource: OK

  You can now start using the generated code!

Una vez que terminamos de ejecutar el comando veremos que efectivamente me han creado, dentro del directorio “src” un directorio llamado “Pepesan” y dentro de ese directorio uno llamado “Nuevo Bundle”, que contendrá la esctructura del nuevo Bundle, similar a la que se muestra en la captura…

Como puede observarse con la ejecución del comando nos ha creado la estructura completa del Bundle:

  • Controller/ contiene los controladores de Bundle (p.e. NuevoController.php)
  • DependencyInjection/ contendrá el código de injección de pendencias del bundle
  • Resources/config/ guarda la configuración, incluyendo las rutas del bundle (p.e. routing.yml)
  • Resources/views/ almacena las plantillas de vista del bundle (p.e. Nuevo/index.html.twig)
  • Resources/public/ contiene los elementos de la web (imágenes, css, etc…) que será copiados o enlazados simbólicamente al directorio “web” mediante el comando “assets:install"
  • Tests/ almacena las pruebas del bundle

También si vemos el fichero “app/config/routing.yml”, veremos que nos ha incluido las siguientes líneas:
PepesanNuevoBundle:
    resource: “@PepesanNuevoBundle/Resources/config/routing.yml”
    prefix:   /

Y que nos ha modificado el fichero “app/AppKernel.php” pra incluir una línea en la carga de bundles:
$bundles = array(
            new SymfonyBundleFrameworkBundleFrameworkBundle(),
            new SymfonyBundleSecurityBundleSecurityBundle(),
            new SymfonyBundleTwigBundleTwigBundle(),
            new SymfonyBundleMonologBundleMonologBundle(),
            new SymfonyBundleSwiftmailerBundleSwiftmailerBundle(),
            new SymfonyBundleDoctrineBundleDoctrineBundle(),
            new SymfonyBundleAsseticBundleAsseticBundle(),
            new JMSSecurityExtraBundleJMSSecurityExtraBundle(),
            new AcmeDemoBundleAcmeDemoBundle(),
            new PepesanNuevoBundlePepesanNuevoBundle(),
        );

Con estas configuraciones ya tendremos el nuevo Bundle creado y configurada la aplicación para hacer uso del nuevo Bundle.

 

Importando el modelo en la base de datos

Para poder trabajar con datos en fundamental definirlos, digamos por ejemplo en la base de datos. Para empezar vamos a trabajar con una estructura sencilla, sólo una tabla en la base de datos. Para ello, usaremos el siguiente fichero de volcado de base de datos SQL…


— Estructura de tabla para la tabla `clientes`

CREATE TABLE IF NOT EXISTS `clientes` (
  `clienteid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nombre` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `tlf` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `web` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `image` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `dir` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`clienteid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci AUTO_INCREMENT=9 ;


— Volcado de datos para la tabla `clientes`

INSERT INTO `clientes` (`clienteid`, `nombre`, `tlf`, `web`, `image`, `dir`) VALUES
(1, ‘pepe’, ‘656661477’, ‘http://www.plexxoo.com’, ‘http://images.wikia.com/lotr/es/images/5/59/Eomer.jpg’, ‘calle de mi casa’),
(3, ‘pepe3’, ‘656661479’, ‘http://www.plexxoo.com’, ‘http://images.wikia.com/lotr/es/images/5/59/Eomer.jpg’, ‘calle de mi casa3’),
(4, ‘pepe3’, ‘656661479’, ‘http://www.plexxoo.com’, ‘http://images.wikia.com/lotr/es/images/5/59/Eomer.jpg’, ‘calle de mi casa3’),
(5, ‘pepe3’, ‘656661479’, ‘http://www.plexxoo.com’, ‘http://images.wikia.com/lotr/es/images/5/59/Eomer.jpg’, ‘calle de mi casa3’),
(7, ‘pepe’, ‘pp’, ‘pp’, ‘pp’, ‘pp’),
(8, ‘www’, ‘www’, ‘www’, ‘www’, ‘ww’);

Para importar este modelo, será necesario abrir el phpmyadmin, mediante la URL: http://localhost/phpmyadmin
veremos una pantalla similar a la siguiente…

pulsaremos sobre el enlace de la parte irzquierda de la pantalla, llamado como la base de datos que hemos creado “s2“, así veremos a estructura de la base de datos…

Pulsaremos sobre el botón SQL, para poder introducir el código SQL de generación de la tabla “clientes”…

pulsaremos en el botón “Continuar”, si todo ha ido bien, no debería sacar ningún mensaje de error y al pulsar sobre el botón “Estructura”, deberíamos poder ver la tabla en el listado, tal como aparece en la siguiente captura…

Al terminar este paso, ya dispondremos de una tabla con datos iniciales en la base de datos contra la que está configurada la aplicación de Symfony2.

Importando el modelo de la base de datos con Doctrine

Una vez que disponemos de un modelo ya en la base de datos, será necesario importarlo para generar los ficheros de Entidad de Doctrine para así disponer de una manera de consultar y manejar la tabla de la base de datos con el Bundle de nuestra aplicación Symfony2.
Para ello tenemos que seguir una serie de pasos:

  1. Generar un fichero de configuración XML, teniendo como modelo las tablas de la base de datos.
  2. Generar las entidades en base a ese modelo XML.
  3. Usar esas entidades en los controladores del bundle.

Para generar el fichero XML de configuración debemos ejecutar otro comando de Symfony2:

php app/console doctrine:mapping:convert xml ./src/Pepesan/NuevoBundle/Resources/config/doctrine/metadata/orm --from-database --force

Como puede observase en el comando:

  • Primero se llama al php.exe, sin poner la extensión, es el intérprete que vamso a utilizar para ejecutar el comando, en el ejemplo “php”
  • Después indicamos que queremos utilizar la consola de aplicaciones de symfony2, en el ejemplo “app/console”.
  • Después indicamos el comando en concreto que queremos ejecutar, la generación de un nuevo fichero de mapping (relación entre campos de la base de datos y atributos de los objetos de Doctrine), en el ejemplo “doctrine:mapping:convert”
  • Después indicamos el formato que queremos utilizar para el fichero, en el ejemplo “xml”
  • Después indicamos donde queremos guardar el fichero, en el ejemplo “./src/Pepesan/NuevoBundle/Resources/config/doctrine/metadata/orm”
  • Después indicamos desde donde queremos coger la información que vamos a guardar en el XML, en ejemplo “–from-database”
  • Por último indicamos que queremos que fuerce la generación sobreescribiendo lo que sea necesario, en el ejemplo “–force”

 Si todo ha ido correctamente deberíamos ver una salida similar a la que aparece en la captura…

como resultado nos sacará el mensaje…
Processing entity “Clientes”

Exporting “xml” mapping information to “C:xampphtdocsSymfonysrcPepesanNuevoBundleRes
ourcesconfigdoctrinemetadataorm”

Y dispondremos de un cambio en la estructura del bundle, nos habrá creado un nuevo fichero en el directorio “PepesanNuevoBundleResourcesconfigdoctrinemetadataorm” llamado “clientes.orm.xml” que tendrá el contenido del mapping de la base de datos…
<?xml version=”1.0″ encoding=”utf-8″?>
<doctrine-mapping xmlns=”http://doctrine-project.org/schemas/orm/doctrine-mapping” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd”>
  <entity name=”Clientes” table=”clientes”>
    <change-tracking-policy>DEFERRED_IMPLICIT</change-tracking-policy>
    <id name=”clienteid” type=”integer” column=”clienteid”>
      <generator strategy=”IDENTITY”/>
    </id>
    <field name=”nombre” type=”string” column=”nombre” length=”50″/>
    <field name=”tlf” type=”string” column=”tlf” length=”20″/>
    <field name=”web” type=”string” column=”web” length=”255″/>
    <field name=”image” type=”string” column=”image” length=”255″/>
    <field name=”dir” type=”string” column=”dir” length=”255″/>
    <lifecycle-callbacks/>
  </entity>
</doctrine-mapping>

Como puede verse en el fichero, se establece una relación o mapping, entre la tabla “clientes”  y la Entidad “Clientes”, relacionando todos los atributos de la nueva Entidad con los campos de la tabla.

Generando las Entidades

Ahora deberemos importar este XML para generar los ficheros de Clases Entidad, para ello deberemos ejecutar dos comandos.
El primero es el siguiente:

php app/console doctrine:mapping:import PepesanNuevoBundle annotation

Como puede observase en el comando:

  • Primero se llama al php.exe, sin poner la extensión, es el intérprete que vamso a utilizar para ejecutar el comando, en el ejemplo “php”
  • Después indicamos que queremos utilizar la consola de aplicaciones de symfony2, en el ejemplo “app/console”.
  • Después indicamos el comando en concreto que queremos ejecutar, la importación en el bundle del fichero de mapping XML, en ejemplo “doctrine:mapping:import”
  • Después indicamos el bundle donde queremos importar el fichero, en el ejemplo “PepesanNuevoBundle”
  • Por último, indicamos cómo queremos manejar el mapping, en este caso como anotaciones en el código, en el ejemplo “annotations”

 Así tendremos una salida similar a la de la captura…

donde nos informa de que ha generado correctamente el fichero de Entidad “Clientes.php”…
Importing mapping information from “default” entity manager
  > writing C:xampphtdocsSymfonysrcPepesanNuevoBundle/Entity/Clientes.php
Dicho fichero se coloca en el directorio “Entity” de nueva creación en el directorio del Bundle, si miramos su contenido veremos lo siguiente…
<?php

namespace PepesanNuevoBundleEntity;

use DoctrineORMMapping as ORM;

/**
 * PepesanNuevoBundleEntityClientes
 *
 * @ORMTable(name=”clientes”)
 * @ORMEntity
 */
class Clientes
{
    /**
     * @var integer $clienteid
     *
     * @ORMColumn(name=”clienteid”, type=”integer”, nullable=false)
     * @ORMId
     * @ORMGeneratedValue(strategy=”IDENTITY”)
     */
    private $clienteid;

    /**
     * @var string $nombre
     *
     * @ORMColumn(name=”nombre”, type=”string”, length=50, nullable=false)
     */
    private $nombre;

    /**
     * @var string $tlf
     *
     * @ORMColumn(name=”tlf”, type=”string”, length=20, nullable=false)
     */
    private $tlf;

    /**
     * @var string $web
     *
     * @ORMColumn(name=”web”, type=”string”, length=255, nullable=false)
     */
    private $web;

    /**
     * @var string $image
     *
     * @ORMColumn(name=”image”, type=”string”, length=255, nullable=false)
     */
    private $image;

    /**
     * @var string $dir
     *
     * @ORMColumn(name=”dir”, type=”string”, length=255, nullable=false)
     */
    private $dir;

}

Si observamos el fichero generado con un poco más de calma, nos fijamos en las dos inclusiones de código:

  • El namespace, con la localización del fichero en el Bundle.
  • El Use con la inclusión de la biblioteca de ORM-Mapping de Doctrine, de esta manera disponemos de unos comentarios similares al uso de las entidades JPA de J2EE, pero en Symfony2
  • El código comentado indicando la relación de la entidad con la tabla
  • El nombre de la clase como el nombre de la tabla, salvo porque la primera letra es mayúscula
  • Y luego indicando atributo a atributo, su relación con los nombres de campos de la tabla y sus validaciones, con especial atención a la clave primaria de tabla, que actua como identificativo único de la entidad.

Después de esto ejecutamos el último comando:
php app/console doctrine:generate:entities PepesanNuevoBundle
Como puede observase en el comando:

  • Primero se llama al php.exe, sin poner la extensión, es el intérprete que vamso a utilizar para ejecutar el comando, en el ejemplo “php”
  • Después indicamos que queremos utilizar la consola de aplicaciones de symfony2, en el ejemplo “app/console”.
  • Después indicamos el comando en concreto que queremos ejecutar, generación de las entidades y su puesta en marcha, en ejemplo “doctrine:generate:entities”
  • Después indicamos el bundle donde queremos generar las entidades, en el ejemplo “PepesanNuevoBundle”

Tal como se puede ver en la siguiente captura…

 la salida nos indica lo siguiente…
Generating entities for bundle “PepesanNuevoBundle”
  > backing up Clientes.php to Clientes.php~
  > generating PepesanNuevoBundleEntityClientes

Nos hace un backup del fichero Clientes.php y nos sobre escribe el fochero Clientes.php con el siguiente contenido…
<?php

namespace PepesanNuevoBundleEntity;

use DoctrineORMMapping as ORM;

/**
 * PepesanNuevoBundleEntityClientes
 *
 * @ORMTable(name=”clientes”)
 * @ORMEntity
 */
class Clientes
{
    /**
     * @var integer $clienteid
     *
     * @ORMColumn(name=”clienteid”, type=”integer”, nullable=false)
     * @ORMId
     * @ORMGeneratedValue(strategy=”IDENTITY”)
     */
    private $clienteid;

    /**
     * @var string $nombre
     *
     * @ORMColumn(name=”nombre”, type=”string”, length=50, nullable=false)
     */
    private $nombre;

    /**
     * @var string $tlf
     *
     * @ORMColumn(name=”tlf”, type=”string”, length=20, nullable=false)
     */
    private $tlf;

    /**
     * @var string $web
     *
     * @ORMColumn(name=”web”, type=”string”, length=255, nullable=false)
     */
    private $web;

    /**
     * @var string $image
     *
     * @ORMColumn(name=”image”, type=”string”, length=255, nullable=false)
     */
    private $image;

    /**
     * @var string $dir
     *
     * @ORMColumn(name=”dir”, type=”string”, length=255, nullable=false)
     */
    private $dir;

    /**
     * Get clienteid
     *
     * @return integer
     */
    public function getClienteid()
    {
        return $this->clienteid;
    }

    /**
     * Set nombre
     *
     * @param string $nombre
     */
    public function setNombre($nombre)
    {
        $this->nombre = $nombre;
    }

    /**
     * Get nombre
     *
     * @return string
     */
    public function getNombre()
    {
        return $this->nombre;
    }

    /**
     * Set tlf
     *
     * @param string $tlf
     */
    public function setTlf($tlf)
    {
        $this->tlf = $tlf;
    }

    /**
     * Get tlf
     *
     * @return string
     */
    public function getTlf()
    {
        return $this->tlf;
    }

    /**
     * Set web
     *
     * @param string $web
     */
    public function setWeb($web)
    {
        $this->web = $web;
    }

    /**
     * Get web
     *
     * @return string
     */
    public function getWeb()
    {
        return $this->web;
    }

    /**
     * Set image
     *
     * @param string $image
     */
    public function setImage($image)
    {
        $this->image = $image;
    }

    /**
     * Get image
     *
     * @return string
     */
    public function getImage()
    {
        return $this->image;
    }

    /**
     * Set dir
     *
     * @param string $dir
     */
    public function setDir($dir)
    {
        $this->dir = $dir;
    }

    /**
     * Get dir
     *
     * @return string
     */
    public function getDir()
    {
        return $this->dir;
    }
}
De esta manera nos incluye los método principales de manejo de los datos de la clase Clientes, denominados getter y setters.

Generando un CRUD básico desde una Entidad Doctrine

Una de las cuestiones principales la ahora de gestionar datos es la generación de las operaciones web de manejo de los datos.
La operaciones básicas del CRUD son:

  • Listar
  • Añadir
  • Mostrar
  • Editar
  • Borrar

Para ello utilizaremos la entidad “Clientes” como base de la generación de un Controlador CRUD web.
Para que funcione correctamente la generación será necesario modificar el fichero Clientes.php para que el atributo de la clave primaria de llame “$id” en vez de “$clientesid” de la siguiente manera…
/**
     * @var integer $id
     *
     * @ORMColumn(name=”clienteid”, type=”integer”, nullable=false)
     * @ORMId
     * @ORMGeneratedValue(strategy=”IDENTITY”)
     */
    private $id;

También será necesario cambiar el método getClientesid podniendo lo siguiente:
/**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
Como puede observarse lo único que se han cambiado son los comentarios que están colocados antes de la definición del atributo, el nombre del propio atributo, el método de obtención de datos del atributo $id, todo lo demás en el fichero permanecerá constante.
A continucación ejecutaremos el comando:
php app/console generate:doctrine:crud –entity=PepesanNuevoBundle:Clientes –format=yml
 –with-write

Como puede observase en el comando:

  • Primero se llama al php.exe, sin poner la extensión, es el intérprete que vamso a utilizar para ejecutar el comando, en el ejemplo “php”
  • Después indicamos que queremos utilizar la consola de aplicaciones de symfony2, en el ejemplo “app/console”.
  • Después indicamos el comando en concreto que queremos ejecutar, generación un CRUD a través de las entidades doctrine, en ejemplo “generate:doctrine:crud”
  •  Después indicamos el nombre de la entidad en base a la cual queremos generar el CRUD, en el ejemplo “–entity=PepesanNuevoBundle:Clientes”
  • Por último indicamos el formato de las rutas de URL que queremos utilizar, en este caso YAML, en el ejemplo, “–format=yml”

Con este ocmando dispondremos también de una salida compleja, en itálica veremos la salida estándar y en negrita las pulsaciones de teclado…
 Welcome to the Doctrine2 CRUD generator

This command helps you generate CRUD controllers and templates.

First, you need to give the entity for which you want to generate a CRUD.
You can give an entity that does not exist yet and the wizard will help
you defining it.

You must use the shortcut notation like AcmeBlogBundle:Post.

The Entity shortcut name [PepesanNuevoBundle:Clientes]: Pulsamos “Enter”

By default, the generator creates two actions: list and show.
You can also ask it to generate “write” actions: new, update, and delete.

Do you want to generate the “write” actions [yes]?Pulsamos “Enter”

Determine the format to use for the generated CRUD.

Configuration format (yml, xml, php, or annotation) [yml]:Pulsamos “Enter”

Determine the routes prefix (all the routes will be “mounted” under this
prefix: /prefix/, /prefix/new, …).

Routes prefix [/clientes]:Pulsamos “Enter”


  Summary before generation

You are going to generate a CRUD controller for “PepesanNuevoBundle:Clientes”
using the “yml” format.

Do you confirm generation [yes]?Pulsamos “Enter”

  CRUD generation

Generating the CRUD code: OK
Generating the Form code: OK
Confirm automatic update of the Routing [yes]?
no ( y pulsamos “Enter”)
Importing the CRUD routes: FAILED

  The command was not able to configure everything automatically.
  You must do the following changes manually.

– Import the bundle’s routing resource in the bundle routing file
  (C:xampphtdocsSymfonysrcPepesanNuevoBundle/Resources/config/routing.yml).

    PepesanNuevoBundle_clientes:
        resource: “@PepesanNuevoBundle/Resources/config/routing/clientes.yml”
        prefix:   /clientes

Como nos indica la salida no se ha podido configurar automaticamente las rutas, pero nos dice la solución al problema, includir el fichero de rutas del bundle desde la configuración de la rutas de la aplicación De esta manera copiaremos el código:
    PepesanNuevoBundle_clientes:
        resource: “@PepesanNuevoBundle/Resources/config/routing/clientes.yml”
        prefix:   /clientes

y lo pegaremos al final del fichero app/config/routing.yml.
De esta manera incluimos la condifuración de rutas del bundle en la aplicación por que al entrar en la URL: http://localhost/s2/web/app_dev.php/clientes deberíamos ver una pantalla similar a la siguiente…

En la siguiente entrega veremos cómo funciona el código generado y cómo empezar a modificar los comportamientos web por defecto del CRUD.



Referencias:

Curso de Symfony 2 (II): Instalación y Configuración

Por lo tanto los requisitos de instalación para este tutorial son lo siguientes:

Instalación de XAMPP

A continuación  seguimos los pasos de este tutorial del ministerio de educación. O bien podemos descargarnos el ejecutable autoinstalable con asistente, el típico .exe de instalación de siguiente, siguiente… Finalizar.

Una vez instalado XAMPP, digamos en el directorio c:xampp, por poner un ejemplo, abrimos la carpeta con el explorador de carpetas.
Veremos un ejecutable llamado: xampp-control.exe , lo ejecutamos con un doble click y nos parecerá la pantalla de manejo de servidores de XAMPP.
Cada vez que queramos que cualqueir aplicación web funcione será necesario tener arancado los servidores Apache y Mysql, para esto basta con pulsar sobre los iconos Start, que están al lado de Apache primero y luego de Mysql.
Si todo ha ido bien, al lado del nombre de Apache y Mysql debería apareces un etiqueta con fondo verde con el texto “Running”.
Para verificar la instalación de XAMPP, bastará con entrar a la siguiente dirección URL, a través de nuestro navegador favorito: http://localhost/phpmyadmin
Si la instalación y el arranque de los servicios ha sido correcta, Deberíamos ver el listado de bases de datos disponibles en Mysql desde el interfaz web de PhpMyAdmin.
Los datos de conexión a Mysql por defecto en la instalación de Mysql en XAMPP son los siguientes:

  • Servidor: localhost
  • Puerto: 3306
  • Usuario: root
  • Contraseña: vacía (significa que no tiene contraseña ni es necesario introducirla para conectar)

Colocación del php.exe en el Path

En Windows, para poder ejecutar los comandos de Symfony 2, es necesario poner la ruta donde se encuentra el fichero php.exe en la variable de entorno Path. Esta configuración requiere habitualmente permisos de administración.
Para ello pulsa el botón derecho sobre el Botón o Icono de Equipo, selecciona propiedades. Aparecerá la pantalla de configuración del sistema, en Windows 7 se llama Sistema, pulsamos en “Configuración avanzada del sistema”, pulsamos en el botón “Variables de entorno…”, en el apartado de Variables de sistema buscamos la variable “Path”, la seleccionamos y pulsamos sobre el botón “Editar…” y en el valor añadirmos la ruta al directorio de instalación de PHP de XAMPP, en el caso de la instalación sin modificarlas rutas, es “c:xamppphp”. Pulsamos en Aceptar y otra vez en aceptar y ya estará configurada la variable Path correctamente. De esta manera podremos ejecutar el php.exe desde cualquier directorio.

Conclusiones

Con esto tenemos todo lo necesario para poder instalar Symfony 2 en nuestro ordenador, más adelante detallaremos los pasos necesarios para su subida a producción, o dicho de otra forma, a un hosting para publicar el sitio web en Internet.

 Instalación de Symfony 2

Descargamos el fichero zip y lo descomprimimos en la carpeta htdocs del directorio de instalación de XAMPP, si hemos dejado las rutas de instalación por defecto, deberíamos descomprimirlo en C:xampphtdocs.
Renombramos la carpeta con el nombre s2 para facilitar la escritura de las URL’s y los directorios.
De esta manera deberíamos tener accesible esa carpeta a través de la URL: http://localhost/s2
Si miramos el contenido de la carpeta s2 nos encontraremos el siguiente contenido:

  • Diretorio app: donde se guardan las configuraciones de las aplicaciones
  • Directorio bin: donde se encuentran los ejecutables
  • Directorio src: donde se almacena el código fuente de las aplicaciones
  • Directorio Vendor: donde se almacenan los bundles del framework de Symfony y otros componentes
  • Directorio web: donde se colocan los ficheros que deben ser accesibles desde URL
  • deps: fichero de dependencias
  • deps.lock: fichero de versiones de dependencias
  • License: fichero de licencia
  • Readme.md: fichero de instrucciones de instalación y configuración básicas

    Creando la Base de datos inicial

    Esta tarea podemos realizarla desde el PhpMyAdmin a través de la URL: http://localhost/phpmyadmin
    Una vez abierto el navegador en esa dirección, aparecerá el listado de bases de datos, similar al siguiente:

    Pulsamos sobre el Icono “Bases de Datos” en el menu superior de PhpMyAdmin, aparecerá el formulario de creación de bases de datos, le damos un nombre, por ejemplo “s2” y pulsamos en el boton “Crear”.

    Deberíamos ver un mensaje que nos muestra que la base de datos ha sido creada satisfactoriamente.

    Los datos de configuración de la base de datos que hemos creado son:

    • Servidor: localhost
    • Puerto: 3306
    • Usuario: root
    • Contraseña: vacía (significa que no tiene contraseña ni es necesario introducirla para conectar)
    • Base de datos: s2

     Configuración de una aplicación Symfony 2

    A continuación, entramos en la URL: http://localhost/s2/web/config.php
    Entonces veremos una pantalla similar a la siguiente…

    Pulsaremos sobre el enlace “Configure yout Symfony Application online”, si todo ha ido bien, deberíamos ver una pantalla de configuración de la base de datos de la nueva aplicación, similar a la siguiente…

     Introducimos los datos de conexión a la BBDD que hemos gestionado con el PhpMyAdmin y pulsamos en el botón “Next Step”.
    A continuación veremos la pantalla de configuración de una cadena Secret, similar a la siguiente…

    simplemente dejaremos el valor que nos ha generado y pulsamos en el botón “Next Step”. Si todo ha ido correcto, deberíamos ver una pantalla similar a la siguiente…

    donde nos felicita porque la instalación se ha realizado satisfactoriamente y nos hace un resumen de las configuraciones que ha colocado a la aplicación. Si deseamos cambiar el fichero de configuración donde se almacenan estos parámetros deberemos ir al directorio app/config y editar el fichero parameters.yml, por ejemplo para cambiar el idioma, el parámetro “locale” en el fichero, y poner “es” en vez de “en”.
    Para terminar con la instalación, pulsaremos en el enlace “Go to Wellcome Page” o la URL: http://localhost/s2/web/app_dev.php/
    Con esto entraremos al entorno de desarrollo de la aplicación y veremos una página similar a la siguiente…

    Si somos capaces de ver esta página, significa que la aplicación Symfony se ha generadoy configurado satisfactoriamente y ya podemos pasar al desarrollo de nuestra aplicación web.

    Licencia Creative Commons

    Uso de cookies

    Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

    Aviso de cookies