Arte e informática..


CodeIgniter: un core, varias aplicaciones..


CodeIgniter (CI) al igual que otros frameworks como Yii, permite adaptar un único core a multiples aplicaciones.. Para ello hay que seguir varios pasos y a continuación los listamos:

nota
Para el ejemplo nuestro directorio de servidor es /var/www, estamos bajo ambiente GNU/linux y usamos la versión 2.1.3 de CodeIgniter.
Recuerda siempre respaldar tus proyectos antes de hacer algún cambio.

1.- La descarga:
     - descargas CI.

2.- Descomprimir: 
     - descomprimes el zip descargado en tu carpeta del servidor (www en mi caso).

3.- Renombrar:
     - renombras la nueva carpeta generada (yo le coloque sistemas). Ahora, si entramos desde el navegador a localhost/sistemas, debería mostrarnos la vista por defecto de CodeIgniter.

4.- Crear las aplicaciones:
     - multiplicas la carpeta application tantas veces como sistemas necesites y la renombras según sea el caso; Cada aplicación debe disponer de su carpeta completa de application, es decir, sabemos que en ese directorio se alojan sub-carpetas que albergaran entre otras cosas, los controladores, modelos, vistas, etc. entonces, al separar nuestros sistemas por aplicación, mantenemos el orden recomendado a la hora de trabajar, por ejemplo:
/www
... sistemas
....... aplicacion1
........... models (modelos de la aplicación 1)
........... controllers (controladores de la aplicación 1)
........... views (vistas de la aplicación 1)
........... (otros directorios de la aplicación 1)
....... aplicacion2
........... models (modelos de la aplicación 2)
........... controllers (controladores de la aplicación 2)
........... views (modelos de la aplicación 2)
........... (otros directorios de la aplicación 2)


5.- El index por aplicación:
      - CI trae por defecto un archivo index.php que apunta al core y a la carpeta application, nosotros debemos disponer de un archivo index para cada aplicación, obviamente no puede haber más de un archivo con el mismo nombre en el mismo directorio, así que tenemos varias opciones.


5a.- Mostrar una aplicación por defecto:
       - Hay que tomar en cuenta si habrá un sistema por defecto, es decir, si queremos que al entrar a localhost/sistemas se cargue una aplicación directamente, en ese caso podemos dejar que index.php apunte a aplicacion1 y creamos otro index que apunte a aplicacion2 (aplicacion2.php).

 Para apuntar index.php a aplicacion1, debemos abrir el archivo y buscamos la linea:
$application_folder = 'application';

y cambiamos el valor de la variable application_folder por el nombre de nuestro sistema principal (aplicacion1 para el ejemplo).

Fijate que un poco más arriba aparece la variable system_path:
$system_path = 'system';

su valor deberá ser actualizado en caso de que hayamos estado cambiando de lugar el core de CI para su protección.

Cuando corramos localhost/sistemas debe mostrarnos el sistema por defecto, si colocamos mal el nombre del sistema, nos aparecerá el siguiente mensaje:
Your application folder path does not appear to be set correctly. Please open the following file and correct this: index.php

Tambien podriamos acceder a ese sistema por defecto, colocando localhost/sistemas/index.php.

Luego para la aplicación 2 sólo duplicamos ese archivo index y lo renombramos (aplicacion2 para el ejemplo), una vez tenga su propio index y hayamos editado ese archivo apuntando así a la aplicación 2:
$application_folder = 'aplicacion2';

 y al core correctamente, ya lo podemos llamar desde la URL: localhost/sistemas/aplicacion2.


5b.- Mostrar un menú con la lista de sistemas (por defecto):
       - Si por el contrario, deseamos que por defecto aparezca un menú mostrando la lista de aplicaciones, entonces, hacemos lo siguiente:
- renombramos el index.php con el nombre de nuestro primer sistema (aplicacion1.php para el ejemplo).
- duplicamos ese archivo tantas veces sea necesario y lo renombramos con el nombre de los sistemas restantes (en este caso sólo falta la aplicación 2 así que lo renombramos a aplicacion2.php).
- creamos un nuevo archivo llamado index.html y dentro agregamos la lista de aplicaciones:
<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="utf-8">
        <title>Mis aplicaciones en CodeIgniter</title>
        <style type="text/css">
            ::selection{ background-color: #E13300; color: white; }
            ::moz-selection{ background-color: #E13300; color: white; }
            ::webkit-selection{ background-color: #E13300; color: white; }
            body {
                background-color: #fff;
                margin: 40px;
                font: 13px/20px normal Helvetica, Arial, sans-serif;
                color: #4F5155;
            }
            a {
                color: #003399;
                background-color: transparent;
                font-weight: normal;
            }
            h1 {
                color: #444;
                background-color: transparent;
                border-bottom: 1px solid #D0D0D0;
                font-size: 19px;
                font-weight: normal;
                margin: 0 0 14px 0;
                padding: 14px 15px 10px 15px;
            }
            #body{
                margin: 0 15px 0 15px;
            }
            #container{
                margin: 10px;
                border: 1px solid #D0D0D0;
                -webkit-box-shadow: 0 0 8px #D0D0D0;
            }
        </style>
    </head>
    <body>
        <div id="container">
            <h1>Mis Sistemas</h1>
            <div id="body">
                <ul>
                    <li><a href="aplicacion1.php">Aplicación #1</a></li>
                    <li><a href="aplicacion2.php">Aplicación #2</a></li>
                </ul>
            </div>
        </div>
    </body>
</html>

Al final, deberíamos tener algo así:
/www
... sistemas
...... aplicacion1.php
...... aplicacion2.php
...... index.html
...... aplicacion1
......... models
......... controllers
......... views
......... otros directorios
...... aplicacion2
......... models
......... controllers
......... views
......... otros

y al acceder a localhost/sistemas, mostrarnos el menú.

Si tienes algún problema, no dudes en consultar.



CodeIgniter: protegiendo el core..

El core (contenido de la carpeta system) es el grupo de archivos más importante de CodeIgniter, es lo primero que se ejecuta, es el corazón del framework, toda su importancia radica allí y por seguridad es recomendable apartarlo de la carpeta del servidor, sea (www, htdocs, etc.), ya que esos directorios albergan los recursos que son accedidos desde fuera de nuestro server (internet, intranet, etc.).

De este modo, si nuestro sitio es atacado, el core del framework no será vulnerable, lo que nos dará un punto más en lo que a seguridad se trata.

nota
Para el ejemplo nuestro directorio de servidor es /var/www, estamos bajo ambiente GNU/linux y usamos la versión 2.1.3 de CodeIgniter.
Recuerda siempre respaldar tus proyectos antes de hacer algún cambio.

1.- descargarmos CodeIgniter,  lo descomprimimos en www, luego lo renombramos (yo le coloqué proyecto):

2.- luego, movemos (cortamos para luego pegar) la carpeta system (está dentro de proyecto) a el nuevo directorio (cualquiera fuera del servidor), en mi caso, la situare en /opt; Entonces, tengo mi carpeta de CI (proyecto) en www y el core en opt.
El core en /opt:
/
... opt
...... system

El resto del proyecto: /var/www/proyecto
/
... var
...... www
......... proyecto
............ index.php
............ application

3.- lo siguiente es entrar al index.php de CI, sabemos que todo lo que se carga en el framework debe pasar por el index (incluso, si ocultamos el index.php de la url a través del htaccess), ese archivo es el encargado de cargar el core, así que, debemos indicarle donde debe buscarlo.

una vez abierto el index.php, buscamos la variable $system_path, en mi caso se encuentra en la línea 59.
$system_path = 'system';

cambiamos su valor por la ruta nueva donde colocamos el core, yo lo movi a opt y así queda:
$system_path = '/opt/system';

podriamos incluso, meterlo dentro de otra carpeta o renombrar el directorio system, (ci_core) por ejemplo y quedaría así:
$system_path = '/opt/ci_core';

4.- solo resta guardar los cambios hechos al index.php y probar, no debería haber mayor problema, es importante revisar los permisos del directorio del core una vez que lo movemos.


Si al correr el proyecto, te aparece el mensaje de error: Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php es porque tienes mal seteada la ruta nueva donde se encuentra el core.

Si tienes algún problema, no dudes en comentar.


Formatear FAT32 desde Windows Seven

Normalmente no escribo sobre estos temas, pero.. si necesitas formatear con el formato FAT32 desde el seven, una alternativa es usar el software FAT32 Format, que para los que usamos la PS3, poder seleccionar este formato a la hora de formatear un disco duro externo, es esencial.


Descarga:
http://www.ridgecrop.demon.co.uk/download/fat32format.zip


Colores hexadecimales aleatorios PHP

Sencilla función para generar cadena de colores hexadecimal:

function rnd_color(){
 $arr = array('A','B','C','D','E','F');
 $cadena = '#';
 for($i=0; $i<=5; $i++) $cadena .= $arr[rand(0,5)];
 return $cadena;
}

ejemplo:
<?php
function rnd_color(){
    $arr    = array('A','B','C','D','E','F');
    $cadena = '#';
    for($i=0;$i<=5;$i++) $cadena .= $arr[rand(0,5)];
    return $cadena;
}
?>
<html>
    <head>
        <style>
            #mi_div{
                background-color:<?php echo rnd_color(); ?>;
                margin:0 auto;
                width:400px;
                height:200px;
                border:#000 2px solid;
            }
        </style>
    </head>
    <body>
        <div id="mi_div"></div>
    </body>
</html>


El vendedor de humo


Matando el tiempo con la ProgressBar de JQuery UI







<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>ProgressBarUI demo</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/ui-lightness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script src="http://code.jquery.com/ui/1.9.1/jquery-ui.js"></script>

<style>
.ui-progressbar .ui-progressbar-value{
    background-image: url('http://jqueryui.com/resources/demos/progressbar/images/pbar-ani.gif');
}
.ui-progressbar{
    height: 20px;
    margin-bottom: 2px;
}
#porcentaje{
    margin: 0 auto;
    font-size: 12px;
}
#contenedor{
    margin: 0 auto;
    text-align: center;
    float: left;
    width: 99%;
}
</style>
</head>
<body>
<div id="contenedor">
    <div id="progressbar"></div><div id="porcentaje"></div>
</div>
<script>
$("#progressbar").progressbar({value: 0});
function progressBar(){

    var value = $("#progressbar").progressbar( "option", "value" );
    $('#porcentaje').html((value + 1) + '%');

    $("#progressbar").progressbar("option","value",(value+1));

    if(value == 99){
        clearInterval(continua);
        $('#porcentaje').html('-- completo!!');
        $("#progressbar").progressbar("option",'value',0);
        return;
    }
}
continua = setInterval("progressBar()",50);
</script>
</body>
</html>