Manual

[Manual-PHP] Creando un proyecto MVC con Framework Kohana PHP parte I

Hagamos un ejemplo muy bien explicado sobre cómo usar el Framework Kohana PHP con MVC usando ORM entre otras cosas, para que vean para que sirve y todo lo que pueden hacer con el

Ya sabemos cómo instalarlo ahora procedamos a trabajar.

Como ejemplo haremos una aplicación que liste productos, maneje altas y bajas de una tienda con un Front-End y un Back-End.

Para empezar necesitamos lo siguiente

*Requisitos

  • Apache (ModRewrite instalado)
  • PHP 5.2
  • MySQL
  • Kohana 3 Framework

*Opcionales

  • SQlFront
  • Phpmyadmin
  • Editor de código como Webuilder (Luego veremos cómo hacer casi lo mismo con Netbeans un IDE completo)

Haremos una nueva instalación de Kohana, en nuestra PC que será nuestro servidor (localhost) copiamos el contenido del framework a una carpeta que se llame tienda (en mi caso E:/www/tienda/)

Y acceso a mi website escribiendo http://localhost/tienda/  y ahí veremos nuestro install ahora navegamos hasta  E:/www/tienda/ y ahí estará ese archivo, lo borramos (si todo salió ok, si no corregir y verificar hasta que todo este en verde)

Esta vez vamos empezar por los datos para que al final hagamos el website.
Necesitamos una tabla de productos usaremos el siguiente SQL con los datos básicos de cada producto.

Como regla general hay que tener en cuenta que la base de datos debe de tener las siguientes características:

  • Nombre de la tabla en Plural (“productos”)
  • Nombre de los campos en Singular (“descripción”)
  • La clave principal se llamara id, en minúsculas (Se puede poner otra cosa pero habría que editar nuestra clase que manejara esa tabla por ello lo dejaremos como id)

CREATE TABLE `productos` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `nombre` varchar(255) DEFAULT NULL,
 `descripcion` text,
 `activo` int(1) DEFAULT '1',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Agregamos el siguiente contenido

INSERT INTO `productos` VALUES (1,'Agua Debian','Agua Embotellada 1 Lts Marca Debian',1);
INSERT INTO `productos` VALUES (2,'Refresco Php','Refresco 2 Lts Marca Php Sabor Uva',1);
INSERT INTO `productos` VALUES (3,'Paleta Ubuntu','Paleta Ubuntu sabor Cafe 1pza',1);

Ahora editaremos nuestro bootstrap   (E:/www/tienda/application/bootstrap.php)
Buscaremos el configuración del init y escribiremos los siguiente

<?php
//...
//...
Kohana::init(array(
 'base_url'   => 'http://localhost/tienda/',//Aqui le decimos cual será la url del proyecto
 'index_file' => FALSE, //                  //Le indicamos que usara urls amigables (sin .php)
));
...
...
//Buscaremos el Route en el mismo script y lo editaremos
..
...
Route::set('default', '(<controller>(/<action>(/<id>)))')
 ->defaults(array(
 'controller' => 'tienda',  //Nombre del controlador por default
 'action'     => 'index',   //Acción por default (lo dejamos en index)
 ));

Lo guardamos (:wq XD ) y vamos a ver que en la raíz del proyecto hay una archivo llamado example.htaccess lo renombramos a .htaccess que será el que manejara las urls amigables para no tener el tienda/index.php/controlador ser tienda/controlador.

Les recomiendo comentar la siguiente línea para no tener problemas en las direcciones

# Installation directory
#RewriteBase /kohana/ pueden poner /tienda y va a funcionar pero es mejor quitarla
# ya que con ello evitaremos problemas cuando estemos cambiando de un servidor local
# a un servidor de producción

Lo guardamos (:wq XD )  Y ahora vayamos a crear nuestro controlador.

Entramos a E:/www/tienda/application/classes/controller y creamos tienda.php
Y creamos nuestro controlador

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Tienda extends Controller {
/**
 * Controller_Tienda Es el controlador por default recuerden el bootstrap
 * todos los controladores llevan esta sintaxis, Controller_<Nombre_del_controlador>
 *
 *  action_index() Es la acción por default (ejemplo http://localhost/tienda/accion)
 *  si no se especifica en la url (ejemplo http://localhost/tienda/accion, se usara
 *  index por default y la sintaxis es action_<nombre_de_la_accion>
 */
 public function action_index()
 {
 echo "Programando ....";
 }

} // End Tienda

Lo guardamos (:wq XD ) y naveguemos a http://localhost/tienda/ veremos que dirá “Programando ….”, si no vemos eso es que algo hicimos mal y hay que volver a ver en donde nos fallo

Ahora bien, procederemos a conectar la base de datos, para ello vamos a editar el archivo de configuración de la base de datos E:/www/tienda/modules/database/config/database.php

Y agregaremos la conexión mysql, pueden usar PDO(pero prefiero hacerlo como ejemplo de forma tradicional)

<?php defined('SYSPATH') or die('No direct access allowed.');

return array
(
 'default' => array
 (
 'type'       => 'mysql',
 'connection' => array(
 /**
 * The following options are available for MySQL:
 *
 * string   hostname
 * string   username
 * string   password
 * boolean  persistent
 * string   database
 *
 * Ports and sockets may be appended to the hostname.
 */
 'hostname'   => 'localhost',  ////Usa los datos de tu conexión MYSQL
 'username'   => "root",       ////Usa los datos de tu conexión MYSQL
 'password'   => "localhost",  ////Usa los datos de tu conexión MYSQL
 'persistent' => FALSE,        ////Opcional
 'database'   => 'kh_tienda',  ////Usa los datos de tu conexión MYSQL
 ),
 'table_prefix' => '',
 'charset'      => 'utf8',
 'caching'      => FALSE,
 'profiling'    => TRUE,
 ),
 //Aquí continúa con el PDO, ese de momento no hay que tocarlo
 //..
 //....
 //......
)

Ahora que ya lo tenemos vamos a decirle a kohana que agregue los módulos de base de datos y orm, necesarios para que funcione nuestro ejemplo, para ello hay que editar otra vez nuestro archivo bootstrap ya descomentar los módulos de manera que quede así.

Leer más

[Tutorial] Creando Virtual Host de Apache usando Linux

Hasta hoy creo que voy a escribir algo util, pero pues y saben que mi tiempo es poco y hay que aprovecharlo al máximo.

Bueno la idea de este post es platicarles sobre como se pueden crear los famosos virtualhosts.Pero antes de empezar enterémonos bien que es un virtualhost.

Con los virtualhosts podremos tener varios dominios apuntando a una misma pc. Dentro de cada virtualhost podremos definir las condiciones para cada dominio que esté representando.

Es como si tuviéramos varios dominios dentro de nuestro servidor osea 127.0.0.1.

Es decir que aparte de usar http://localhost, podríamos usar http://localweb, http://proyecto, http://www.beta.com o el nombre que mas nos guste, para ello lo primero que necesitamos es tener instalado apache2 (la ultima versión) y funcionando.

Ahora veamos como crear y usar los virtualhost(Es necesario tener permisos de root para algunos cambios)

Entraremos  a nuestra consola y nos moveremos a   cd /etc/apache2/sites-available/

ajaxman@debianJS:~$ su
Contraseña:
debianJS:/home/ajaxman# cd /etc/apache2/sites-available/
debianJS:/etc/apache2/sites-available#

Una vez ahí veremos que hay un archivo llamado default (en mi caso hay dos el otro se llama default-ssl es digamos que la “plantilla” de los sitio con ssl)

debianJS:/etc/apache2/sites-available# ls -la
total 24
drwxr-xr-x 2 root root 4096 abr 14 16:37 .
drwxr-xr-x 7 root root 4096 nov  6 16:46 ..
-rw-r–r– 1 root root 1428 nov  6 17:44 default
-rw-r–r– 1 root root 7366 oct  1  2008 default-ssl

El archivo default es el que contiene la información que usaremos en los virtualHost por lo cual simplemente copiaremos todo el archivo en uno nuevo eso lo hacemos mediante el comando cat.

debianJS:/etc/apache2/sites-available# cat default> website

Ahora nuestro ls se vera asi

debianJS:/etc/apache2/sites-available# ls -la
total 24
drwxr-xr-x 2 root root 4096 abr 14 16:37 .
drwxr-xr-x 7 root root 4096 nov  6 16:46 ..
-rw-r–r– 1 root root 1428 nov  6 17:44 default
-rw-r–r– 1 root root 7366 oct  1  2008 default-ssl
-rw-r–r– 1 root root 1480 abr 14 16:35 website

Ahora lo abrimos y lo editamos con el Vi y lo unico que modificaremos sera lo siguiente.

debianJS:/etc/apache2/sites-available# vim website

< VirtualHost *:80 >
ServerAdmin webmaster@localhost

DocumentRoot /home/www/
< Directory / >
Options FollowSymLinks
AllowOverride None
< /Directory >
< Directory /home/www/ >
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
< / Directory >
………
……………
…………….
< VirtualHost >

Por esto

< VirtualHost *:80 >
ServerAdmin webmaster@ajaxman.net
ServerName prog
ServerAlias www.website.net

DocumentRoot /home/www/prog
< Directory / >
Options FollowSymLinks
AllowOverride None
< /Directory >
< Directory /home/www/prog >
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
< / Directory >
………
……………
…………….
< VirtualHost >

Nota: Tiene espacios intencionales para evitar que wordpress lo tome como si fueran tags HTML

Lo que cambiamos fue

  • Agregamos Server Name, que es donde estará el nombre de nuestro servidor en este caso se llama prog
  • Le agregamos un ServerAlias, que es como otro nombre para acceder a este VirtualHost, en este caso es www.website.net.
  • Y le modificamos el DocumentRoot, el cual sera la carpeta del sitio que queremos Virtualizar

Los guardamos con [Esc]:wq

Ahora lo agregamos a apache

debianJS:/etc/apache2/sites-available# a2ensite website

Y apache nos dira que lo agrego con éxito, Ojo: para evitar que Apache nos de errores, es necesario que la carpeta que el indicamos en DocumentRoot exista, si no no nos va a funcionar.

a2ensite, lo único que hace es un enlace simbólico dentro de la carpeta /etc/apache2/sites-enabled a algunos de los sitios que están en la otra carpeta /etc/apache2/sites-available , es decir  en sites-available están los sitios disponibles, y en sites-enabled están  los que podemos usar.

Leer más

[Php] Descarga y manual de Cake PHP 1.2

Haber si continuamos con el blog y para empezar a romper el hielo les platico esta entrada publicada en el blog de carlos leopoldo.

Se trata de el aviso que CakePHP 1.2 ha sido liberado y tal como comenta, este sistema se trata de un framework, con el cual podemos hacer maravillas sin tener que rompernos la cabeza con php.

CakePHP

CakePHP

Esta claro que para poder usarlo es necesario tener conocimientos en Php, html, Javascript, Css entre otros, pero solo nos centraremos en usar los componentes que estáne ya programados y listos para ello, por ejemplo con este framework podemos crear todo un sistema de publicación para un blog, claro que sin la potencia de Wordpres :-) pero es solo un ejemplo.

Lo interesante también es que hay un manual completamente en español, y esta muy fácil de seguir, yo personalmente no le he dado oportunidad a este framework(ni a smarty), por que siento el que código manual es mejor y muy potente, pero por si alguno de ustedes le interesa, aquí les dejo los datos de dicho framework.

Descarga de CakePHP 1.2 Aqui
Manual en español Aqui.
Pagina oficial CakePHP.

Via | Manual de CakePHP 1.2 y descarga versión final

Leer más

[Php] Cargando clases en Php 5 !!sin dolores de cabeza!!

Hasta hoy creo que voy a escribir algo sobre Php, una categoría que tenia algo de olvidada por este blog, y se trata de algo muy simple digamos que es un tip, es una forma de cargar clases en Php 5 sin hacer un relajo.

Les cuento a que viene el caso o la situación, estoy creando una clase en Php, para manejar unas cosas, sin embargo son 3 cosas diferentes, vamos, tendré que usar 3 clases diferentes, ya que se trata de cosas distintas, ahora bien, para usar una clase el php se haría de la siguiente forma.

< ?php
include ("clases/calcula.inc.php");
$calcula=new Calcula();
?>

El problema surge cuando deseamos utilizar varias clases, las cuales a veces por facilidad y por costumbre las almacenamos en archivos diferentes, el ejemplo se vería mas o menos de esta forma

< ?php
include ("clases/cacula.inc.php");
include ("clases/suma.inc.php");
include ("clases/resta.inc.php");
include ("clases/raiz.inc.php");
$calc=new Calcula();

$sum=new Suma();

$rest=new Resta();
?>

Esto DESAFORTUNADAMENTE se tendrá que hacer si tenemos php 4 en nuestro server, ya que si tenemos Php 5 podemos usar autoload, una función nativa de php5, como lo indica la documentacion de Php.

Puede definir una función __autoload la cual es llamada automáticamente en caso de que intente usar una clase que no ha sido definida aún. Al llamar esta función la ejecución del script da una última oportunidad de cargar la clase antes de que PHP falle con un error.

Aqui les pongo un ejemplo de como quedaría nuestro código anterior

< ?php

function __autoload($nombre_de_clase) {
require_once $nombre_de_clase . '.php';
}

$calc=new Calcula();

$sum=new Suma();

............
?>

Como vemos es muy simple, espero que les ayude, ya que a mi no me ayudara mucho, por que en uno de los servers donde haré esto usa php 4 :-( pues ya que, si a ti te sirvió coméntanos, como la usaste.

Mas información | Auto carga de Objetos

Leer más

[Manual] Usando el crontab en Linux

Bueno hoy es viernes y no hay que hacer nada ¿no creen?, ojala y así fuera pero hay bastante chamba, bueno regular, pero veamos un poco sobre como usar el famoso crontab que a veces me ha costado trabajo, bueno aquí les pondré un pequeño manual espero que les sea de utilidad, cualquier pregunta no duden, para eso están los comentarios.

terminal

Terminal

El crontab, es un archivo en donde podemos configurar tareas para que se ejecuten automáticamente en nuestro sistema, digamos por ejemplo descargar un archivo de respaldo diariamente,  o borrar ciertos archivos periódicamente, ejecutar un script que haga algo, etc, digamos que podemos automatizar las tareas, para no estar haciéndolas a mano.

Para poder ejecutar el crontab, regularmente no es necesario hacer nada, mas que ejecutar cierto comando y ya estará funcionando, en la mayoría de distribuciones que he probado (ubuntu,open suse, debian, gentoo)regularmente esta por default, de todos modos si surgen dudas están los comentarios.

También debemos de revisar que para poder ejecutarlo nuestro nombre de usuario debe de aparecer en /usr/lib/cron/cron.allow, o en dado caso que no aparezcamos dentro de la lista /usr/lib/cron/cron.deny.

Si sólo existe cron.deny  y está vacío, todos los usuarios pueden utilizar crontab. Si no el archivo existe, sólo el usuario root puede usar crontab. El permitir / denegar archivos constan de el nombre de usuario en cada línea.
Lo anterior no lo pude localizar correctamente en Open suse, de todos modos, utilicen en este caso acceso como root y se evitaran problemas.
Ahora para poder trabajar con el cron vamos a ver como podemos configurarlo o modificarlo.
Podemos usar linux-g5yh:/home # export EDITOR = vi para especificar un editor por default para editar el archivo del crontab, pueden usar pico, nano, etc, pero a mi me gusta mas el Vim o Vi
Ahora usaremos los siguiente comandos dependiendo de lo que deseemos hacer
linux-g5yh:/home #crontab-e Con este comando podremos editar nuestro archivo crontab, si no existe dicho archivo se crea.
linux-g5yh:/home #crontab-l Muestra el contenido del archivo crontab.
linux-g5yh:/home #crontab-r Eliminar el archivo crontab(ejecutar esta instrucción con cuidado).
linux-g5yh:/home #crontab-v Muestra la última vez que editó su archivo crontab. (Esta opción sólo está disponible en algunos sistemas.)
Ahora que ya sabemos como configurar el archivo del crontab, ahora veamos como podemos agregar tareas, a dicho archivo.
———————————————————————————————————————–

*     *   *   *    *  comando_a_ejecutar
-     -    -    -    -
|     |     |     |     |
|     |     |     |     +—– dia de la semana (0 – 6) (Domingo=0)
|     |     |     +——- mes(1 – 12)
|     |     +——— dia del mes (1 – 31)
|     +———– hora (0 – 23)
+————- minuto (0 – 59)

——————————————————————————————————————-

Bajo el anterior criterio vamos a poner un cron job que se ejecute a las 10 de la noche, el cual solo reinicia el apache server

linux-g5yh:/home #crontab-e

* 10,20  *  *  * /etc/init.d/apache2 restart

:wq  //guardamos el archivo en el vi

linux-g5yh:/home #

Ahora un ejemplo un poco mas difícil,  bajar un respaldo a las 2:20 am y a las 2:20 pm, bajar un segundo respaldo 25 minutos después, ejecutar el script de los respaldos cada 30 minutos los viernes.

Leer más

[Manual] Instalando Firefox 3 en Debian Etch 4

Como saben estoy desde hace unos días en mi Debian, y las verdad no podía estar mas contento, apenas lo estoy puliendo y me han salido muchos detalles, los cuales poco a poco voy resolviendo.

Como saben(si no pues ya se enteraron), hace tiempo hubo diferencias entre la comunidad de desarrollo de Debian y la fundacion Mozilla, por lo cual en Debian no viene incluido Firefox, bueno en si lo que no viene es ese producto pero, lo que si viene es un navegador igualito a Firefox, se llama Iceweasel, vamos lo único que cambia es la imagen, y el nombre, además de que al ser una versión distinta, se tardan tiempo en sacar nuevas versiones.

El caso es que es Firefox pero un poco atrasado(iceweasel=Firefox 2), y como yo quería disfrutar de lo nuevo el Firefox 3, pues me encontré con ese problema, ya que ni esta en los repositorios del apt.

Pero como yo se que en linux todo es posible, pues busque si había una forma de hacerlo ya que Firefox 3 esta disponible en formato tar.bz2 desde la pagina de Mozilla.

Entonces me dispuse a buscar como instalarlo, y pues después de mucho buscar encontré la solución, la cual pongo a continuación.

  1. Primero necesitamos tener instalado alien, este paquete nos permitirá pasar algunos(ojo no todos) paquetes rmp a paquetes .deb y de esta forma instalarlos en debian.
  2. Necesitaremos instalar un paquete que es el gtk+-2.10, el cual no esta disponible de manera estable para Debian por lo cual lo deberemos bajar en rpm.
  3. Para bajar el rpm lo podemos hacer desde aquí gtk+-2.10.14-1ark.i586.rpm, o aquí gtk+-2.10.14-1ark.i586.rpm o aquí gtk+-2.10.14-1ark.i586.rpm , también cabe mencionar que tiene que ser cualquier rpm siempre y cuando su versión se superior a gtk 2.8 que es el problema que surge cuando se intenta instalar Firefox
  4. Ahora lo que haremos sera convertir el rpm en .deb, para hacerlo solo hay que abrir la consola(todo lo hice desde root) y teclear el siguiente comando debianj:/home/javier# alien gtk+-2.10.14-1ark.i586.rpm
  5. Si todo ha ido bien(si no comente en el post para ver posible errores), creamos un directorio donde guardaremos el gtk debianj:/home/javier# mkdir gtk21
  6. Ahora descomprimimos el contenido(no se instala el .deb) en al carpeta que creamos mediante el comando debianj:/home/javier# dpkg -x gtk+_2.10.14-2_i386.deb gtk210/
  7. Ahora nos bajamos el Firefox 3 y lo descomprimimos en alguna carpeta Firefox se descarga desde aquí y ahí nos aparecerá la descarga para Linux, no es necesario hacer nada extra, y descomprimimos el archivo.
  8. Creamos un script en bash para poder ejecutar gtk antes de lanzar firefox,Ojo deben de cambiar los paths dependiendo de donde hayamos puesto el Firefox y gtk, la ultima linea es donde tenemos el ejecutable de firefox

    #!/bin/bash
    export LD_LIBRARY_PATH="/home/javier/gtk210/usr/lib"
    /home/javier/firefox/firefox $*

  9. El script anterior, puede ser creado de la siguiente forma
    1. Abrimos la consola
    2. creamos el archivo debianj:/home/javier# touch firefoxexec, (yo use el nombre de firefoxexec ustedes pueden usar otro)
    3. lo editamos debianj:/home/javier# vim firefoxexec, osea le agregamos el código y lo guardamos
    4. Y le damos permisos de ejecución debianj:/home/javier# chmod +x firefoxexec
    5. Listo ya tenemos el script
  10. Y con esto ya tenemos Firefox 3 en nuestro Debien Etch, ahora para poder ejecutarlo lo haremos de la siguiente forma
    1. ejecutamos debianj:/home/javier# ./firefoxexec
    2. Y listo
  11. Para que no tengan que estar ejecutando esto cada vez que inician debian, lo podemos configurar de la siguiente forma.

Leer más

[WordPress] Include: Incluyendo archivos en nuestro blog

Bueno, es domingo, y como vieron anteriormente, modifique la seccion de agregar a los RSS, y la seccion que tengo con Linklift, esto yo simplemente queria agregarle una tablita o unos divs para que lograra hacer los cambios y ademas de copiar cun poco de codigo.

Hasta ahi todo hiba bien, sin embargo, no resulto como yo queria, y cuando hice el cambio de el diseño de los formularios y el enlace a los feeds, no quedo muy bien , por culpa de internet Explorer.

Y lo tuve que cambiar rapidamente, y pense, ¿como hacer para que los cambios que yo haga se vean bien y los agrege sin tener que estar haciendo mucho trabajo y esfuerzo?, la respuesta fue sencilla.

Usar la funcion include, de php, veamos de que se trata esta función,

La sentencia include() incluye y evalúa el archivo especificado

y se usa de la siguiente forma.

Contenido del archivo vars.php

$color = 'verde';
$fruta = 'manzana';

Contenido del archivo test.php que usa la funcion include


echo "una $fruta $color "; // una
include 'vars.php'; //aqui hacemos el include del archivo

echo "una $fruta $color"; // una manzana verde

Como vemos es bastante facil, sin embargo, usando wordpress, es muy distinto por una sencilla razon: el PATH(ruta).

Con esto me refiero a que si usamos simplemente la funcion include, php hara lo siguiente.

Buscara el archivo que le hemos indicado, en la misma carpeta donde esta el archivo donde usaremos la funcion include, y posteriormente pasara, a buscarlo en la ruta indicada en el archivo de configuracion php.ini.

Entonces si tenemos nuestro archivo index.php, de wordpress.

www.misitio.com/wp-admin/wp-content/themes/mitema_de_miblog/index.php

Sin embargo al usar la funcion include sin especificar la ruta completa, en realidad estara incluyendo al archivo siguiente.

usando

.
...
include("archivo_a_incluir.php");
...
.

www.misitio.com/archivo_a_incluir.php

Esto sucede por la estructura y el manejo de ficheros de wordpress, para solucionar esto, haremos uso de la siguiente constante de WORDPRESS para PHP.

TEMPLATEPATH, la cual nos indica cual es el path o la ruta real de nuestro template, entoces.

Leer más

Historico de entradas

febrero 2012
L M X J V S D
« ene    
 12345
6789101112
13141516171819
20212223242526
272829  

Ajaxman

Mi nombre es Javier, soy desarrollador web con especialización en PHP (avanzado), HTML, CSS y Javascript(Medio).

Me considero evangelizador de Kohana Framework, Mozilla Firefox y GNU/Linux Debian.

Estoy casado, y tengo dos hermosos hijos.

Todos los contenidos a menos que se exprese lo contrario estan bajo licencia Creative Commons.

Enlazanos!!

hit counters online counter