Mostrar Mensajes

Esta sección te permite ver todos los mensajes hechos por este usuario, recuerda que solo puedes ver los mensajes en áreas en donde tu tienes acceso.


Temas - 3l3cTr0n1k_0

Páginas: [1] 2
1
Ola amigos :P como me puse a codear mucho en codeigniter he creado unas pequeña Library para manejar los Javascript y ademas lo Css en codeigniter


La primera library es

Css.php

esta debe estar creada dentro de la ruta application->library

Código: php [Seleccionar]

<?php
/*
 * Autor: Octavio Fuenzalida Mora.
 * mail : octavio1121@gmail.com
*/
Class CSS {
   
    private $styleIn = "\t<link rel='stylesheet' type='text/css' media='all' href='";
    private $styleOut = "'/>\n";
    private $style = array();
    private $msj = array("0" => "Error al devolver estilo\n",
                         "1" => "Error Al enviar la posicion y el estilo para modificar");

    public function add($filename) {
        $this->style[] = $this->styleIn.$filename.$this->styleOut;
    }
    public function get() {

        if(is_array($this->style)) {
            return $this->style;
        }else {
            return $this->msj[0];
        }
    }

    public function set($posicion=null,$filename=null) {
        if($posicion!=null && $filename!=null) {
            $this->style[$posicion] =  $this->styleIn.$filename.$this->styleOut;
        }
        else {
            return $this->msj[1];
        }
    }
}
?>



La segunda library se crea en el mismo directorio Application->library

se llama

Jss.php

Código: php [Seleccionar]

<?php
 /*
 * Autor: Octavio Fuenzalida Mora.
 * mail : octavio1121@gmail.com
 */
Class JS {
    private $jsIn = "\t<script type='text/javascript' src='";
    private $jsOut = "'></script>\n";
    private $javascript = array();
      private $msj = array("0" => "Error al devolver Javascript\n",
                         "1" => "Error Al enviar la posicion y el Javascript para modificar");

    public function add($filename) {
        $this->javascript[] = $this->jsIn.$filename.$this->jsOut;
    }
    public function get() {

        if(is_array($this->javascript)) {
            return $this->javascript;
        }else {
            return $this->msj[0];
        }
    }

    public function set($posicion=null,$filename=null) {
        if($posicion!=null && $filename!=null) {
            $this->javascript[$posicion] =  $this->jsIn.$filename.$this->jsOut;
        }
        else {
           return $this->msj[1];
        }
    }
}

?>



El modo de uso de esta librery dentro de codeigniter es el siguiente...

En nuetro controlador debemos agregar lo siguiente
Código: php [Seleccionar]

Class Registro extends Controller {
    function  __construct() {
        parent::Controller();

        //helper para el uso de URL.
        $this->load->helper('url');

        //Carga libreria CSS.
        $this->load->library("css");

        //Carga libreria JAVASCRIPT.
        $this->load->library("js");
    }
    function __cargaHeadLibrary() {//Esta es una funcion private de codeigniter asi via url no podremos llamarla solo a travez de codigo...


        //cargamos todas las plantillas...
        $this->css->add(base_url()."css/disenio.css"); //css es el directorio donde tengo mis css y disenio.css es el archivo css..

        //cargamos todos los javascript
        $this->js->add(base_url()."js/jquery-1.4.2.min.js"); //js es el directorio donde tengo mis js y jquery-1.4.2.min.js es el archivo javascript
        $this->js->add(base_url()."js/jquery-ui-1.8rc3.custom.min.js");
        $this->js->add(base_url()."js/jquery.datatables.js");

 //$data es nuestro array donde css contendra en un sub-array todo lo css y js contendra todo los javascript
        $data["css"] = $this->css->get();   //pedimos todo lo cargado para css
        $data["js"] = $this->js->get(); //pedimos todo lo cargado para js

        return $data;
    }


function __head() {

        $head = $this->__cargaHeadLibrary();
        $cabecera = "\t\n";

        foreach ($head  as $metadata => $key) {
            // if(is_array($metadata)) {
            switch($metadata) {
                case "css": {//tipo css
                        foreach($key as $css)
                            $cabecera .= $css;
                        break;
                    }
                case "js": {//tipo javascript
                        foreach($key as $js)
                            $cabecera .= $js;
                        break;
                    }
            }
        }
        return $cabecera;
    }


    function registroUsuario() {

        $data["head"] = $this->__head(); //retornamos todo lo css y js en un array y los pasamos al array head
       
        $this->load->view("Registro Usuario",$data);
    }
}
?>




nuestra vista tiene que tener el siguiente codigo

Código: php [Seleccionar]


<html>
    <head>
        <title>asdf</title>
 <?=$head?>
    </head>
    <body>
</body>
</html>


la gracias de esto es que automaticamente no creara todo esto

Código: php [Seleccionar]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
       
<link rel='stylesheet' type='text/css' media='all' href='http://localhost/automovileschile.cl/portal/css/disenio.css'/>
<script type='text/javascript' src='http://localhost/automovileschile.cl/portal/js/jquery-1.4.2.min.js'></script>
<script type='text/javascript' src='http://localhost/automovileschile.cl/portal/js/jquery-ui-1.8rc3.custom.min.js'></script>
<script type='text/javascript' src='http://localhost/automovileschile.cl/portal/js/jquery.datatables.js'></script>

    </head>
    <body>
</body>
</html>


como eso es muy repitivo en cada vista es mejor usa este metodo, obviamente se puede mejorar lo cree al vuelo nomas :D


saludos :P

2
Framework - Symfony / Comenzando un proyecto en symfony
« : febrero 24, 2010, 12:04:04 pm »
Introducción

El framework Symfony ha sido un proyecto de Código Abierto por más de tres años y se ha convertido en uno de los framework PHP más populares gracias a sus excelentes características y gran documentación. Esto ha sido una gran tradición desde sus inicios.

En Diciembre de 2005, justo después del primer lanzamiento oficial de Symfony, publicamos el "tutorial Askeet" como una serie de tutoriales, publicados día tras día entre el primero de diciembre y Navidad.

Dicho tutorial ha demostrado ser una herramienta invaluable para promover el framework entre los recién llegados. Muchos programadores aprendieron Symfony gracias a askeet y muchas compañías lo utilizan como su material principal de capacitación.

Pero el tutorial askeet comienza a mostrar su edad y con el lanzamiento de Symfony 1.2, hemos decidido a publicar otro calendario para un nuevo tutorial, Jobeet.

Este tutorial se ha publicado día a día en el blog de Symfony en 2008, y estás leyendo la adaptación del libro.

El Desafío

Cada capítulo/día está destinado a durar aproximadamente una hora, y será la ocasión de aprender Symfony mediante la codificación de un sitio web real, de principio a fin.

Una hora multiplicada por venticuatro hace un día, y eso es exactamente lo que creemos que un programador necesita para aprender los fundamentos de Symfony. Cada día, serán agregadas nuevas características a la aplicación, y nos valdremos de las ventajas de este desarrollo para introducirte a las nuevas funcionalidades de Symfony así como a las mejores prácticas de desarrollo web con Symfony.

Para askeet, el día 21 fue el denominado "consigue un guru symfony por un día". No teníamos ningún plan y la comunidad tenía que proponer una característica a agregar a askeet. Fue un gran suceso y la comunidad decidió que necesitábamos un motor de búsqueda para la aplicación. Y así lo hicimos. El día 21 del tutorial también demostró ser uno de los más populares dentro de los tutoriales de askeet.

Para Jobeet, vamos a celebrar la llegada del invierno/verano con un día 21 denominado "día de diseño". El diseño ganador será presentado al centro{fuente}, y se utilizará en este tutorial para el diseño por defecto. También será utilizado para el diseño del sitio web Jobeet.


Este Tutorial es diferente


Recuerdo los primeros días de PHP4 ¡Ah, la Belle Epoque! PHP era uno de los primeros lenguages dedicados a la web y uno de los más fáciles de aprender.

Pero con la rápida evolución de las tecnologías web, los desarrolladores web deben mantenerse al tanto de las últimas herramientas y mejores prácticas de desarrollo. Por supuesto que la mejor manera de aprender es leyendo blogs, tutoriales y libros. Hemos leído un montón de estos, sea que estén escritos para PHP, Python, Java, Ruby o Perl, y muchos se quedan cortos cuando el autor comienza a mostrar fragmentos de código como ejemplos.

Probablemente estés acostumbrado a leer adevertencias de este tipo:

"Para una aplicación real, no te olvides de agregar validación y un manejo de errores adecuado."

o

"La Seguridad es dejada como un ejercicioo para el lector."

o

"Por supuesto que vas a necesitar escribir tests"

¿Cómo? Estos temas son asuntos importantes. Son quizás la parte más importante de cualquier trozo de código. Como lector, te dejan solo. Si no nos preocupamos por proveer dicha información, los ejemplos resultan mucho menos útiles, no pudiendo utilizarlos como un buen punto de inicio. Eso no puede ser así, ya que la seguridad, la validación, el manejo de errores y las tests, por nombrar algunos, es lo que nos lleva a programar de forma correcta.

En este tutorial nunca vas a ver oraciones de ese tipo, vamos a escribir tests, manejo de errores, código para validación, y nos aseguraremos de desarrollar una aplicación segura. Todo ello porque Symfony es sinónimo de programación, de buenas prácticas y de como desarrollar aplicaciones profesionales para la empresa. Podemos darnos dicho lujo porque Symfony provee todas las herramientas necesarias para programar esos aspectos de forma fácil y sin la necesidad de escribir mucho código.

Debido a que la validación, el manejo de errores, la seguridad y los tests son ciudadanos de primera clase en Symfony, no nos va a llevar mucho tiempo explicarlos. Esta es una de las tantas razones por las cuales hay que utilizar un framework para proyectos de la vida real.

Todo el código que leerás en este tutorial es código que puedes usar en un proyecto de la vida real. Te invitamos a que copies y pegues el código en tus proyectos o que simplemente robes trozos completos del mismo.

El Proyecto

La aplicación a diseñar podría haber sido otro motor de blogs, pero nosotros queremos usar Symfony en algo útil. El objetivo es demostrar que Symfony puede ser usado para desarrollar aplicaciones con estilo y poco esfuerzo.

Al contenido del proyecto lo vamos a mantener en secreto por un días más ya que tenemos mucho para hacer por hoy. De todas formas, ya sabes el nombre de la aplicación: Jobeet.


¿Qué hacemos hoy?

Como 24 horas es más que suficiente para desarrollar una aplicación con Symfony, hoy no vamos a escribir código PHP. Pero incluso sin escribir una sola linea de código vas a entender los beneficios de utilizar un framework como Symfony simplemente al configurar un nuevo proyecto.

El objetivo del día es configurar un entorno de desarrollo y mostrar una página web de la aplicación en el navegador web. Esto incluye la instalación de Symfony, la creación de una aplicación y la configuración del servidor web.

Pre requisitos.

Primero que nada, asegúrate de que cuentas con un entorno de desarrollo web funcioando: un servidor web (Apache por ejemplo), un motor de bases de datos (MySQL, PostgreSQL, o SQLite), y PHP 5.2.4 o superior.

Como utilizaremos la línea de comandos constantemente, es preferible utilizar un sistema operativo tipo Unix, si utilizas Windows, va a funcionar de todas formas, simplemente vas a tener que ingresar comandos en la consola cmd.



Los comandos de Unix pueden serte útiles dentro de un entorno Windows. Si quisieras utilizar herramientas como tar, gzip, or grep en Windows puedes instalar
Cygwin. La documentación oficial puede ser un poco escasa pero una guía interesante puede encontrarse aquí. Los aventureros también pueden probar con los Servicios Windows para Unix. de Microsoft.


Como este tutorial se concentra en el framework Symfony, asumimos que ya cuentas con un conocimiento sólido de PHP 5 y de Programación Orientada a Objetos.

Instalación de Symfony

Primero crea un directorio donde albergar los archivos relacionados al proyecto Jobeet:
Código: c [Seleccionar]

$ mkdir -p /home/sfprojects/jobeet
$ cd /home/sfprojects/jobeet


En Windows:

Código: c [Seleccionar]

c:\> mkdir c:\development\sfprojects\jobeet
c:\> cd c:\development\sfprojects\jobeet



Se recomienda que los usuarios Windows configuren sus proyectos en una ruta sin espacios. Intenta no utilizar el directorio Documents and Settings, incluyendo cualquier ruta bajo Mis Documentos.


Crea un directorio para alojar los archivos del framework Symfony:
Código: c [Seleccionar]

$ mkdir -p lib/vendor


La página de instalación en el sitio web de Symfony listas y compara todas las versiones disponibles de Symfony.

Ya que este tutorial fue escrito para Symfony 1.2, ve a la página de instalación de Symfony 1.2.

Bajo la sección "Source Download", vas a encontrar el archivo en formato .tgz o en formato .zip. Descarga el archivo y colocarlo bajo el directorio lib/vendor que acabas de crear y descomprimelo:

Código: c [Seleccionar]

$ cd lib/vendor
$ tar zxpf symfony-1.2.2.tgz
$ mv symfony-1.2.2 symfony
$ rm symfony-1.2.2.tgz


En Windows puedes descomprimirlo en el explorador de archivos. Una vez que hayas renombrado el directorio a symfony, la ruta debería ser la siguiente: c:\development\sfprojects\jobeet\lib\vendor\symfony.

Como las configuraciones PHP varían mucho de una distribución a otra, tenemos que comprobar que tu configuración PHP cumple los requisitos mínimos de Symfony. Inicia el script de comprobación de la configuración que viene con Symfony desde la línea de comandos:

Código: c [Seleccionar]

$ cd ../..
$ php lib/vendor/symfony/data/bin/check_configuration.php


Si hay un problema, la salida te dará consejos sobre cómo solucionarlo. También debes ejecutar el script desde un navegador ya que la configuración PHP puede ser diferente. Copia el archivo en algún lugar bajo el directorio raíz del servidor web y accede al archivo. No te olvides de quitar el archivo del directorio raíz web después:
Código: c [Seleccionar]

$ rm web/check_configuration.php




Si el script no muestra ningún error, comprueba que Symfony se ha instalado correctamente usando la línea de comandos para mostrar la versión (nota la letra V mayúscula):

Código: c [Seleccionar]

$ php lib/vendor/symfony/data/bin/symfony -V


En Windows:

Código: c [Seleccionar]

c:\> cd ..\..
c:\> php lib\vendor\symfony\data\bin\symfony -V


Si eres curioso sobre lo que esta herramienta de línea de comandos puede hacer por tí, escribe symfony para ver una lista de las opciones y las tareas disponibles:

Código: c [Seleccionar]

$ php lib/vendor/symfony/data/bin/symfony


En Windows:

Código: c [Seleccionar]

c:\> php lib\vendor\symfony\data\bin\symfony


La línea de comandos de Symfony es el mejor amigo del programador. Te brinda un montón de utilidades para aumentar tu productividad en las actividades del día a día como limpiar el cache, generar código y mucho más.

Configuración del Proyecto

En Symfony, las aplicaciones que comparten el mismo modelo de datos se agrupan en proyectos. Para el proyecto Jobeet, vamos a tener dos aplicaciones diferentes: un frontend y un backend.

Creación del Proyecto

Desde el directorio jobeet, ejecuta la tarea symfony generate:project para realmente crear el proyecto symfony:

Código: c [Seleccionar]

$ php lib/vendor/symfony/data/bin/symfony generate:project jobeet


En Windows
Código: c [Seleccionar]

c:\> php lib\vendor\symfony\data\bin\symfony generate:project jobeet


La tarea generate:project genera por defecto la estructura de directorios y archivos necesarios para un proyecto symfony:
Directorio    Descripción
apps/    Hospeda todas las aplicaciones del proyecto
cache/     Los archivos en caché
config/    Los archivos de configuración del proyecto
lib/    Las bibliotecas y clases del proyecto
log/    Los archivos de registro
plugins/    Los plugins instalados
test/     Los archivos de pruebas unitarias y funcionales
web/    El directorio raíz web (véase más adelante)


¿Por qué Symfony genera tantos archivos? Uno de los principales beneficios de la utilización de un completo framework es normalizar tus desarrollos. Gracias a estructura predeterminada de archivos y directorios de Symfony, cualquier desarrollador con algunos conocimientos de Symfony puede asumir el mantenimiento de cualquier proyecto symfony. En cuestión de minutos, será capaz de bucear en el código, corregir los errores, y añadir nuevas funciones.


La tarea generate:project también ha creado un atajo symfony en el directorio raíz del proyecto Jobeet para reducir el número de caracteres que tienes que escribir cuando se ejecuta una tarea.

Así, a partir de ahora, en lugar de utilizar la ruta completa al programa de Symfony, vamos a utilizar el atajo symfony.

Creación de una Aplicación

Ahora, crear la aplicación frontend ejecutando la tarea generate:app:

Código: c [Seleccionar]

$ php symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend


 Como el archivo symfony es ejecutable, los usuarios de Unix puede reemplazar todas las apariciones de 'php symfony' por './symfony' de ahora en adelante.

En Windows puedes copiar el archivo 'symfony.bat' a tu proyecto y usar 'symfony' en lugar de 'php symfony':

Código: c [Seleccionar]

c:\> copy lib\vendor\symfony\data\bin\symfony.bat .


Una vez más, la tarea generate:app crea por defecto la estructura necesaria de directorios para una aplicación bajo el directorio apps/frontend:
Directorio    Descripción
config/    Los archivos de configuración de la aplicación
lib/    Las bibliotecas y clases de la aplicación
modules/    El código de la aplicación (MVC)
templates/    La plantilla global

Todos los comandos symfony debe ser ejecutados en el directorio raíz del proyecto a menos que se diga expresamente otra cosa.


Al llamar a la tarea generate:app, también hemos pasado dos opciones relacionadas con la seguridad:

    * --escaping-strategy: Permite escapar la salida para evitar ataques XSS
    * --csrf-secret: Permite tokens de sesión en los formularios para prevenir los ataques CSRF


Pasando estas dos opciones a la tarea, hemos asegurado nuestro futuro desarrollo de las dos vulnerabilidades más extendidas se encuentran en la web. Así es, Symfony automáticamente toma las medidas de seguridad por nosotros.


Si no sabes nada acerca de XSS o CSRF, date un tiempo para aprender más de estas vulnerabilidades de seguridad.


La Ruta de Symfony

Puede obtener la versión utilizada de Symfony por su proyecto escribiendo:
Código: c [Seleccionar]

$ php symfony -V


La opción -V también muestra la ruta de acceso al directorio de instalación de Symfony, se almacena en config/ProjectConfiguration.class.php:

Código: php [Seleccionar]

// config/ProjectConfiguration.class.php
require_once '/Users/fabien/work/symfony/dev/1.2/lib/autoload/sfCoreAutoload.class.php';


Para mejorar la portabilidad, cambia la ruta absoluta a la instalación de Symfony por una relativa:
Código: php [Seleccionar]

// config/ProjectConfiguration.class.php
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';


De esta manera, puedes mover el directorio del proyecto Jobeet a cualquier lugar de tu máquina u a otra, y éste funcionará.
Los Entornos

Si revisas el directorio web/, encontrarás dos archivos PHP: index.php y frontend_dev.php. Estos archivos son llamados controladores frontales: todas las peticiones a la aplicación se hacen a través de ellos. Pero, ¿por qué tenemos dos controladores frontales si hemos definido sólo una aplicación?

Ambos archivos apuntan a la misma aplicación pero para distintos entornos. Cuando desarrollas una aplicación, excepto si desarrollas directamente en el servidor de producción, necesitas varios entornos:

    * El entorno de desarrollo: Este es el ambiente utilizado por desarrolladores web para añadir nuevas funciones, corregir los errores, ...
    * El entorno de prueba: Este entorno se utiliza para probar automáticamente la aplicación.
    * El entorno staging: Este entorno es utilizado por el cliente para poner a prueba la aplicación e informar errores o características faltantes.
    * El entorno de producción: Este es el entorno donde un usuario final interactúa.

¿Qué hace que un entorno sea único? En el entorno de desarrollo, la aplicación necesita registrar todos los detalles de una petición para facilitar la depuración, debe mostrar la excepción en el navegador, pero la cache debe ser deshabilitada para que todos los cambios realizados al código se tengan en cuenta de inmediato. El entorno de desarrollo debe ser optimizado para el desarrollador:



En el entorno de la producción, la aplicación deberá mostrar mensajes de error personalizados en lugar de excepciones, y por supuesto, la capa del cache debe estar activada. El entorno de producción debe ser optimizado para el rendimiento y la experiencia del usuario final.



Resumiendo: un entorno symfony es un conjunto único de ajustes de configuración. El framework Symfony incluye tres de ellos: dev, test, y prod.

Si abres los archivos de los controladores frontales, verás que la única diferencia es el ajuste del entorno:

Código: php [Seleccionar]

// web/index.php
<?php
 
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
 
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
sfContext::createInstance($configuration)->dispatch();



Definir un nuevo entorno symfony es tan simple como crear un nuevo controlador frontal. Veremos más adelante cómo cambiar la configuración de un entorno.



Configuración del Servidor Web: La Forma Fea


En la sección anterior, un directorio se ha creado para alojar el proyecto Jobeet. Si lo creaste bajo el directorio "raíz web" de tu servidor web, ya puedes acceder al proyecto en un navegador web.

Por supuesto, como no hay ninguna configuración, es muy rápido para establecer, pero intenta tener acceso al archivo config/databases.yml en tu navegador y comprederás las malas consecuencias de esta actitud perezosa. Si el usuario conoce que tu sitio web esta desarrollado con Symfony, él tendrá acceso a un montón de archivos delicados.

Nunca uses esta configuración en un servidor de producción, lee la siguiente sección para aprender cómo configurar su servidor web correctamente.
Configuración del Servidor Web: La forma segura

Una buena práctica web es poner bajo el directorio raíz web sólo los archivos a los que necesita tener acceso el navegador web: las hojas de estilo, JavaScripts, o imágenes. Te recomendamos almacenar estos archivos en el subdirectorio web de un proyecto symfony.

Si echas un vistazo a este directorio, encontrarás algunos sub-directorios para los recursos web y los dos archivos de los controladores frontales. Los controladores frontales son los únicos archivos PHP que necesitan estar bajo el directorio raíz web. Todos los demás archivos PHP se pueden ocultar del navegador, la cual es una buena idea en lo que respecta a seguridad.

La configuración del Servidor Web


Ahora es el momento de cambiar tu configuración de Apache para que el nuevo proyecto sea accesible para el mundo.

Busca y abre el archivo de configuración httpd.conf y añade la siguiente configuración al final:

Código: c [Seleccionar]

# Asegúrate de tener sólo una vez esta línea en su configuración
NameVirtualHost 127.0.0.1:8080

# Esta es la configuración de Jobeet
Listen 127.0.0.1:8080

<VirtualHost 127.0.0.1:8080>
  DocumentRoot "/home/sfprojects/jobeet/web"
  DirectoryIndex index.php
  <Directory "/home/sfprojects/jobeet/web">
    AllowOverride All
    Allow from All
  </Directory>

  Alias /sf /home/sfprojects/jobeet/lib/vendor/symfony/data/web/sf
  <Directory "/home/sfprojects/jobeet/lib/vendor/symfony/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>




     El alias /sf le da acceso a las imágenes y los archivos JavaScript necesarios para adecuadamente mostrar las páginas symfony por defecto y la barra de herramientas de depuración web.

    En Windows, es necesario sustituir la linea Alias con algo como:
Código: c [Seleccionar]

    Alias /sf "c:\development\sfprojects\jobeet\lib\vendor\symfony\data\web\sf"

    Y /home/sfprojects/jobeet/web debería ser sustituida por:
Código: c [Seleccionar]

    c:\development\sfprojects\jobeet\web



En esta configuración, Apache escucha en el puerto 8080 de tu máquina, por lo que el sitio web de Jobeet será accesible en la siguiente URL:

http://localhost:8080/

Puedes cambiar 8080 por cualquier número mayor que 1024, ya que no se requieren derechos de administrador en esos puertos.

    Configurar un nombre dedicado de dominio para Jobeet

    Si eres el administrador de tu equipo, es mejor configurar un virtual host en lugar de añadir un nuevo puerto cada vez que se inicia un nuevo proyecto. En lugar de añadir un puerto y agregar una declaración Listen, elige un nombre de dominio y añade la declaración ServerName:

Código: c [Seleccionar]

    # This is the configuration for Jobeet
    <VirtualHost 127.0.0.1:80>
      ServerName jobeet.localhost
      <!-- same configuration as before -->
    </VirtualHost>

    El nombre de dominio jobeet.localhost tiene que ser declarado localmente. Si se ejecuta un sistema Linux, que tiene que hacerse en el archivo /etc/hosts. Si ejecuta Windows XP, este archivo se encuentra en el directorio C:\WINDOWS\system32\drivers\etc\.

    Añade la siguiente línea:
Código: c [Seleccionar]

    127.0.0.1         jobeet.localhost

    Tip Nota del Traductor Cuando se complican con estos pasos, los usuarios de Distribuciones Linux, como Ubuntu, pueden usar una herramienta gráfica que simplique aún más esta configuración. Rapache, es un software para sistemas Gnome que hace la configuración básica y necesaria, en los archivos /etc/hosts y httpd.conf, en un solo paso además de permitir el reinicio de Apache con un clic.

Probar la nueva configuración


Reinicia Apache, y comprueba que ahora tienes acceso a la nueva aplicación abriendo un navegador y escribiendo http://localhost:8080/index.php/, o http://jobeet.localhost/index.php/ dependiendo de la configuración de Apache que has elegido en la sección anterior.




Si tienes el módulo Apache mod_rewrite instalado, puedes remover la parte /index.php/ de todas las URL. Esto es posible gracias a las reglas de reescritura configuradas en el archivo web/.htaccess.


Deberías tratar de acceder a la aplicación en el entorno de desarrollo. Escribe la siguiente URL:

http://jobeet.localhost/frontend_dev.php/

La web debug toolbar o barra de herramientas de depuración web debería mostrarse en la esquina superior derecha, incluidos los iconos, demostrando que tu configuración alias sf/ es correcta.




La configuración es un poco diferente si quieres ejecutar Symfony sobre un server IIS server en un sistema Windows. Busca la manera de configurarlo en el tutorial.


Subversion

Es una buena práctica utilizar control de versiones de código fuente en el desarrollo de una aplicación web. Usar el control de versiones de código fuente nos permitirá:

    * trabajar con confianza
    * volver a una versión anterior si un cambio rompe algo
    * permitir a más de una persona para trabajar eficientemente en el proyecto
    * tener acceso a todas las versiones sucesivas de la aplicación

En esta sección, vamos a describir cómo utilizar Subversion con Symfony. Si utilizas otra herramienta de control de código fuente, debe ser muy fácil de adaptar según lo descripto para Subversion.

Suponemos que ya tienes acceso a un servidor Subversion.


    Si no tienes un servidor Subversion a tu disposición, puedes crear uno gratis en Google Code o solo escribir "free subversion repository" en Google para tener muchas más opciones.


En primer lugar, crea un nuevo repositorio para el proyecto jobeet:
Código: c [Seleccionar]

$ svnadmin create /path/to/jobeet/repository

En tu máquina, crea la estructura básica de directorios:

Código: c [Seleccionar]

$ svn mkdir -m "created default directory structure" http://svn.example.com/jobeet/trunk http://svn.example.com/jobeet/tags http://svn.example.com/jobeet/branches


Y comprueba el directorio vacío trunk/ :
Código: c [Seleccionar]

$ cd /home/sfprojects/jobeet
$ svn co http://svn.example.com/jobeet/trunk/ .


Entonces, elimina el contenido de los directorios cache/ y log/ porque no queremos ponerlos en el repositorio.
Código: c [Seleccionar]

$ rm -rf cache/* log/*

Ahora, asegúrate de poner los permisos de escritura sobre los directorios cache y logs a los niveles apropiados a fin de que tu servidor web pueda escribir en ellos:
Código: c [Seleccionar]

$ chmod 777 cache/ log/

Ahora, importa todos los archivos y directorios:
Código: c [Seleccionar]

$ svn add *

Como nunca queremos enviar los archivos situados en los directorios cache/ y /log, es necesario especificar una lista de ignorados:
Código: c [Seleccionar]

$ svn propedit svn:ignore cache

El editor de texto por defecto configurado para SVN debería ejecutarse. Subversion debe hacer caso omiso de todo el contenido de este directorio:
Código: c [Seleccionar]

*


Guardar y cerrar. Has terminado.

Repite el procedimiento para el directorio log/:
Código: c [Seleccionar]

$ svn propedit svn:ignore log

Y escribe:
Código: c [Seleccionar]

*

Finalmente, enviamos (commit) estos cambios al repositorio:
Código: c [Seleccionar]

$ svn import -m "made the initial import" . http://svn.example.com/jobeet/trunk



Los usuarios de Windows pueden utilizar el excelente cliente TortoiseSVN para gestionar sus repositorio de Subversion. Los usuarios de Linux tienen muchas opciones y una de ellas es utilizar el excelente cliente Rapidsvn para gestionar sus repositorio de Subversion.


Nos vemos Mañana

Bien, ¡el tiempo terminó por hoy! Incluso si aún no hemos comenzado a hablar de Symfony, hemos configurado un entorno de desarrollo sólido, hemos hablado de las mejores prácticas sobre desarrollo web, y estamos listos para iniciar la programación.

Mañana, vamos a revelar lo que hará la aplicación y conversar sobre los requisitos que necesitamos poner en práctica durante el tutorial.


    Si deseas comprobar el código del día de hoy, o de cualquier otro día, el código esta disponible día a día en el repositorio SVN oficial de Jobeet (http://svn.jobeet.org/doctrine/).

    Por ejemplo, puedes obtener el código de hoy de la etiqueta release_day_01:
Código: c [Seleccionar]

      $ svn co http://svn.jobeet.org/doctrine/tags/release_day_01/ jobeet/



Fuente:http://www.symfony-project.org/jobeet/1_2/Doctrine/es/01

3
GRUB (GRand Unifier Bootloader) es un gestor de arranque: es lo primero que se carga cuando se inicia la computadora. Permite tener diferentes sistemas operativos, y diferentes versiones de ellos, en el mismo disco duro. Por ejemplo podemos tener Windows y GNU/Linux en la misma computadora, GRUB se cargará antes que cualquiera de éstos permitiéndonos elegir cuál iniciar.

El gestor de arranque GRUB viene preinstalado en la mayoría de las distribuciones de GNU/Linux modernas, entre ellas Debian, Ubuntu y sus derivadas. Anteriormente, el gestor de arranque más usado era LILO.


Los errores en las modificaciones de GRUB pueden llevar a problemas con el arranque. Por esto es recomendable hacer una copia de seguridad del archivo menu.lst antes de realizar algún cambio. Se puede hacer con el siguiente comando:
Código: linux [Seleccionar]

$ sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.backup

Luego, para restaurar la copia de seguridad, hacemos lo siguiente:
Código: linux [Seleccionar]

$ sudo cp /boot/grub/menu.lst.backup /boot/grub/menu.lst



 Cambiar el sistema operativo por defecto


Si tenemos Windows instalado y después hemos instalado Ubuntu, la configuración de GRUB por defecto hará que arranque Ubuntu. Si por algún motivo necesitamos que arranque Windows por defecto, veamos los pasos a seguir.

    * Editamos el archivo de configuración del menú de arranque de GRUB:
Código: linux [Seleccionar]

$ sudo gedit /boot/grub/menu.lst

    * Buscamos la siguiente línea:
Código: linux [Seleccionar]

default 0

    * Cambiamos el 0 por el número que ocupe el sistema operativo en la lista que queremos que se inicie por defecto, empezando por 0.
    * Guardamos los cambios y cerramos el editor.

Cambiar el tiempo de espera

En Ubuntu, GRUB deja por defecto 10 segundos para permitir la selección del sistema operativo o versión del kernel. Este tiempo puede parecer excesivo o demasiado breve. Para modificarlo basta con seguir los siguientes pasos:

    * Editamos el archivo de configuración del menú de arranque de GRUB:
Código: linux [Seleccionar]

$ sudo gedit /boot/grub/menu.lst

    * Buscamos la siguiente línea:
Código: linux [Seleccionar]

timeout         10

    * Modificamos el valor 10 por el deseado, teniendo en cuenta que se trata de segundos.
    * Guardamos los cambios y cerramos el editor.


Ocultar el menú


Si utilizamos normalmente sólo un sistema operativo o una versión del kernel, es molesto que nos aparezca el menú en cada arranque del sistema. GRUB permite configurar el menú de modo que no se muestre al arranque salvo que presionemos la tecla Escape (Esc) durante el mismo. Para hacer esto, seguimos los siguientes pasos:

    * Editamos el archivo de configuración del menú de arranque de GRUB:
Código: linux [Seleccionar]

$ sudo gedit /boot/grub/menu.lst

Buscamos la siguiente línea:
Código: linux [Seleccionar]

#hiddenmenu

    * Borramos la almohadilla o numeral (#) de la línea, haciendo esto la descomentaremos. Debe quedar así:
Código: linux [Seleccionar]

hiddenmenu

    * Guardamos los cambios y cerramos el editor.

Proteger con contraseña

Para que ningún usuario no autorizado pueda modificar los valores de GRUB en tiempo de ejecución, podemos establecer una contraseña, de esta forma sólo pulsando la tecla 'p' e introduciendo la contraseña se podrán cambiar los parámetros del programa.

    * Editamos el archivo de configuración del menú de arranque de GRUB:
Código: linux [Seleccionar]

$ sudo gedit /boot/grub/menu.lst

Buscamos la siguiente línea:
Código: linux [Seleccionar]

#password topsecret

    * Borramos la almohadilla o numeral (#) de la línea, haciendo esto la descomentaremos. Debe quedar así:
Código: linux [Seleccionar]

password topsecret

    * Guardamos el archivo y cerramos el editor.

Ahora la contraseña es topsecret, se puede cambiar e introducir la que se desee.


Codificar contraseña

Si queremos que nadie pueda leer la contraseña en el archivo de configuración de GRUB, el programa también ofrece la posibilidad de codificarla en formato md5:
Código: linux [Seleccionar]

$ sudo grub update

    * Aparece la consola de GRUB, entonces escribimos:
Código: linux [Seleccionar]

grub> md5crypt

    * Introducimos la palabra a codificar, en este caso topsecret, el programa devolvería el valor:
Código: linux [Seleccionar]


$1$ddTCc1$8v3fWFR4m5kDfuRG5LUHo/'
$ddTCc1$8v3fWFR4m5kDfuRG5LUHo/'

    * Lo copiamos y volvemos a la consola de Ubuntu:
Código: linux [Seleccionar]

grub> quit

    * En el archivo de configuración del menú de GRUB, borramos la siguiente línea:
Código: linux [Seleccionar]

# password topsecret'

En su lugar, escribimos:
Código: linux [Seleccionar]

password --md5
password --md5 $1$ddTCc1$8v3fWFR4m5kDfuRG5LUHo/
$ddTCc1$8v3fWFR4m5kDfuRG5LUHo/

Y ya tenemos nuestro GRUB protegido por contraseña cifrada.

    * Guardamos los cambios y cerramos el editor.

Si queremos restringir el acceso a algún elemento del menú de GRUB, basta con añadir después del título del menú una línea con la contraseña, por ejemplo:
Código: linux [Seleccionar]

title Ubuntu, kernel 2.6.15-26-386 (recovery mode)
password --md5
title Ubuntu, kernel 2.6.15-26-386 (recovery mode)
password --md5 $1$ddTCc1$8v3fWFR4m5kDfuRG5LUHo/
root (hd1,0)
kernel /boot/vmlinuz-2.6.15-26-386 root=/dev/hdb1 ro single
initrd /boot/initrd.img-2.6.15-26-386
boot
$ddTCc1$8v3fWFR4m5kDfuRG5LUHo/
root (hd1,0)
kernel /boot/vmlinuz-2.6.15-26-386 root=/dev/hdb1 ro single
initrd /boot/initrd.img-2.6.15-26-386
boot

    * Guardamos los cambios y cerramos el editor.


Cambiar colores

Por defecto, en Ubuntu el menú del GRUB tiene un fondo negro con letras blancas. Para cambiar los colores del menú de arranque por otros más atractivos, seguimos los siguientes pasos.

    * Editamos el archivo de configuración del menú de arranque de GRUB:
Código: linux [Seleccionar]

$ sudo gedit /boot/grub/menu.lst

    * Buscamos la siguiente línea:
Código: linux [Seleccionar]

# color cyan/blue white/blue

    * * Borramos la almohadilla o numeral (#) de la línea, haciendo esto la descomentaremos. Debe quedar así:
Código: linux [Seleccionar]

color cyan/blue white/blue

    * Guardamos los cambios y cerramos el editor.

Ahora nos aparecerá un menú con fondo azul, al estilo de varias aplicaciones con interfaz de línea de comandos. Si queremos, podemos cambiar los colores reemplazando las palabras cyan, blue y white por otras, que representen los nombres de distintos colores en inglés.

Colocar una imagen de fondo

En vez de cambiar sólo los colores del menú, GRUB nos brinda la posibilidad de colocar una imagen de fondo para hacerlo aún más atractivo.

La imagen que se puede colocar en GRUB tiene que tener un máximo de 14 colores y un tamaño de 640 × 480 píxeles. Tiene que estar grabada en formato .xpm y conviene que esté comprimida con gzip (extensión .gz), aunque no es imprescindible.

    * Para saber desde GIMP cuántos colores tiene nuestra imagen ve a Colores -> Info -> Análisis del cubo de color...
    * Si tiene más de 14 colores, podemos reducir el número con Imagen -> Modo -> Indexado.
    * Una vez tenemos la imagen, para ponerla de fondo editamos el archivo de configuración del menú de GRUB:
Código: linux [Seleccionar]

$ sudo gedit /boot/grub/menu.lst

    * Añadimos al principio la línea:
Código: linux [Seleccionar]

splashimage=(hd0,2)/ruta_imagen/nombre_imagen.xpm.gz

Donde (hd0,2) identifica el disco y partición donde se encuentra la imagen. Esto varía según el equipo. Si tienes un solo disco duro, antes de la coma irá hd0; si tienes Ubuntu en una sola partición, pero compartiendo el disco con otro sistema operativo, posiblemente irá después de la coma un 1. Puede ayudarte ejecutar:
Código: linux [Seleccionar]

$ sudo fdisk -l

teniendo en cuenta que GRUB numera las particiones desde 0 (por ejemplo, (hd0,1) se corresponde con sda2; (hd1,2) con sdb3).

    * Reiniciamos y listo, ya tendremos una imagen de fondo en el menú de arranque.

Configuración mediante aplicación externa


Otra de las formas para configurar GRUB fácilmente es por medio de la aplicación Start-Up Manager, para instalarlo tan solo hay que hacer clic a el Deb de su aplicación, no se encuentra en los repositorios por lo tanto tendréis que descargalo aquí.

Con esta aplicación podremos configurar el GRUB de manera muy fácil, nos da a elegir todas las opciones de manera sencilla.

Para poder ejecutarlo debemos poner en la consola lo siguiente:
Código: linux [Seleccionar]

$ sudo startupmanager

4
Temas generales / grabar escritorio en formato gif
« : febrero 22, 2010, 05:10:33 pm »
Esta utilidad es fantastica. Y puede venir muy bien para generar videotutoriales (mejor dicho gif-tutoriales). Generalmente cuando queremos mostrar un video de nuestro escritorio utilizamos aplicaciones como Istanbul, xvidcap o record-my-desktop (que estan en los repositorios), entonces generamos un fichero .avi que subimos a servicios online como Youtube. Pero esto es pesado, lleva tiempo y ademas la calidad del video deja que desear pues una captura del escritorio completo, por ejemplo, se ve con un tamaño muy reducido.

Byzanz es una sencilla aplicacion que nos va a permitir grabar lo que esta sucediendo en nuestro escritorio (ya sea la pantalla completa o la porcion de la misma que le indiquemos) y generara una imagen gif animada con el resultado de la captura. Esto lo hace ideal para subirlo a paginas web o distribuirlo libremente.

Esta en los repositorios, para instalarlo ejecutamos:

$ sudo aptitude install byzanz

Entonces podemos ejecutarlo desde la linea de comandos pasandole una serie de parametros como son:

-d , graba un video con la duracion indicada
-l , crear un gif que se repite continuamente
-c, grabar la posicion del cursor
-x , posicion x de la ventana (cuando se captura una porcion)
-y , posicion y de la ventana (cuando se captura una porcion)
-w , ancho de ventana (cuando se captura una porcion)
-h , altura de ventana (cuando se captura una porcion)

si no se pasan estos ultimos cuatro parametros, se hace una captura del escritorio completo.

Aqui un Ejemplo, para capturar un rectangulo de 100×100 pixeles a un fichero llamado fichero.gif:

$ byzanz-record -c -x 0 -y 0 -w 100 -h 100 -l fichero.gif

Pero tampoco hay que complicarse tanto, porque Byzanz puede instalarse como un applet mas del panel y entonces ya podemos seleccionar si queremos capturar una porcion o la ventana completa, ademas de la duracion de la captura (click en el circulo para iniciar, click otra vez para parar):

5
Estos comandos que aquí menciono, son útiles para cuando se trabaja desde una terminal, ya que en un ambiente gráfico sería muy parecido a como se hace en windows.

Para empezar si estamos en una terminal.

Podremos ver el tamaño de un archivo con el siguiente comando:

Código: linux [Seleccionar]

#du [nombre de archivo]


Nos arrojará el tamaño del archivo pero en bytes.
Pero para hacer más claro el tamaño de un archivo utilizaremos lo siguiente:

Código: linux [Seleccionar]

#du -h [nombre de archivo]


Y por fin podremos ver el tamaño en Megas o Gigas del archivo.

Ahora para un directorio será casi lo mismo en comando:

Código: linux [Seleccionar]

#du [nombre de directorio]


Si el directorio contiene subcarpetas aparecerá una lista con el tamaño de cada carpeta en bytes.

Si se requiere saber el tamaño en Megas o Gigas, se utiliza:

Código: linux [Seleccionar]

#du -h [nombre de directorio]


pero si uno quiere saber el tamaño de todo el directorio (la sumatoria de todos los archivos), hacemos lo siguiente:

Código: linux [Seleccionar]

#du -sh [nombre de directorio]


Ahora para saber el tamaño de cada partición ingresamos el siguiente comando:

Código: linux [Seleccionar]

#df


Y para hacerlo más legible entonces agregamos al comando lo siguiente:

Código: linux [Seleccionar]

#df -h


:linux:

6
Esto esta hecho para gnome, en las mayorias de las ditro es lo mismo pero en entorno gnome en kde no lo e usado :mmm:



primero en linux, hoy en dia se ocupa mucho lo que es ahorro de energia, esto quiere decir que tu sistema operativo pide recurso a medida que los necesitas, si tu procesador tiene esa ventaja, cuando necesita mayor proceso acelera el procesador y cuando no lo requiere lo disminuye, cuando necesitamos rapide y agilidad en cosas pesada o grande, necesitamos tener nuestro procesador al maximo , ya que acelerarlo para el sistema tiene un costo de demora... para evitar esto lo que hacemos es lo siguiente...

verificamos el estado de nuestro procesador con el comando


cat /proc/cpuinfo



nos damos cuenta que nuestro procesador esta al minimo, por la tecnologia de ahorro de energia (movil en laptop) .


para esto existe un complemento en nuestro sistema gnome, para añadirlo nos dirigimos a la barra de tarea y le damos segundo click a nuestro mouse...



dentro de la lista de minis-aplicaciones añadimos monitor de frecuencia de la cpu



cuando se agrega aparece el siguiente dibujo en la barra de tarea , la cual indica la velocidad de nuestra cpu (ojo si tu procesador es doble nucleo debes agregar este complemento 2 veces).



luego de agregarlo debemor pinchar sobre la aplicacion agregada y pinchar preferencias

dentro de preferencias debemos seleccionar la cpu (nucleo) para monitorear....




como dije si tienes doble nucleo como en mi caso agregas 2 de esta aplicaciones y en la primera pones cpu0 y en la segunda cpu1


luego en cada aplicacion damos click con el primer boton del mouse....



en la siguiente lista debemos seleccionar Performance esta opcion deja nuestra cpu a full, por defecto siempre esta marcada ondemand que es por demanda o peticion de cpu...


y finalmente para comprobar que nuestros nucleos esta a full le damos el comando

 cat /proc/cpuinfo




y el cpu quedo al 100% de rendimiento ....




Saludos  :x3: :x3:

7
Temas generales / Cambiar la extencion de muchos archivo de una...
« : febrero 22, 2010, 05:08:26 pm »
Para cambiar la extensión de múltiples archivos en Linux de una vez podemos usar el comando “rename” y las expresiones regulares. Si queremos cambiar la extensión de varios archivos por ejemplo de .csv a .txt podemos usar el comando:

Código: bash [Seleccionar]

rename 's/\.csv/\.txt/' *.csv


por ejemplo:

muchas veces pasa que la extenciones en windows en mayuscula o minuscula dan igual, pero cuando tenemos esos archivos en linux, no da igual :nogay:
por lo tanto podemos usar este comando para poner en minuscula todas esas extenciones de esta forma:

Supongamos que tenemos varias imagen con formato .PNG en mayuscula tonce deceamos minimizar todo un directorio....

vamos al directorio correspondiente por la shell y ponemos lo siguiente
Código: bash [Seleccionar]

rename 's/\.PNG/\.png/' *.PNG
//renombra todo lo que sea .PNG por .png buscando por *.PNG eso dice :d








Breve explicación:

’s/\.csv$/\.txt/’ – es una expresión regular que indica que hay que cambiar en la cadena data (en este caso el nombre de fichero) el texto .csv por .txt (el símbolo $ indica que .csv tiene que estar al final de la cadena).

*.csv – indica el conjunto de archivos sobre el que debe actuar el comando ‘rename’, en este caso los archivos acabados en csv.

Posiblemente un día de éstos escriba algún post explicando mejor qué son las expresiones regulares. Hasta entonces… ¡a buscarse la vida!

(por cierto, buscando en la ayuda del comando rename hubieras encontrado la solución a cómo cambiar las extensiones de los ficheros; pruébalo ‘man rename’).

8
Voy a mostrar lo facil que es compartir archivo en linux con NFS (  Network File System (Sistema de archivos de red))

(basado en debian - ubuntu )

1-) necesitamos lo paquete necesarios ... (esto se instalara en el servidor (pc que compartira el directorio))

Código: linux [Seleccionar]

root@master-desktop:~# apt-get install nfs-kernel-server nfs-common


2-) configuramos el archivo /etc/exports

Código: linux [Seleccionar]

root@master-desktop:~# nano /etc/exports


donde debemos agregar la ruta de lo que compartiremos en mi caso la carpeta /home/master
entonces colocamos dentro del archivo lo siguiente...
Código: linux [Seleccionar]

/home/master 192.168.0.0./24(rw,sync)


donde /home/master es la ruta a compartir
192.168.0.0./24 es la red que podra tener acceso a esto

rw = lectura y escritura
sync = sincronizado


3-) en el cliente instalamos lo siguiente
Código: linux [Seleccionar]

sudo apt-get install portmap nfs-common


4-) y final mente montamos el directorio en nuestra maquina

*creamos el directorio para montar
Código: linux [Seleccionar]

mkdir /media/desktop/


*y montamos el directorio
Código: linux [Seleccionar]

mount -t nfs 192.168.0.2:/home/master /media/desktop/


-t nfs  le indica que montaremos un directorio nfs.

192.168.0.2.:/home/master   es la direccion ip de nuestra maquina server y su directorio a montar

/media/desktop  es el directorio donde se montara .

y ya se encuentra montado nuestro sistema de archivo en nuestro cliente :D

Fin


:linux:

9
1) En el servidor origen ejecutar la siguiente línea de comandos en la shell (no introducir passphrase) :
Código: linux [Seleccionar]

origen# ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa):
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A


Con este comando creamos las llaves publica y privada de autenticación.

2) En el servidor de destino, creamos, en caso de que no exista, la carpeta ~/.ssh

Código: linux [Seleccionar]

destino# mkdir ~/.ssh


3) Finalmente, introducimos la llave pública del servidor origen en el fichero de llaves autorizadas del servidor destino:

El siguiente comando añade nuestra llave pública en el final del fichero authorized_keys del servidor destino:

Código: linux [Seleccionar]

origen# cat .ssh/id_rsa.pub | ssh usuario@servidordestino 'cat >> .ssh/authorized_keys'


Nota: En este comando nos pedirá la clave al ejecutar un SSH, no obstante, será la última vez pues después ya estará la llave dentro de .ssh/authorized_keys

4) Ya podemos acceder vía ssh sin clave:

Código: linux [Seleccionar]

origen# ssh usuario@servidordestino


Saludos...

10
Temas generales / Ver grafica de arranque de linux...
« : febrero 22, 2010, 05:06:40 pm »
para eso tenemos que instalar lo siguiente


Para instalar bootchart en nuestro Ubuntu ejecuta en un terminal
Código: linux [Seleccionar]

sudo apt-get install bootchart


Una vez tu ordenador arranque puedes encontrar la gráfica para examinarla en

Código: linux [Seleccionar]

/var/log/bootchart

11


Acceso IMAP/POP3 seguro con Dovecot

Podremos acceder a nuestro correo utilizando los protocolos IMAP o POP3 gracias a Dovecot. Lo instalaremos mediante:

aptitude install dovecot-imapd dovecot-pop3d

Dado que se recomienda un acceso cifrado (IMAPs/POP3s), vamos crear los certificados necesarios:

Código: bash [Seleccionar]

mkdir /etc/dovecot/ssl
cd /etc/dovecot/ssl
openssl req -new -x509 -nodes -out dovecot.pem -keyout dovecot.pem -days 3650


Respondemos a las preguntas, por ejemplo:


Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Catalunya
Locality Name (eg, city) []:Tarragona
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Marble Station
Organizational Unit Name (eg, section) []:MS
Common Name (eg, YOUR name) []:localhost
Email Address []:marble@localhost



Ahora podemos configurar Dovecot editando “/etc/dovecot.conf”, indicaremos que queremos que se activen los protocolos IMAPs y POP3s (cifrados). Para IMAP3, el usuario tendrá acceso a su buzón principal ubicado en “/var/mail/usuario” y a todos los buzones que tenga en el directorio “mail” de su directorio personal:

Código: bash [Seleccionar]


protocols = imaps pop3s

...

ssl_cert_file = /etc/dovecot/ssl/dovecot.pem
ssl_key_file = /etc/dovecot/ssl/dovecot.pem

...

default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u



Iniciamos el servicio:

Código: bash [Seleccionar]


/etc/init.d/dovecot start



Ahora ya es posible acceder a nuestro mail mediante un cliente como Evolution. Si utilizamos el protocolo POP3 el correo se bajará a nuestra máquina y se eliminará del servidor, sin embargo, si usamos IMAP podremos acceder a los mails de forma remota, conservandose en el servidor.
Postfix

Postfix será el servidor SMTP. Para configurarlo mínimamente:

Código: bash [Seleccionar]

dpkg-reconfigure postfix


Contestamos:

   1. Tipo configuración: Internet Site
   2. Destino de los mails dirigidos a root: NONE
   3. Dominio: server1.example.com
   4. Otros destinos para los que aceptar correo: server1.example.com, localhost.example.com, localhost
   5. Actualizaciones sincronizadas (más seguro, no se pierden mails): Yes
   6. Redes locales: 127.0.0.0/8
   7. Usar procmail para entrega local: Yes
   8. Limite del tamaño de buzón: 0
   9. Caracter extensión: +


Instalamos antivirus Clam:


Código: bash [Seleccionar]

aptitude install clamav-daemon


Instalamos diversos decompresores para que el antivirus sea capaz de analizar ficheros comprimidos:

Código: bash [Seleccionar]


aptitude install unrar-nonfree lha arj unzoo zip unzip bzip2 gzip cpio file lzop


Instalamos los protectores colaborativos contra Spam, Pyzor y Razor. Ambos calculan un hash del mensaje y consultan a un servidor de internet si corresponde a un mail de publicidad. Este paso es opcional.

Código: bash [Seleccionar]


aptitude install pyzor razor



Instalamos el bloqueador de correo basura spamassasin:

Código: bash [Seleccionar]


aptitude install spamassassin


A continuación instalamos el agente intermediario que conectará nuestro servidor de correo Exim con spamassasin y clamav:

Código: bash [Seleccionar]


aptitude install amavisd-new


Editamos “/etc/amavis/amavisd.conf” y modificamos:

Código: bash [Seleccionar]


# Útil para añadir a la cabecera del mail:
#    X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at marblestation.homeip.net
$mydomain = 'marblestation.homeip.net';

...

# Dejar pasar los spams, filtraremos por procmailrc.
# Si los correos pasan antes por otro MX "cercano" o local (por ejemplo lo bajáis con el fetchmail)
# no hagáis un REJECT, que estaréis tirando piedras a vuestro propio tejado.
$final_spam_destiny = D_PASS;

...

# Descomentamos las siguientes lineas.
# Enviara los mails analizados de vuelta al puerto 10025 de localhost.
$forward_method = 'smtp:127.0.0.1:10025';  # where to forward checked mail
$notify_method = $forward_method;

...

# Comentamos la siguiente linea para que los avisos de virus no los reciba una persona concreta
#$virus_admin = "postmaster\@$mydomain";

....

# Dejamos pasar los mails infectados, los filtraremos por procmail
$final_virus_destiny      = D_PASS;  # (defaults to D_BOUNCE)

...

# Comentamos las siguientes líneas para no poner los virus/spam en cuarentena
#$virus_quarantine_to  = 'virus-quarantine';
...
#$spam_quarantine_to = 'spam-quarantine';

...

# Comentamos la siguiente linea para que no se modifiquen los subjects de correos spam, los
# filtraremos por otras cabeceras con procmail.
#$sa_spam_subject_tag = '***SPAM*** ';


Editamos el archivo de configuración de Postfix “/etc/postfix/master.cf” y añadimos al final:

Código: bash [Seleccionar]


smtp-amavis unix -      -       n     -        2  smtp
    -o smtp_data_done_timeout=1200
    -o disable_dns_lookups=yes
127.0.0.1:10025 inet n  -       n     -       -  smtpd
    -o content_filter=
    -o disable_dns_lookups=yes
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_client_restrictions=
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000


Con esto escucharemos por el puerto 10025 de forma local (no aceptaremos conexiones desde otras máquinas), dado que por ahí será por donde recibiremos los mails ya analizados de amavis-new.

Ejecutamos:
Código: bash [Seleccionar]


postconf -e 'content_filter = smtp-amavis:[127.0.0.1]:10024'


Esto añadirá al final del archivo “/etc/postfix/main.cf” la linea “content_filter = smtp-amavis:[127.0.0.1]:10024″. Así se enviará todo mail recibido a amavis, el cual escucha por el puerto 10024 en nuestra máquina.

Reiniciamos los servicios y todo estará listo:
Código: bash [Seleccionar]


/etc/init.d/amavis restart
/etc/init.d/postfix restart


En el directorio de nuestro usuario, por ejemplo “marble”, creamos el fichero “.procmailrc”:
Código: bash [Seleccionar]


## Si es un spam se lo indico al bogofilter...
#:0 c
#* ^X-Spam-Status: Yes
#|bogofilter -s -l

# ...y luego lo pongo en ~/mail/spams
:0:
* ^X-Spam-Status: Yes
mail/spams

# Compruebo si es un virus...
:0:
* ^X-Amavis-Alert: INFECTED
mail/virus

## Hago el segundo filtrado antispam
#:0HB
#* ? bogofilter -u -l
#mail/spams


Podemos comprobar el correcto funcionamiento enviando un mail manualmente (a un usuario existente), haciendo telnet al puerto 25 de nuestro propio ordenador:

Código: bash [Seleccionar]


$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 localhost.localdomain ESMTP Postfix (Ubuntu)
MAIL FROM: marble@localhost
250 Ok
RCPT TO: marble@localhost
250 Ok
DATA
354 End data with .
Subject: Hola!!

Que tal?

.
250 Ok: queued as 1AF8722D564
quit
221 Bye
Connection closed by foreign host.


Si se ha recibido correctamente el correo, este estará almacenado en “/var/mail/marble” (dado que se ha enviado al usuario marble@localhost).

Para acceder al mail es posible utilizar un cliente de correo como mutt o configurar Evolution para correo local con buzones tipo MBOX (usando el buzón “/var/mail/marble”) y el envio mediante SMTP (localhost).
TLS

Veamos como activar la encriptación por el puerto 25 para poder enviar correos de forma segura.

Código: bash [Seleccionar]


mkdir /etc/postfix/ssl
cd /etc/postfix/ssl
openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 3650


A las preguntas contestamos según sea nuestro caso, por ejemplo:

Código: bash [Seleccionar]


Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Catalunya
Locality Name (eg, city) []:Tarragona
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Marble Station
Organizational Unit Name (eg, section) []:MS
Common Name (eg, YOUR name) []:localhost
Email Address []:marble@localhost

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


Modificamos la configuración de Postfix ejecutando:

Código: bash [Seleccionar]


postconf -e 'smtp_use_tls = yes'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.pem'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.pem'
postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/smtpd.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
postconf -e 'tls_random_source = dev:/dev/urandom'


Recargamos Postfix:

Código: bash [Seleccionar]


/etc/init.d/postfix reload


Comprobamos que ya tenemos activa la opción TLS conectandonos por telnet al puerto 25 e indicando “EHLO localhost”, si en el listado que imprime se muestra “STARTTLS” es que todo ha ido correctamente:

Código: bash [Seleccionar]


$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 localhost.localdomain ESMTP Postfix (Ubuntu)
EHLO localhost
250-localhost.localdomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250 8BITMIME
quit
221 Bye
Connection closed by foreign host.


Si queremos que clientes como Evolution o Outlook conecten correctamente de forma segura con nuestro SMTP, vamos a tener que añadir la siguietne linea a “/etc/postfix/master.cf”:

Código: bash [Seleccionar]


## Abre el puerto 465 para SMTPS (usado por Outlook o Evolution para conexiones seguras)
smtps    inet  n       -       n       -       -       smtpd
      -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes


Y a continuación habrá que reiniciar Postfix:

Código: bash [Seleccionar]


/etc/init.d/postfix reload


Más información sobre Postfix TLS: http://www.postfix.org/TLS_README.html
Autentificación

Postfix utiliza SASL para la autentificación de usuarios, por tanto instalaremos los ejecutables que gestionan SASL:

Código: bash [Seleccionar]

aptitude install sasl2-bin


Descomentamos de “/etc/default/saslauthd” la línea:

Código: bash [Seleccionar]


START=yes
...


Iniciamos el demonio:

Código: bash [Seleccionar]


/etc/init.d/saslauthd start


Este esperará peticiones de autentificación mediante el socket UNIX “/var/run/saslauthd/mux”, podemos comprobar su correcto funcionamiento mediante:

Código: bash [Seleccionar]


testsaslauthd -f /var/run/saslauthd/mux -u [USUARIO] -p [PASSWORD]


A continuación podemos configurar Postfix para que utilice la autentificación, permitiendo que esta solo sea llevada a cabo cuando se utilizan conexiones seguras (TLS):

Código: bash [Seleccionar]

postconf -e 'smtpd_tls_auth_only = yes'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'broken_sasl_auth_clients = yes'


A continuación indicamos a Postfix que utilice slasauthd para la autentificación:

Código: bash [Seleccionar]

echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf
echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf


Para que Postfix tenga permisos para consultar slasauthd, tendremos que editar “/etc/group” para añadir el usuario “postfix” al grupo “sasl”:

Código: bash [Seleccionar]

...
sasl:x:45:postfix
...


Finalmente reinciamos Postfix:

Código: bash [Seleccionar]

/etc/init.d/postfix reload


Ya podemos probar el envio de mails con algún cliente como Evolution, desde el cual se podrá especificar que el servidor SMTP requiere autentificación.


Saludos... :linux:

12
Dejo el siguiente manual en el foro sobre este poderoso framework codeigniter

http://www.elartedeprogramar.cl/manuales/manual_codeigniter_es...


Saludos...

13
Framework - CodeIgniter / Que es codeigniter y como configurarlo...
« : febrero 22, 2010, 04:51:48 pm »
CodeIgniter es una librería de aplicaciones web para PHP. Permite a los desarrolladores construir aplicaciones web más rápidamente, y ofrece útiles librerías de código y atajos que aceleran las tareas tediosas en PHP. CodeIgniter se basa en un diseño modular (lo que quiere decir que puedes implementar librerías específicas a voluntad) lo que repercute en una mayor velocidad del sistema. Este tutorial intentará mostrar los pasos básicos de instalar la librería, incluyendo como construir una aplicación web básica hola mundo que utiliza un enfoque MVC.

¿Por qué una librería?

Las librerías permiten estructurar las aplicaciones al desarrollarlas ofreciendo clases reusables y funciones que pueden reducir significativamente el tiempo de desarrollo. Algunas pegas de las librerías es que ofrecen clases no necesitadas, añadiendo exceso de código que dificulta encontrar las cosas.

¿Por qué CodeIgniter?




Lo básico de CodeIgniter

CodeIgniter es una librería muy ligera con buen rendimiento. Mientras que resulta perfecta para el principiante (a causa de su pequeña curva de aprendizaje), también resulta perfecta para aplicaciones web grandes y exigentes. CodeIgniter está desarrollada por EllisLab y dispone de una documentación accesible y fácil de comprender. Una lista de razones que hacen de CodeIgniter una librería adecuada:

    * Usa pocos recursos pero ofrece un rendimiento excepcional
    * Enfoque MVC para el desarrollo (aunque permite bastante flexibilidad al utilizar una estructura poco rígida)
    * Genera URLs limpias aptas para motores de búsqueda
    * Fácilmente extensible
    * Funciona sobre PHP 4 (a partir de 4.3.2) y PHP 5
    * Soporta las principales bases de datos incluyendo MySQL (a partir de 4.1), MySQLi, SQL Server, Postgres, Oracle, SQLite y ODBC
    * La seguridad de la aplicación es un objetivo básico
    * Operaciones cacheadas fácilmente
    * Módulos y atajos que ayudan con las operaciones complejas como email, manipulación de imágenes, validación de formularios, subida de archivos, sesiones, aplicaciones multilenguaje y creación de apis para una aplicación
    * La mayoría de módulos sólo se cargan cuando son necesarios, lo que redunda en un drástico recorte de los recursos necesarios


¿Por qué un MVC?

Para los principiantes, MVC significa Modelo, Vista, Controlador. Es un patrón de programación usando para desarrollar aplicaciones web. Este patrón aisla la interfície de usuario y el backend (p.e. la interacción de la base de datos de todo lo demás. Una implementación correcta de esto permite que los desarrolladores modifiquen su interfície de usuario o backend sin afectar a la otra parte. MVC también incrementa la flexibilidad de una aplicación permitiendo la reutilización continua de los modelos o vistas). A continuación se puede encontrar una descripción de MVC.

    * Modelo: El modelo trata con los datos en su origen y con la interacción con la base de datos y contendrá funciones como agregar registros a la base de datos o seleccionar registros específicos de la base de datos. En CodeIgniter el componente modelo no es requerido y puede ser incluido en el controlador.
    * Vista: La vista trata con la visualización de los datos y con la interfície que el usuario controla. En CodeIgniter (o CI) la vista puede ser una página web, una fuente RSS, datos Ajax o cualquier otra "página".
    * Controlador: El controlador actúa como el intermediario entre la vista y el modelo y, como su nombre sugiere, controla lo que se envía desde el modelo hacia la vista. En CI, el controlador también es el lugar donde cargar módulos y atajos.


Un ejemplo de un enfoque MVC sería el de un formulario de contacto.

   1. El usuario interactúa con la vista rellenando un formulario y enviándolo.
   2. El controlador recibe los datos POST del formulario, y envía estos datos al modelo que es quien actualiza la base de datos.
   3. El modelo envía el resultado de la base de datos al controlador.
   4. El resultado es actualizado en la vista y mostrado al usuario.


Esto puede sonar como mucho trabajo que hacer. Pero creeme, cuando se empieza a trabajar con aplicaciones grandes, poder reutilizar modelos o vistas ahorra un montón de tiempo.

Paso 1. Descargar CodeIgniter

Para empezar se necesita descargar CodeIgniter y subirlo a un servidor web. Apuntar el navegador a http://www.codeigniter.com/ y pulsa sobre el gran botón de descarga. Para este tutorial se usará la versión 1.70.



Paso 2. Instalar y explorar CodeIgniter

Una vez descargado, sólo es necesario descomprimir el Zip y renombrar la carpeta "CodeIgniter_1.7.0" al nombre de la aplicación deseada o, en este caso, "ci" y subirla a un servidor con soporte de PHP y MySQL. Ahora que está en el servidor, explicaré para qué son las carpetas y archivos:



    * La carpeta system almacena todos los archivos que hacen que CI funcione
          o La carpeta de aplicación es casi idéntica al contenido de la carpeta de sistema para que que el usuario pueda tener archivos que sean particulares de la aplicación, por ejemplo si un usuario quiere cargar un atajo en una aplicación, lo ubicaría en la carpeta system/application/helpers en lugar de la de system/helpers.
                + La carpeta config almacena todos los archivos de configuración relevantes para la aplicación. Eso incluye qué librerías debe auto-cargar la aplicación y detalles de la base de datos.
                + La carpeta controllers almacena todos los controladores de la aplicación.
                + La carpeta errors almacena todas las páginas de patrones de errores de la aplicación. Cuando un error aparece, se genera una página de error a partir de uno de estos patrones.
                + La carpeta hooks contiene extensiones que modifican el funcionamiento de los archivos del núcleo de CI. Están pensados para los usuarios avanzados de CI.
                + La carpeta language contiene líneas de texto que pueden ser cargadas a través del módulo de lenguaje para crear sitios multilenguaje.
                + La carpeta libraries contiene todas las librerías o módulos específicos para la aplicación.
                + La carpeta models almacena los modelos de la aplicación.
                + La carpeta views almacena las vistas de la aplicación.
          o La carpeta cache almacena los caches generados por el módulo de caché.
          o La carpeta codeigniter almacena los archivos necesarios para que CI funcione.
          o La carpeta database almacena todos los drivers de base de datos y las clases que habilitan las conexiones a bases de datos.
          o La carpeta fonts almacena todas las fuentes que pueden ser usadas por el módulo de manipulación de imágenes.
          o La carpeta helpers contiene los atajos del núcleo de CI, pero es posible ubicar otros atajos personales para que accedan todas las aplicaciones.
          o La carpeta language contiene los archivos de lenguaje del núcleo de CI que usan sus módulos y atajos, pero es posible ubicar carpetas de lenguaje para que accedan todas las aplicaciones.
          o La carpeta libraries almacena las librerías del nucleo de CI, pero es posible ubicar otras librerías personales para que sean accedidas por todas las aplicaciones.
          o La carpeta logs contiene todos los logs (registros) generados por CI.
          o La carpeta plugin almacena todos los plugins que pueden ser usados. Los plugins son casi idénticos a los atajos (helpers). Son funciones dirigidas a ser compartidas por la comunidad.
          o La carpeta scaffolding almacena todos los archivos que hacen que la clase scaffolding (andamiaje) funcione. Scaffolding permite una interfície CRUD (Create-Read-Update-Delete) conveniente para acceder a la información de la base de datos durante el desarrollo.
    * La user_guide guarda la guía de usuario de CI.
    * El archivo index.php es el elemento que gestiona toda la magia de CI y permite cambiar el nombre de las carpetas de sistema y de aplicación.


Paso 3: Configurar CodeIgniter

Conseguir que CI se ponga en marcha y funcione es bastante simple. Principalmente requiere editar unos pocos archivos de configuración.

Se necesita configurar CI para que apunte a la URL base correcta de la aplicación. Para hacerlo, hay que abrir system/application/config/config.php y editar la variable array base_url para que apunte a tu servidor y carpeta CI.

Código: php [Seleccionar]

$config['base_url'] = "http://localhost/ci/";



Paso 4: Probando CodeIgniter

Haremos un rápido test para ver si CI está en marcha y funcionando adecuadamente. Dirígete a http://localhost/ci/ y deberías ver lo siguiente.



Paso 5: Configurando CodeIgniter (continuación)

Si está en marcha y funcionando, deberíamos terminar la configuración. Estamos empezando a configurarlo específicamente para nuestra nueva aplicación holamundo. Si quieres usar una base de datos con tu aplicación (cosa que haremos en este tutorial), abre system/application/config/database.php y establece los siguientes elementos a los valores correspondientes. Este código conecta a una base de datos MySQL llamada "holamundo" en localhost con el usuario "root" y la clave "root".

Código: php [Seleccionar]

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "root";
$db['default']['database'] = "holamundo";
$db['default']['dbdriver'] = "mysql";


Además, como vamos a usar la base de datos un poco, queremos que se cargue automáticamente para no tener que hacerlo cada vez que conectemos. Abre system/application/config/autoload.php y agrega 'database' a la variable array de carga automática de módulos.

Código: php [Seleccionar]

$autoload['libraries'] = array('database');


Actualmente, la configuración de CI tendrá un controlador predefinido llamado "welcome.php" que se puede encontrar en la carpeta system/application/controllers. Para este tutorial, bórralo y abre el archivo system/application/config/routes.php y cambia el la variable de ruta predefinida para que apunte al controlador "holamundo".

Código: php [Seleccionar]

$route['default_controller'] = "Helloworld"



CI también tiene un archivo de vista que no necesitamos. Abre la carpeta system/application/view/ y elimina el archivo welcome_message.php.

Paso 6: Crea la base de datos Holamundo

Puesto que esto no es un tutorial de MySQL, esta sección será corta. Crea una base de datos llamada "holamundo" y ejecuta el siguiente código SQL mediante phpMyAdmin o cualquier otro cliente MySQL.
ver código
imprimir?

Código: sql [Seleccionar]

CREATE TABLE `data` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `data` (`id`, `title`, `text`) VALUES(1, 'Hello World!', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla
sapien eros, lacinia eu, consectetur vel, dignissim et, massa. Praesent suscipit nunc vitae neque. Duis a ipsum. Nunc a erat. Praesent
nec libero. Phasellus lobortis, velit sed pharetra imperdiet, justo ipsum facilisis arcu, in eleifend elit nulla sit amet tellus.
Pellentesque molestie dui lacinia nulla. Sed vitae arcu at nisl sodales ultricies. Etiam mi ligula, consequat eget, elementum sed,
vulputate in, augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;');


Paso 7: Crea el modelo Holamundo


Los modelos son opcionales en CI, pero está considerada una buena práctica el utilizarlos. Se trata de simples clases PHP que contienen funciones que trabajan con información de la base de datos. Crea un archivo helloworld_model.php en la carpeta system/application/models. En este archivo, crea una clase Helloworld_model, con un constructor Helloworld_model y una función getData.

En la función getData vamos a usar funciones de base de datos Active Record que aceleran el desarrollo cuando se trabaja con CI y bases de datos. Esencialmente se trata de funciones simplificadas para crear consultas.
Código: php [Seleccionar]

<?php
class Helloworld_model extends Model {

    function Helloworld_model()
    {
        // Call the Model constructor
        parent::Model();
    }
     
    function getData()
  {
   //Query the data table for every record and row
   $query = $this->db->get('data');
   
   if ($query->num_rows() > 0)
   {
    return $query->result();
   }else{
    //show_error('Database is empty!');
   }
  }

}
?>


Paso 8: Crea el controlador Holamundo


Creemos un controlador que muestre la vista y cargue el modelo. De esa forma, cuando vayas a la dirección http://localhost/ci/index.php/helloworld/, verás datos que vienen de la base de datos. En la carpeta system/application/controllers, crea un archivo llamado helloworld.php. Ahí crearemos una clase que tiene el mismo nombre que el archivo.

Dentro de esta clase, necesitas crear una función llamada "index". Esta es la función que se mostrará cuando no se indique otra (por ejemplo al visitar http://localhost/ci/index.php/helloworld/). Si, por ejemplo, creasemos una función llamada foo, podríamos encontrarla en http://localhost/ci/index.php/helloworld/foo/.

Lo que hay que recordar es cómo CI estructura sus URLs. Es decir: http://host/codeignitordirectory/index.php/class/function

En la función index del controlador necesitamos cargar el modelo, consultar la base de datos, y pasar los datos solicitados a la vista. Para cargar cualquier recurso en CI (como módulos, atajos, vistas o modelos) usamos la clase load. Tras cargar el modelo, podemos acceder a él a través de su nombre y de la función particular deseada. Para pasar datos a la vista, necesitamos asignarla a un elemento de array y pasar el array, lo cuál recrea los elementos del array como una variable en el archivo de vista.

Código: php [Seleccionar]

<?php
 class Helloworld extends Controller{
  function index()
  {
   $this->load->model('helloworld_model');

   $data['result'] = $this->helloworld_model->getData();
   $data['page_title'] = "CI Hello World App!";

   $this->load->view('helloworld_view',$data);
     }
}
?>


Si visitamos http://localhost/ci/index.php/helloworld/ ahora, no funcionará. Eso se debe a que aún no hemos creado el archivo de la vista.




Paso 9: Crea la vista Holamundo

El archivo de vista es lo que el usuario ve y con lo que interactúa, pudiendo ser un segmento de una página o una página entera. Puedes pasar un array de variables a la vista a través del segundo argumento de la función de carga del modelo. Para crear la vista de nuestro tutorial, crea un nuevo archivo llamado helloworld_view.php en la carpeta system/application/view. Ahora, necesitamos crear los elementos normales html, head y body y entonces crear una cabecera y un párrafo para la información que vendrá de la base de datos. Para mostrar todos los registros recibidos de la base de datos, ponemos un bucle foreach que recorra todos los elementos.

Código: php [Seleccionar]

<html>
<head>
  <title><?=$page_title?></title>
</head>
<body>
  <?php foreach($result as $row):?>
  <h3><?=$row->title?></h3>
  <p><?=$row->text?></p>
   

  <?php endforeach;?>
</body>
</html>


Es posible que te hayas dado cuenta de que estamos usando una sintaxis alternativa de PHP que ofrece una forma conveniente de escribir comandos echo y que además ahorra tiempo.

Paso 10: Ta-da y algunos Extras

Cuando visites http://localhost/ci/index.php/helloworld/ deberías ver algo similar a lo siguiente:



Pero aún no hemos terminado. Hay unas pocas cosas que mejoran la experiencia con CodeIgniter - como eliminar ese molesto "index.php" de la URL. Es posible hacerlo creando un archivo .htaccess en la carpeta raíz y añadiendo el siguiente código.

Código: htaccess [Seleccionar]

RewriteEngine on
RewriteCond
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ ci/index.php/$1 [L]
 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ ci/index.php/
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ ci/index.php/$1 [L]
 [L]


También necesitarás abrir el archivo config.php de system/application/config/ y editar el elemento index_page asignándole una cadena vacía.

Código: php [Seleccionar]

$config['index_page'] = "";


Otro truco es activar la habilidad de CI de parsear la sintaxis alternativa de PHP, si no está habilitada por defecto en el servidor. Para conseguirlo, abre el mismo archivo que antes (system/application/config/config.php) y edita el elemento rewrite_short_tags con el valor TRUE.

Código: php [Seleccionar]

$config['rewrite_short_tags'] = TRUE;


Y con esto llegamos al final del tutorial. Una aplicación simple de CodeIgniter que permite entender cómo se estructura el código con esta librería, aunque no se pueden ver todas sus ventajas hasta que se empiecen a crear aplicaciones un poco más complejas. Espero que haya sido de utilidad. Addendum:
En NetTuts ofrecen 6 trucos u optimizaciones muy interesantes si vas a utilizar la librería.

Saludos...

14
Aunque pueda parecer difícil, hacer consultas en MySQL en CodeIgniter es la cosa más fácil del mundo. Y no solo con MySQL sino con todos los protocolos soportados por el framework. Es importante, sobretodo, que tengamos nuestro CodeIgniter correctamente configurado. Podéis echarle una ojeada al artículo de configuración y iniciación para ver como configuramos los datos de MySQL.

CodeIgniter, a parte, nos da la posibilidad de trabajar con más de una base de datos a la vez, configurando y conectando específicamente a una u otra dependiendo de las necesidades. Sin embargo, no es el objeto de esta explicación.

Supongamos que queremos hacer una consulta parecida a la siguiente:

SELECT * FROM entradas

Lo normal en PHP sería usar un mysql_query(”SELECT * FROM entradas”);, sin embargo en CodeIgniter (y usando librería específica) lo usaríamos de la siguiente forma:

Código: php [Seleccionar]

$this->db->query("SELECT * FROM entradas");


GET

Conclusión, podemos usarlo de la misma manera. Luego si quisiéramos estructurar los resultados podríamos usar la función foreach de PHP. Sin embargo, hay una manera mucho más fácil en CodeIgniter de tratar las consultas. Ellos lo llaman el Active Record Class y se emplearía, para el ejemplo de antes, así:

Código: php [Seleccionar]

$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas;


También en $this->db->get(); es posible usar un segundo parámetro para especificar un LIMIT:

Código: php [Seleccionar]

$query = $this->db->get("entradas", 10, 20);

// Genera: SELECT * FROM entradas LIMIT 20,10


SELECT

También podemos especificar el SELECT con $this->db->select(); tipo:

Código: php [Seleccionar]

$query = $this->db->select("id,title,body");
$query = $this->db->get("entradas");

// Genera: SELECT id,title,body FROM entradas


Existen algunas funciones de MySQL que tienen una propiedad de SELECT específica en CodeIgniter, sin embargo, solo los listaré ya que no los usaremos en aplicaciones básicas:


    * $this->db->select_max();
    * $this->db->select_min();
    * $this->db->select_avg();
    * $this->db->select_sum();


JOIN

Esto nos permite unir dos tablas tal que así:

Código: php [Seleccionar]

$query = $this->db->join("comentarios", "comentarios.id = entradas.id");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas JOIN comentarios ON comentarios.id = entradas.id


WHERE

Código: php [Seleccionar]

$query = $this->db->where("id","38");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas WHERE id = '38'


Si quisiéramos podríamos unir varios WHERE, simplemente añadiendo otras condiciones:

Código: php [Seleccionar]

$query = $this->db->where("id","38");
$query = $this->db->where("name","Isern");
$query = $this->db->where("surname","Palaus");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas WHERE id = '38' AND name = 'Isern' AND surname = 'Palaus'


Pero claro, no todo son igualdades. Quizás queremos buscar una cosa que sea más pequeña que, o diferente, o mayor, etcétera. La forma es especificar en el primer campo, si no hay nada se tomará = por defecto:

Código: php [Seleccionar]

$query = $this->db->where("id >","38");
$query = $this->db->where("name !=","Isern");
$query = $this->db->where("surname","Palaus");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas WHERE id > '38' AND name != 'Isern' AND surname = 'Palaus'


Al igual que SELECT, hay muchas más propiedades:

    * $this->db->or_where();
    * $this->db->where_in();
    * $this->db->or_where_in();
    * $this->db->where_not_in();
    * $this->db->or_where_not_in();


LIKE

Código: php [Seleccionar]

$query = $this->db->like("body","sentencia");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entras LIKE body = '%sentencia%'


Sin embargo, podría ser que no quisiéramos que las dos partes fueran aleatorias… De modo que podemos especificar en un tercer campo el % donde debe estar. Puede ser: before, both y after.

Código: php [Seleccionar]

$query = $this->db->like("body","sentencia1","before");
$query = $this->db->like("title","sentencia2","both");
$query = $this->db->like("slug","sentencia3","after");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas LIKE body = '%sentencia1' AND title = '%sentencia2%' AND slug = 'sentencia3%'


Otros tipos de LIKE que podemos usar son:

    * $this->db->not_like();
    * $this->db->or_not_like();
    * $this->db->group_by();


GROUP BY

En otras versiones se conocia como $this->db->groupby(); pero ha sido eliminado.

Código: php [Seleccionar]

$query = $this->db->group_by("title");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas GROUP BY title


DISTINCT

Para añadir DISTINCT a la consulta:

Código: php [Seleccionar]

$query = $this->db->distinct();
$query = $this->db->get("entradas");

// Genera: SELECT DISTINCT * FROM entradas


HAVING

Código: php [Seleccionar]

$query = $this->db->having("uid = 32");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas HAVING uid = 32


También es posible usar $this->db->or_having();


ORDER BY

$this->db->order_by(); permite ordenar un resultado en una dirección especifica. En el primer parámetro especificamos el nombre de la columna y en el segundo la dirección. Las posibilidades del segundo parámetro son: ASC, DESC y RANDOM.

Código: php [Seleccionar]

$query = $this->db->order_by("id","DESC");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas ORDER BYid DESC


LIMIT

Permite especificar el limite de resultados que quieres que devuelva:

Código: php [Seleccionar]

$query = $this->db->limit(30);
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas LIMIT 10


COUNT ALL

Permite contar el numero de entradas que hay en una tabla:

Código: php [Seleccionar]

$num = $this->db->count_all("entradas");

// Genera: un numero que lo podemos tratar como una variable o escribirlo



COUNT ALL RESULTS

A diferencia de COUNT ALL, nos permite contar el numero de resultados en la actual consulta:

Código: php [Seleccionar]

$query = $this->db->where("name","Isern");
$query = $this->db->get("entradas");

$num = $this->db->count_all_results();

// Genera: un numero


INSERT

Para insertar datos usando el Active Record de CodeIgniter debemos usar un array luego insertar:

Código: php [Seleccionar]

$insert = array("title" => "Test",
"body" => "Test",
"name" => "Isern",
"surname" => "Palaus");

$this->db->insert("entradas",$insert);

// Genera: INSERT INTO entradas (title, body, name, surname) VALUES ('Test', 'Test', 'Isern', 'Palaus')



UPDATE

Al igual que INSERT usaremos un array para insertar, sin embargo si queremos actualizar, por ejemplo, una entrada deberemos especificar un where:

Código: php [Seleccionar]

$update = array("title" => "Test",
"body" => "Test",
"name" => "Isern",
"surname" => "Palaus");

$this->db->where("id","3");
$this->db->update("entradas",$update);

// Genera: UPDATE entradas SET title = 'Test', body = 'Test', name = 'Isern', surname = 'Palaus' WHERE id = 3


DELETE

Al igual que UPDATE usaremos un ID para especificar cual es la que queremos borrar:

Código: php [Seleccionar]

$this->db->where("id","3");
$this->db->delete("entradas");

// Genera: DELETE FROM entradas WHERE id = 3


Y esto es más o menos todo lo que nos ofrece CodeIgniter para tratar nuestras bases de datos. Espero que haya servido de ayuda a más de uno ya que muchas visitas recibidas buscaban como usar MySQL en CodeIgniter.


Saludos...

15
Framework - CodeIgniter / introduccion a codeigniter
« : febrero 22, 2010, 04:49:41 pm »
Mis estimados amigos, bienvenidos a esta primera parte de como usar el framework para PHP: CodeIgniter.

 En esta primera parte veremos cómo configurar CI y cómo usar su sistema de views, ademas de intentar conseguir una novia para Pley();.

CI es un framework orientado a objetos, aplicando el patrón de diseño Modelo Vista Controlador. Voy a dar como supuesto que todos manejan medianamente bien php y que, al igual que yo, jamas en su vida habían usado un framework. Empecemos descargando codeignaiter. Descomprimanlo y subanlo a su hosting favorito (localhost). Renombren la carpeta con el nombre del proyecto que en este caso y en honor a "Pley();" se llamara "quiero-novia" el cual sera un catalogo para una florería.

Tenemos la carpeta user_guide, system e index.php. La guía es la misma que se encuentra en su sitio oficial. El index es el mismo que se usara en este proyecto y en system está todo lo que hará funcionar el sistema, por tanto solo nos interesan los 2 últimos.

Por ultimo, creen una base de datos para el proyecto en MySQL llamada "garageflash".

Ya todo esto listo, ¡manos a la obra! la carpeta en la cual programaremos nuestra aplicación es justamente application, alojada en la carpeta system.



Empezaremos editando los archivos de configuración que necesitaremos para empezar a programar

database.php

Editaremos los datos para la conexión a nuestra DB favorita: garageflash en MySQL.

Código :
Código: php [Seleccionar]

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "garageflash";
$db['default']['password'] = "clab";
$db['default']['database'] = "garageflash";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";



No me detendré a explicar que significa cada variable, por que el nombre de cada una de ellas es muy descriptivo.

config.php

Designa la ruta en la que se encuentra alojada nuestra web entre otros datos

Código :

Código: php [Seleccionar]

$config['base_url']   = 'http://127.0.0.1/quiero-novia';
 
$config['index_page'] = 'index.php';
 
$config['uri_protocol']   = 'AUTO';
 
$config['url_suffix'] = '';
 
$config['language']   = 'spanish';
 
$config['charset'] = 'UTF-8';



Cuidado con la ruta que vayan a poner en $config['base_url'], si quieres salir a internet debiese ser tu IP publica o DNS.

routes.php

Código :

Código: php [Seleccionar]

$route['default_controller'] = 'floreria';
$route['scaffolding_trigger'] = "";


Acá nos detendremos en 2 detalles importantes

   1. El 'default_controller' se refiere a el controlador o pagina principal **cof cof clase cof cof ** en la cual programaremos nuestra aplicación, mas adelante ahondaremos en esto.
   2. 'scafolding_trigger' sirve para usar los mentados scafolding (administración pre-fabricada), pero como no me gusta usarlos por fundadas razones dejaremos esta opción en blanco ¿razones?:
         1. No se me da la gana.
         2. Son muy estáticas, difíciles de adaptar.
         3. Inseguras, dentro de el apartado adaptar me referías integrarlas a un sistema de usuarios.
         4. En el video tutorial (en ingles) muestran como usarlas, pero como a mi no me gustan.



Empezando a programar el proyecto

Recordarás que a 'default_controller' le asignamos 'floreria'. Así se llamara nuestra clase. Creamos el archivo 'floreria.php' en la carpeta
system/aplication/controllers, en el cual crearemos nuestra clase que obviamente heredara de la clase controladores.

Código :

Código: php [Seleccionar]

class Floreria extends Controller {
 
   function Floreria ()
   {
      parent::Controller();   
   }   
   function index()
   {
      $this->load->view('floreria');
   }
}



Dentro de esta clase está la función que siempre se llamara index. En esta clase pondremos todo lo que queremos que se muestre en la primera pantalla de nuestra clase. Si eres buen observador te darás cuenta que se esta llamando a la clase view, que es la que usaremos para manejar nuestros templates. Como primer paso, escribiremos el titulo y encabezado en nuestro template. Este código debe ir en un archivo nuevo en: system/aplication/views/floreria.php. Ese será nuestro template:

Código :

Código: php [Seleccionar]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Quiero Novia</title>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
   <h1>Flores Para Conseguir Novia</h1>
</body>
</html>



Grabamos y vemos el resultado en nuestro navegador.

Ahora nos toca enviar variables a nuestro template, para esto modificaremos nuestro template del siguiente modo:

Código :

Código: php [Seleccionar]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title><?php echo $titulo ?></title>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
   <h1><?php echo $encabezado ?></h1>
</body>
</html>


Y luego modificaremos nuestra función index() del siguiente modo para poder enviarle las variables requeridas:

Código :

Código: php [Seleccionar]

class Floreria extends Controller {
 
   function Floreria ()
   {
      parent::Controller();   
   }   
   function index()
   {
      $datos['titulo']='Quiero Novia';
      $datos['encabezado']='Una Novia para Pley';
      $this->load->view('floreria',$datos);
   }
}



A la función view, además del nombre del template, le entregamos un array donde sus vectores serán las variables que se usaran en dicho template. Mira el resultado en el navegador.

Para en un futuro aplicarle formato a esta cosa y mantener la misma estructura en todo el sitio, separaremos el template en 3 partes:

header

Código :

Código: php [Seleccionar]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title><?php echo $titulo ?></title>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>



contenido (en este caso floreria)

Código :

Código: php [Seleccionar]

<h1>
<?php echo $encabezado ?>
</h1>



foot

Código :

Código: php [Seleccionar]

</body>
</html>




Ahora nuestra función index() de la clase florería quedaría así:

Código :

Código: php [Seleccionar]

   function index()
   {
      $datos['titulo']='Quiero Novia';
      $datos['encabezado']='Una Novia para Pley';
      $this->load->view('header',$datos);
      $this->load->view('floreria',$datos);
      $this->load->view('foot);
   }



Ahora subiremos datos a nuestro sistema, para lo cual crearemos una segunda clase llamada 'admin' en la cual administraremos el sistema. En este paso voy a obviar el infaltable sistema de usuarios, para el cual pueden seguir esta serie de tutoriales que trata a profundidad el tema.

:D

Páginas: [1] 2
. . . . . . . .