Mostrando entradas con la etiqueta Bootstrap. Mostrar todas las entradas
Mostrando entradas con la etiqueta Bootstrap. Mostrar todas las entradas

lunes, 4 de febrero de 2013

Crear un proyecto Zend Framework 2.1

Vamos a crear un proyecto con la nueva versión de Zend Framework 2.1 a través de composer, personalmente puedo decir que ahora este framework PHP me parece más cool.

Es necesario tomar en cuenta en tener la versión de nuestro PHP >= 5.3.3 por temas de namespaces y el composer.

Para esto vamos a ser lo más ordenado posible, estoy usando Ubuntu12.10 con un editor Sublime Text 2 y un terminal de comando.

estoy gratamente sorprendido por los nuevos cambios de Zend con la integración  frameworks front-end, y  la orientación modular explicita  que ahora es, y el fácil trabajo con Doctrine.

Paso 1: creando nuestra raíz para nuestros proyectos en Zend Framework2.1

Lo que haremos en este primer paso será crear una carpeta de proyectos para Zend Framework 2.1 en nuestro directorio personal. En mi caso la ruta será /home/johnny/, abrimos nuestro terminal y por defecto estaremos en nuestro directorio personal ya listo para crear nuestra carpeta raíz.


Y tendremos este resultado:


Paso 2: Descargando el Zend Framework Tool (ZFTool)

El ZfTool es una herramienta de gran utilidad para administrar nuestros módulos, crear proyectos, etc.
comparto este link para que vean las diferentes formas que  el portal de Zend enseña a usarlo.

Según el portal podemos descargar un archivo PHAR para generar nuestros proyectos, así que eso es lo que haremos.

Por nuestro terminal ingresamos a nuestra carpeta generada


Descargamos el archivo PHAR en nuestro directorio raíz:



Paso 3: generamos proyecto con zftool.phar

Ahora que descargamos el archivo zftool.phar abrimos nuestro terminal y ejecutaremos el comando:

php zftool.phar create project proyecto1


Al ejecutar el comando anterior, se generará una carpeta llamada proyecto1 ahí dentro estará nuestros archivos para nuestro respectivo proyecto.

También nos indica que a través del terminal ingresemos al directorio generado y que ejecutemos esa linea de comando:

php composer.phar install


Ahí observamos que se ha instalado Zend Framework 2.1 que por ahora es lo que nos interesa.

Paso 4: Configuramos nuestro Virtual Host para Zend Framework 2.1


1. sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/local.proyecto1.com
2. sudo gedit /etc/apache2/sites-available/local.proyecto1.com
3. sudo gedit /etc/hosts
4. sudo a2ensite local.proyecto1.com
5. sudo /etc/init.d/apache2 restart

El comando número 2 se debe configurar el archivo de tal manera indicándole donde está nuestro directorio algo así.


El comando número 3 debe quedar algo así:


Ahora vamos a un navegador y escribimos la dirección para ver nuestro proyecto.



Ahora levantamos el proyecto con un editor en este caso lo haré con Sublime Text 2


En la imagen anterior vemos que ahora si Zend Framework 2.1 es orientado a modulos y tiene el modulo Application por defecto, si queremos crear nuevos módulos lo haremos con el archivo zftool.phar pero ¿cómo?

Hay que recordar que nuestro archivo lo tenemos en la raíz de nuestro proyecto, así que haremos una copia de este archivo a nuestro "proyecto1" por terminal sería algo así:


Para constatar verificamos la versión y la lista te módulos que tenemos:


Paso 5: creamos módulos con ZFTool en Zend Framework 2.1


Esto ahora es super sencillo por el zftool.phar :
Por nuestro terminal entramos a la carpeta de nuestro proyecto "proyecto1" en nuestro caso
Ahí ejecutamos el comando:

php zftool.phar create module moduletest




En mis siguientes post haremos algo sencillo para la comunicación del modelo a la vista administrador por el controlador, en fin, existe un ejemplo en la pagina oficial del framework.


Espero sus comentarios.



domingo, 20 de enero de 2013

Bootstrap en Symfony2.1 con Twig

Ahora vamos a crear un Bundle para configurar una especie de tema con Bootstrap de twitter, primero vamos a definir que es un Bundle, para esto les dejo este link Bundle.

Crearé un Bundle dentro de una carpeta src/themes, donde integraré con el framework front-end Bootstrap para armar una vista de un portal de eventos con HTML5, CSS3 y aplicando Responsive Design.

Debo recordar que Symfony trabaja con un sistema moderno de motor de plantillas llamando twig, es necesario leer un poco de esto.

Paso 1: Creación de un Bundle.

nos dirigimos a través de nuestra consola a la carpeta de nuestro proyecto generado, que se llama colegio, para los que quieren ver los post anterior para que entren en contexto.
1. Crear proyecto con Symfony2.1
2. YUI Compressor con Symfony2.1

Ejecutamos el comando:

php app\console generate:bundle

Al ejecutar esto nos dará la bienvenido al generador de Bundle en consola y nos pedirá el namespace ahí escribiremos: Themes/BootstrapBundle

Esto quiere decir que creará una carpeta llamada themes dentro de la carpeta src/ y dentro de la carpeta Themes/ creará una carpeta llamada BootstrapBundle que es nuestro nuevo Bundle.

Enter y después nos pedirá un nombre para nuestro nuevo Bundle:


En la imagen anterior el generador nos recomiendo un nombre, así que le damos enter aceptando la sugerencia. Ahora nos pedirá donde es que se creará los directorios de los Bundles, el generador nos recomendará dentro de la carpeta src/ asi que haciendo ENTER lo aceptamos.


Ahora nos pedirá el formato que deseamos que tenga nuestro nuevo Bundle, el generador nos recomienda Anotaciones y haciendo enter también lo aceptamos.


Ahora nos pedirá si queremos generar todo el conjunto de directorios escribimos "yes", por que mas adelante también querremos usar las traducciones.


Luego nos pide confirmación y le damos entes al "yes",  también nos pide si queremos que actualicemos el kernel y le damos enter al "yes,  de ahí nos pide para actualizar el routing y también le daremos enter al yes


Ahora vemos nuestra estructura de nuestro nuevo Bundle:



Ahora por que he creado una carpeta Themes y dentro recién crear un Bundle para Bootstrap, bueno sucede q es un tema de orden, si desarrollo un Bundle para  solo pintar entonces lo empaqueto dentro de Themes y así puedo organizar mis Bundles por tipos, algunos colegas no piensan que esa es la funcionalidad de un Bundle, pero en temas de análisis me parece que es la mejor forma.

Paso 2: Descargamos Bootstrap

Descargamos las librerías de Bootstrap  y descomprimimos y ahí veremos 3 carpetas css, js, img, el contenido de cada uno de estas carpetas lo copiamos y lo pegamos dentro de la carpeta public de nuestro Bundle que coincidente mente también tiene carpetas con los mismos nombres excepto con la carpeta img no existe para ello creamos la carpeta img y pegamos el contenido debería quedar así la estructura:



En la imagen anterior vemos la estructura con los archivos del bootstrap añadidos y he seleccionado los archivos con extensión .min ello pueden borrarla no los necesitamos, por que? bueno por que seguramente editaremos y ademas contamos con el YUI Compressor para comprimir nuestros CSS y JS, esto lo explique en mi post anterior.

Paso 3: Editamos la base.html.twig

Este archivo se encuentra en app/Resources/views/base.html.twig Este archivo es la base de nuestra plantilla y la llenaremos de codigo HTML5 con bloques de twig. Vemos que ya tiene los bloques por defecto así que lo dejamos tal cual pueden agregar los metas que crean necesarios le agregué el lang y un meta por mi parte.


Ahora vamos a crear el layout.html.twig en esta ruta:  verán que esta dentro de la carpeta views y fuera de la carpeta Default.



En la imagen anterior señalamos un archivo que estará vacío y lo codificamos y dejamos de la siguiente manera:


En la imagen anterior definimos 3 bloques principales una para los css el otro para el contenido html y el tercero para archivos js, también vemos el uso de los YUI Compressor para comprimir todos los archivos que usemos, también vemos en la linea 17 que agregué el jquery descargate el código no compreso y pégalo en la carpeta public/js/jquery.js, ahora dentro de la carpeta Default está un archivo llamado index.html.twig
este archivo solo tiene un saludo con una variable lo editarems y quedará así mas o menos:


En la imagen anterior vemos como estoy heredando el layout.html.twig que está fuera y dentro del bloque body pongo la variable que estaba.

Paso 4: Ejecutando nuestro controlador

Cuando creamos nuestro Bundle por defecto crea un controlador Default en la carpeta Controller y sus vistas por controlador en la carpeta views/Default/, el controlador tiene su metodo index que envía un saludo y para problar todo Bundle recién creado lo hacemos con la siguiente ruta:
 http://local.colegio.com/app_dev.php/hello/Johnny

por que hello/Johnny, bueno si recuerdan cuando creamos un Bundle dijimos que por el formato anotaciones, bueno esto hace que sobre cada método se indique la forma de como llegar a ese metodo vemos el indexAction de nuestro controlador Default:


En la imagen anterior vemos que para llegar a este metodo tiene que ser concatenando al nuestra URL http://local.colegio.com/app_dev.php + /hello/Johnny, en este caso {name} es variable puede ir cualquier texto. Ahora vayamos al navegador y vemos que sale con esa URL.



Ahora vemos el código fuente como lo ha comprimido :

Vemos en la imagen anterior que solo ha creado un archivo CSS y un archivo JS apesar que usamos varios, sucede que el YUI Compressor lo comprimió todos mis assets a un solo archivo respectivamente.

Ahora ya tenemos el bootstrap integrado en un Bundle listo para usar todos sus componentes, haré algo para probar el estilo y el responsive design.

Después de repasar el código de Bootstrap en primera instancia obtengo esto:



El código es el siguiente:

{% extends 'ThemesBootstrapBundle::layout.html.twig' %}

{% block body -%}
<div class="container">
<div class="row">
<div class="span12">
LOGO
</div>
</div>
   <div class="navbar navbar-inverse">
   <div class="navbar-inner">
   <div class="container">
   
   <!-- .btn-navbar is used as the toggle for collapsed navbar content -->
   <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
   <span class="icon-bar"></span>
   <span class="icon-bar"></span>
   <span class="icon-bar"></span>
   </a>
   
   <!-- Be sure to leave the brand out there if you want it shown -->
   <a class="brand" href="#">Project name</a>
   
   <!-- Everything you want hidden at 940px or less, place within here -->
   <div class="nav-collapse collapse">
   <!-- .nav, .navbar-search, .navbar-form, etc -->
   <ul class="nav">
   <li class="active">
   <a href="#">Home</a>
   </li>
   <li><a href="#">Link</a></li>
   <li><a href="#">Link</a></li>
   </ul>  
   </div>
   
   </div>
   </div>
   </div>
   <div class="row">
    <div class="span12">
   <div id="myCarousel" class="carousel slide">
   <!-- Carousel items -->
   <div class="carousel-inner">
   <div class="active item">
    <img src="http://lorempixel.com/800/250/nature/1/">
   </div>
   <div class="item"><img src="http://lorempixel.com/800/250/nature/2/"></div>
   <div class="item"><img src="http://lorempixel.com/800/250/nature/3/"></div>
   </div>
   <!-- Carousel nav -->
   <a class="carousel-control left" href="#myCarousel" data-slide="prev">&lsaquo;</a>
   <a class="carousel-control right" href="#myCarousel" data-slide="next">&rsaquo;</a>
   </div>    
    </div>
   </div>
   <div class="row">
    <div class="span12">
    Hello {{ name }}!
    </div>
   </div>
</div>
{% endblock %}



Debo agregar q para que funcione el Slide o carrusel de imagenes he creado un archivo llamado script.js


Y contiene este código:


Y en el layout.html.twig agregamos la ruta del script para que lo comprima y lo agregue al script generado



Ahora solo limpie la caché del proyecto y recompile los assets nuevamente:

php app/console cache:clear

php app/console assets:install web --symlink

Como último paso vamos a poner a nuestro Bundle que cargue por defecto y eliminar del registro a nuestro DemoBundle ya que solo sirve de referencia.

en la ruta app/AppKernel.php eliminamos la instancia que hacen al Bundle DemoBundle



Una vez borrado esa linea de código, nos vamos al archivo app/config/routing_dev.yml ahí veremos 3 llamadas al AcmeBundle tambien lo eliminamos el siguiente segmento:


Ahora por último vamos a nuestro controlador Default y hacer modificaciones en la ruta de llegada al método indexAction y lo dejamos así:


Aya no olvidar que en la vista (index.html.twig) del controlador Default está imprimiendo Hello {name}, tienes que borrar {name} y eso es todo :)


Ahora solo limpie la caché del proyecto y recompile los assets nuevamente:

php app/console cache:clear

php app/console assets:install web --symlink

veremos el resultado:



Buenos ahora si puedes usar todas las bondades que te da Bootstrap para usar sus componentes queda en sus manos aplicar las diversas formas.

Espero mas adelante usar precompiladores de CSS y JS para trabajar Stylus y CoffeScript respectivamente espero tener tiempo.

espero sus comentarios. Nos leemos



domingo, 4 de noviembre de 2012

Layout en Ruby on rails con Bootstrap de Twitter

Vamos a desarrollar un controlado llamado "default" que contendrá la parte publica de nuestra aplicación. Para crearemos un layout llamado bootstrap usando el framework css Bootstrap de twitter

En  el enlace anterior podrán descargar los archivos y verán la documentación de la librería que nos ayudará en la aceleración dejando en segundo plano temas de css.

Para esto mi editor es Sublime Text 2 y tengo un proyecto generado llamado "support":



Paso 1: Creamos el archivo Layout.

Nos dirigimos a la carpeta app/views/layouts ahí crearemos un archivo que lo llamaré bootstrap.html.erb, con esto tenemos para el proyecto un nuevo layout llamado "bootstrap", en los futuros controladores que generes le agregaras una propiedad layout para asignarle el nombre del layout a cargarse siempre.


Paso 2: generamos un controlador y le asignamos el layout.

Abrimos un terminal y nos dirigimos a la carpeta del proyecto generado y ejecutamos el siguiente comando para generar un nuevo controlador que lo llamaré "default".


rails g controller default index


Al ejecutar esto, se generarán varios archivos y carpetas pero por ahora solo nos interesa los archivos controlador "default" y vista "index".


En la imagen anterior se observa el controlador con su respectiva vista, abrimos el controlador y vemos el método index que habíamos dicho por defecto en el comando anterior, sobre este método esta una linea  donde le decimos que este controlador se cargará el layout que deseemos.

Si queremos que todos los controladores carguen un layout que preparemos para un determinado proyecto hay que siempre agregar esa linea.


Paso 3: Preparamos el bootstrap de twitter con Ruby on Rails

Descargamos los archivos de bootstrap de su sitio web oficial: http://twitter.github.com/bootstrap/

Primero vamos a intentar solo con los archivos CSS los ubicaremos en la carpeta stylesheets de app/assets/stylesheets


El archivo que creamos en el paso 1  agregamos los css de la librería que descargamos, quedará de manera similar:



Paso 4: Usando Bootstrap en las vistas de los controladores

Ahora en la vista del default vamos a codificar puro HTML pero al estilo y reglas como las dice Bootstrap, invito a leer un poco sobre este muy buen framework de CSS.


Para que funcione copio el código HTML aquí, pero aconsejo que lean un poco de este framework:

   <!-- Contenedor de general-->
    <div class="container">
            <header>
                <!-- Title-->
                <div class="row">
                    <div class="span12">
                        <h1><a href="#">Twitter BootsTrap</a></h1>
                        <p>Trabajando con Twitter BootsTrap</p>
                    </div>
                </div>
                <!-- Fin del title-->
                <!-- Banner-->
                <div class="row">
                    <div class="span12">
                        <img src="http://lorempixel.com/1170/300/nature" alt="">
                    </div>
                </div>
                <!-- Fin del Banner-->
                <!-- Inicio del Menu-->
                <div class="navbar">
                    <div class="navbar-inner">
                        <div class="container">
                            <ul class="nav">
                                <li class="active"><a href="#">Home</a></li>
                                <li><a href="#">About</a></li>
                                <li><a href="#">Contact</a></li>
                            </ul>
                        </div>
                    </div>
                </div>
                <!-- Fin del Menu-->
            </header>
            <section class="row">
                <div class="span12">
                    <ul class="thumbnails">
                        <li class="span3">
                            <div class="thumbnail">
                                <img src="http://lorempixel.com/260/180/sports/2" alt="" />
                                <h2>Lorem Ipsum</h2>
                                <p>Lorem ipsum dolorum</p>
                            </div>
                        </li>
                        <li class="span3">
                            <div class="thumbnail">
                                <img src="http://lorempixel.com/260/180/sports/3" alt="" />
                                <h2>Lorem Ipsum</h2>
                                <p>Lorem ipsum dolorum</p>
                            </div>
                        </li>
                        <li class="span3">
                            <div class="thumbnail">
                                <img src="http://lorempixel.com/260/180/sports/4" alt="" />
                                <h2>Lorem Ipsum</h2>
                                <p>Lorem ipsum dolorum</p>
                            </div>
                        </li>
                        <li class="span3">
                            <div class="thumbnail">
                                <img src="http://lorempixel.com/260/180/sports/5" alt="" />
                                <h2>Lorem Ipsum</h2>
                                <p>Lorem ipsum dolorum</p>
                            </div>
                        </li>                       
                    </ul>
                </div>
            </section>
    </div>
    <!-- Fin del Contenedor-->
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>


Ahora solo queda explotar al máximo las ventajas que tendrán con este buena herramienta y poco a poco vamos tomando soltura para desarrollar nuestro proyecto y themes para diversos proyectos.