Ir al contenido principal

Una aplicación web (CRUD) con Yii

 

 

Instalar Yii en Ubuntu


sudo apt-get install php5-mcrypt


wget -nd https://github.com/yiisoft/yii/releases/download/1.1.15/yii-1.1.15.022a51.tar.gz
tar -xzvf yii-1.1.15.022a51.tar.gz
rm yii-1.1.15.022a51.tar.gz
sudo mv yii-1.1.15.022a51 /var/www/html/yii



Verificar los requisitos accediendo a la página web:
http://localhost/yii/requirements/

Crear la estructura de la aplicación

cd /var/www/html/yii
framework/yiic webapp miapp
chmod o+w miapp/protected/models/
chmod o+w
miapp/protected/views/
chmod o+w
miapp/protected/controllers/ 

Instalar giix

wget -nd http://www.yiiframework.com/extension/giix/files/giix-1.9.2.zip
mkdir giix
cd giix/
unzip ../giix-1.9.2.zip 

rm ../giix-1.9.2.zip
cp -r giix-co* ../miapp/protected/extensions/
 


Modificar la configuración del fichero protected/config/main.php, para indicar el nombre de la aplicación, idioma español, que se importe la extensión de giix, habilitar gii y establecer la configuración de la base de datos (comentamos sqlite y configuramos Mysql):

'name'=>'Nombre de mi App',
'language'=>'es',
'sourceLanguage' => 'en',
'charset' => 'utf-8',

...
'import'=>array(
        'application.models.*',
        'application.components.*',
        'ext.giix-components.*', // giix components
    ),

...
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'una clave para entrar a gii',
            'generatorPaths'=> array('ext.giix-core', ),
            'ipFilters'=>array('127.0.0.1','::1'),
        ),

...
        /*'db'=>array(
            'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
        ),
        // uncomment the following to use a MySQL database
        */
        'db'=>array(
            'connectionString' => 'mysql:host=localhost;dbname=mibasededatos',
            'emulatePrepare' => true,
            'username' => 'miusuario',
            'password' => 'clave',
            'charset' => 'utf8',
        ),


...
Podemos ver el prototipo creado en:
http://localhost/yii/miapp/


Generando código automáticamente con Giix


Tablas de ejemplo:

CREATE TABLE localizacion (
  id integer NOT NULL auto_increment PRIMARY KEY,
  localizacion varchar(100) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE evento (
  id integer NOT NULL auto_increment PRIMARY KEY,
  idlocalizacion integer DEFAULT NULL COMMENT ,
  fecha datetime DEFAULT NULL,
  descripcion varchar(1000) DEFAULT NULL,
  FOREIGN KEY (idlocalizacion) REFERENCES localizacion (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Accedemos a Gii en:
http://localhost/yii/miapp/index.php?r=gii

Para crear toda la gestión (CRUD) de una tabla ya creada previamente en mysql podemos realizar lo siguiente en Gii:

1.- Generamos el modelo (Giix Model Generator) correspondiente a nuestra tabla, para ello indicamos el nombre de la tabla (localizacion) y el de la clase modelo que ya se nos ofrece automáticamente (Localizacion), pulsamos 'preview' y por último 'generate'. Igual para la tabla evento.

2.- Creamos la gestión del modelo (Giix CRUD Generator), para ello tendremos que indicar el modelo previamente creado: Localizacion y el controlador: localizacion. Como en la ocasión anterior pulsamos 'preview' y por último 'generate'. Igual para el modelo evento.


Veamos la gestión de la tabla funcionando:
http://localhost/yii/miapp/index.php?r=localizacion


Personalizando la aplicación

Menú y pie de página

Editamos el fichero protected/views/layouts/main.php y ahí podemos personalizar nuestro menú y pie de página según nuestras necesidades. Como crear una nueva opción de menú en función de si el usuario está o no identificado, que nos dará acceso de forma privada a la gestión de localizaciones y eventos:


    <div id="mainmenu">
        <?php
            if (Yii::app()->user->isGuest) {
                $this->widget('zii.widgets.CMenu',array(
                'items'=>array(
                    array('label'=>'Inicio', 'url'=>array('/site/index')),
                    array('label'=>'Sobre', 'url'=>array('/site/page', 'view'=>'about')),

                array('label'=>'Contactar', 'url'=>array('/site/contact')),                    array('label'=>'Conectar', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
                    array('label'=>'Desconectar ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
                ),
                ));
            }
        else {
                $this->widget('zii.widgets.CMenu',array(
                'items'=>array(
                    array('label'=>'Inicio', 'url'=>array('/site/index')),
                    array('label'=>'Sobre', 'url'=>array('/site/page', 'view'=>'about')),

                array('label'=>'Contactar', 'url'=>array('/site/contact')),                    array('label'=>'Gestión', 'url'=>array('/site/page','view'=>'gestion')),
                    array('label'=>'Conectar', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
                    array('label'=>'Desconectar ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
                ),
                ));           
        }

         ?>
    </div><!-- mainmenu -->

...
    <div id="footer">
        Copyright &copy; <?php echo date('Y'); ?> by Nacho.<br/>
        All Rights Reserved.<br/>

        <?php echo Yii::powered(); ?>
    </div><!-- footer -->


Personalizar la página de inicio, sobre, gestión, etc...

Estas páginas se encuentran en protected/views/site y editando por ejemplo el fichero index.php podremos personalizar los textos iniciales que aparecen al acceder a nuestra página web.

Crear una nueva página de gestión de los eventos y localizaciones, creamos un fichero llamado gestion.php dentro de protected/views/site/pages

<?php

$this->pageTitle=Yii::app()->name . ' - Gestión';
$this->breadcrumbs=array(
    'Gestión',
);
?>

<h1>Gestión</h1>

<?php echo CHtml::link('Localización', array('/localizacion/')); ?></br>
<?php echo CHtml::link('Evento', array('/evento/')); ?>


Usuarios y claves

Editamos el fichero protected/components/UserIdentity.php y ahí establecemos nuestros usuarios y claves:

public function authenticate()
    {
        $users=array(
            // username => password
            'nacho'=>'miclave',           
        );

...


Fuentes de información:
http://www.yiiframework.com/

sudo mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/ - udo mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/

Comentarios

Entradas populares de este blog

Conectar Dolibarr con otra aplicación mediante un servicio SOAP

Para conectar con Dolibarr otras aplicaciones, como un carrito de la compra, puede ser muy interesante utilizar los " Web Services " que nos ofrece Dolibarr. Para activarlos tenemos que ir a Configuración-> Módulos-> Módulos Interfaz y poner a ON los WebServices. También hay que configurar la clave para usar los Web Services (parámetro "dolibarrkey" en webservices). Indicamos una palabra clave que se nos ocurra como por ejemplo: $5x8Cd45Cadec_f?K y pulsamos salvar. A continuación muestro un ejemplo con Python y la librería suds para obtener una factura: from suds.client import Client client = Client('http://www.midominio.es/dolibarr/webservices/server_invoice.php?wsdl') auth = client.factory.create('authentication') auth.dolibarrkey='$5x8Cd45Cadec_f?K' auth.sourceapplication='' auth.login='usuario' auth.password='clave' auth.entity='' result = client.service.getInvoice(auth,'1') print resu...

Instalación Django en NAS Synology con FastCGI

Los NAS Synology no traen el módulo de apache mod-wsgi por lo que he utilizado el módulo mod-fastcgi en su lugar para hacer funcionar Django en los NAS Synology. Necesitamos del módulo mysql-python , para su instalación podemos seguir la entrada que ya se publicó en este mismo blog:  http://ilizaran.blogspot.com.es/2014/09/instalacion-del-modulo-mysql-python-en.html De la instalación de mysql-python ya tendremos instalado pip en el NAS por lo que podremos instalar Django con algunos módulos necesarios: pip install Django pip install setuptools pip install flup Para saber que la instalación de Django ha sido correcta y verificar la versión podemos realizar: python import django  django.VERSION Ahora modifcamos la configuración de apache editando el fichero /etc/httpd/conf/httpd.conf-user  para hacer accesible los ficheros css, imágenes y javascript de la parte administrativa de Django, por lo que añadimos: Alias /static/admin /usr/local/packages/@appstor...

Calendario compartido en thunderbird sincronizado con el calendario de Google.

Se pretende crear un calendario común y compartido para que todos los que queramos vean nuestro calendario. Para ello tenemos que tener el thunderbird que es un cliente de correo. Si ya teníamos thunderbird, solamente tenemos que instalar 2 complementos: lightning y provider for google calendar . Para instalarlos simplemente entramos en thunderbird y en el menú superior entramos en Herramientas > Complementos . En la parte superior hay una barra para buscar los complementos y simplemente escribimos los 2 complementos dichos anteriormente y reiniciamos thunderbird. Ahora creamos una cuenta en google y si la tenemos no hace falta crearla. Accedemos a la cuenta de google y entramos en Calendar Una vez hemos entrado, a la izquierar nos saldrán los calendarios que tenemos. Creamos un nuevo calendario desplegando la pestaña que está al lado de Mis calendarios.   Creamos un calendario al que le vamos a llamar prueba. Ya estaría creado nuestro calendario. Entramos ...