Pues este cms, es unico ya que viene integrado con jquery, tiene muchas animaciones, cada articulo puede tener su imagen en miniatura, miren el demo.

Este proyecto es de codigo abierto. Y en las proximas versiones le van a ir agregando mas cosas, como un sistema de usuarios, y mas.

Para agregar un plugin, es igual se tiene que seguir las convenciones del Zend Framework, y otras convenciones que tiene el CMS.

Les dejo el link.

Pues si, hace un tiempo buscando un buen framework para PHP encontre DooPHP, es super rapido, ya que al ejecutar una aplicación solo carga lo que es necesario.

Es facil utilizar, aunque por ahora no tenga tanta documentacion, hay un foro donde te dan ayuda.

Miren la gran diferencia que marca en cuanto a la rapidez frenta a CakePHP, Zend Framework, Code Igniter…

Para las vistas, se puede utilizar el lenguaje tipo {smarty} (con el cual no simpatiso) o php, el cual recomiendo ya que la aplicacion sera mas rapida.

Les dejo el link de DooPHP

Seguramente desean forzar las descargas de archivos como por ejemplo las imagenes, los archivos mp3, o algunos formatos de archivos de video. Ya que el navegador por defecto lo abre o lo muestra, pero y nosotros queremos que le aparesca un cuadro de dialogo de descarga.

Aquí les dejo el codigo:

1
2
3
4
5
6
7
8
<?php
    //filename: dowload.php
    $f = $_GET["f"];
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$f\"\n");
    $fp=fopen("$f", "r");
    fpassthru($fp);
?>

Por ejemplo funcionaria asi: http://www.domain.com/download.php?f=image.jpg

En esta ocasión te presento un generador de codigo para el framework CakePHP, se llama Atlas CakePhp, es muy util ya que puedes generar el codigo para tu aplicación de manera visual, tiene estas caracteristicas:

Generar modelos, vistas, controladores, y codigo internacionalizable. [...]

[Solo tenemos que] seleccionar la tabla y el resto del trabajo es facil con los controladores, modelos y vistas. Usted también puede relacionar tablas y también seleccionar otro tipo de campos.

Asi es, para iniciar la creacion de un proyecto web, necesitamos haber creado una base de datos, siguiendo las especificaciones de cakephp, despues agregamos una configuración en Atlas, y creamos un proyecto, al crear el proyecto se crearan los archivos necesarios para nuestra aplicación, luego creamos los modelos, relacionamos con otras tablas si es necesario; despues crear los controladores y las vistas.

Sin duda esta aplicación nos ayuda mucho y ahorra tiempo en la creación de proyectos CakePHP, especialmente a los desarrolladores web que utilizan el framework CakePHP, Atlas es una alternativa al bake que trae cakephp, el bake funciona en lineas de comandos.

Link de descarga: Atlas

Este script es muy bueno para poder parsear codigo html, de manera simple y sencilla, por ejemplo, podemos obtener todos los atributos, propiedades de los tags de html.

Unos ejemplos sencillos:

1
2
3
4
5
6
7
8
9
10
// Creando un DOM desde una URL o un archivo
$html = file_get_html('http://www.google.com/');

// Buscar todas las imagenes
foreach($html->find('img') as $element)
       echo $element->src . '<br>';

// Buscar todos los links
foreach($html->find('a') as $element)
       echo $element->href . '<br>';
1
2
3
4
5
// Buscar todos los <div> con el atributo id
$ret = $html->find('div[id]');

// Buscar todos los <div> con el atributo id=foo
$ret = $html->find('div[id=foo]');
1
2
3
4
// Ejemplo de como examinar el arbol DOM
echo $html->find("#div1", 0)->children(1)->children(1)->children(2)->id;
// otro ejemplo
echo $html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id');

Descargar aquí.

Hace un tiempo conoci a USB Webserver, es un programa que agrupa a Apache Web Server, Mysql, PHP, y lo mejor de este programa es que no necesita instalación, por lo que podemos llevarnos estos archivos en nuestra memoria usb, y ejecutarlos en cualquier PC con windows.

Como ellos mismos se describen:

Usb Webserver en breve
USB Webserver es un paquete de Apache, MySQL, PHP, phpMyAdmin Mini Relay y que permite la ejecución de un servidor Web desde una memoria USB.
USB Webserver es independiente y no deja nada en el equipo, por lo que es ideal para estudiantes, programadores de PHP, los principiantes y las empresas.
El programa es gratuito para todo el mundo y muy fácil de usar. [...] todo es tan flexible como una instalación independiente de estos paquetes.

Link: http://www.usbwebserver.com/download.php

Seguramente al programar has tenido la necesidad de quitar los caracteres especiales de una cadena, quizas para guardar un nombre de usuario, o generar una url amigable libre de esos caracteres que a veces hace que el servidor muestre errores como acceso prohibido o archivo no encontrado.

Este codigo devuelve una cadena con solo los caracteres de A-Z, a-z, 0-9.

1
2
$cadena_original="Esto es un texto &(&%()/|";
$cadena = ereg_replace("[^A-Za-z0-9]", "", $cadena_original);

Si has tenido problemas en instalar el Apache server, o quieres ejecutar PHP con Sun WebServer (SJSWS) bajo Windows Vista, aqui esta el tutorial.

Primeramente descargamos el SJSWS en aqui, hay muchos archivos pero el servidor en si se llama asi ‘Web Server 7.0 Update 8‘, si hay version mas reciente descargate esa. Y lo instalamos, durante la instalacion llegaras a un paso donde te pide que introduzcas un nombre de usuario y una contraseña, esto es necesario para cuando desees administrar tu servidor.

Ahora descargaremos el modulo de PHP para SJSWS, esta en la misma pagina del SJSWS, se llama Web Server 7.0 PHP Add-On 1.0. Ahora descomprimimos el paquete, se creara una carpeta llamada PHP, ahora copiamos la carpeta PHP a C:\Program Files\Sun\WebServer7\plugins .

Esta listo para instalar el modulo PHP en el SJSWS. Vamos iniciar el SJSWS, en el menu Inicio -> Todos los programas -> Sun Microsystems -> WebServer 7 .0 -> Iniciar servidor de administracion, click derecho, Ejecutar como administrador. Asi se estara iniciando nuestro servidor. Dirijamonos a https://127.0.0.1:8989/, introducimos los datos de administrador que proporcionamos al instalar el programa.

Ahora estamos en portal de administrador del Servidor, ahora queremos saber el nombre de la instancia, por defecto es “https-” mas el nombre del servidor, el nombre del Servidor esta arriba al lado izquierdo, en mi caso el nombre de mi instancia seria asi “https-nabelcc1″.

Ahora ejecutar el script de configuracion del modulo PHP, para ello vamos abrir como administrador el “cmd” de windows, y tecleamos esto:

cd “C:\Program Files\Sun\WebServer7\plugins\php”

Nos conducira al directorio de PHP, aqui ejecutaremos este codigo, reemplaze <web server instance name> por el nombre de su instancia

setupPHP.bat -instancename=<web server instance name>

En mi caso es asi: setupPHP.bat -instancename=https-nabelcc1 , listo ahora reiciamos el Web Server, para que se apliquen estos cambios.

Ahora create un archivo llamado info.php con este codigo:

<?php phpinfo(); ?>

Y ponlo en C:\Program Files\Sun\WebServer7\<nombre de tu instancia>\docs, ahora vayamos a la consola de administracion del Web Server, para iniciar esa instancia y poder provar el info.php, debajo de “Tareas de configuración” hay varias opciones una de ellas es “Iniciar/detener instancias”, entramos a ella. Seleccionamos la instancia, y de los botones de arriba elegimos “Iniciar”.

Listo a provar, entra a http://127.0.0.1:81/info.php, el numero 81 indica el numero del puerto donde se ejecuta la instancia, estas opciones pueden ser modificadas desde la consola de administracion de SJSWS.

En este tutorial muy completo vamos a implementar un script para paginar los resultados de una base de datos.

Primeramente, vamos a crear una base de datos y ejecutaremos este SQL, que creara una tabla llamada ‘articles‘ y le agregara algunos registros.

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE IF NOT EXISTS `articles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titulo` varchar(255) DEFAULT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

INSERT INTO `articles` (`id`, `titulo`) VALUES
(1, 'Articulo 1'),(2, 'Articulo 2'),(3, 'Articulo 3'),(4, 'Articulo 4'),
(5, 'Articulo 5'),(6, 'Articulo 6'),(7, 'Articulo 7'),(8, 'Articulo 8'),
(9, 'Articulo 9'),(10, 'Articulo 10'),(11, 'Articulo 11'),(12, 'Articulo 12'),
(13, 'Articulo 13');

Segundo, crea un archivo llamado ‘explorador.php‘ con este contenido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<?php
/* Creado por nabelcc@gmail.com
 * www.abelino.com
 */

$page=(isset($_REQUEST['page']))?$_REQUEST['page']:1;
$maxrows=3;//numero de registros por pagina
$start=(($page-1)*$maxrows);

/* conexion a la base de datos */
mysql_connect('localhost', 'username', 'password');
mysql_select_db('nombre_db');

$results=mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM `articles` LIMIT $start,$maxrows ");
//SQL_CALC_FOUND_ROWS es para que mysql cuente todos los resultados encontrados
$rtotal=mysql_query("SELECT FOUND_ROWS()");
if($rtotal=(mysql_fetch_array($rtotal))) {
    $found_rows=$rtotal[0];//numero total de rows encontrados
    $num_rows=mysql_num_rows($results);//numero de rows encontrados solo en esta pagina
}

/* GENERANDO las variables para paginar */
$pagvars=array();
if(isset($found_rows)&&$found_rows>0) {
   
    $pagvars['total']=$found_rows;
    $pagvars['page']=$page;
    $pagvars['xpage']=$maxrows;
    $pagvars['limit']=6;//numero maximo de links a paginas a mostrar en la pagination
    $pagvars['startindex']=$start;
    $pagvars['model']='explorador.php?page=<-p-a-g-e->';
}

/* MOSTRANDO LOS RESULTADOS */

echo '<table width="500" border="1">
        <tr>
            <th>
                <b>id</b>
            </th>
            <th>
                <b>Titulo</b>
            </th>
        </tr>'
;

while($article=mysql_fetch_assoc($results)){
    echo "<tr>
            <td>{$article['id']}
            </td>
            <td>{$article['titulo']}
            </td>
          </tr>"
;
}

 /*  MOSTRANDO LA PAGINATION */
if (isset($pagvars)) {
    echo "<tr><td colspan='2'>";

    $pagination =my_pagination($pagvars);
    //print_r($pagination);
    ?>
<link type="text/css" rel="Stylesheet" href="paginacion.css"/>
<div class="pag">
    <div class="pagLftNav">
        <span>
                <?php if(isset($pagination['back'])) { ?>
            <a class="arrowLft" href="<?php echo $pagination['back']['href']; ?>"> Atras</a>
                <?php }else { ?>
            <a class="disabled arrowLft"> Atras</a>
                <?php } ?>
        </span>
    </div>
    <div class="pagRitNav">
        <span>
                <?php if(isset($pagination['next'])) { ?>
            <a class=" arrowRit" href="<?php echo $pagination['next']['href']; ?>"> Siguiente</a>
                <?php }else { ?>
            <a class="disabled arrowRit"> Siguiente</a>
                <?php } ?>
        </span>
    </div>
    <div class="pagNums">Pagina:
            <?php
            foreach($pagination['pages'] as $item) {
                if($pagvars['page']==$item['page']) {
                    ?>
        <span><a class="disabled"><?php echo $item['page']; ?></a></span>
                <?php }else { ?>
        <span><a href="<?php echo $item['href']; ?>"><?php echo $item['page']; ?></a></span>
                <?php
                }
            }
            ?>
    </div>
</div>
<?php
    echo "</td></tr>";
}

echo "</table>";
?>


<?php
function my_pagination($vars){
    $page=$vars['page'];//pagina actual
    $totalitems=$vars['total'];//toral resultados
    $xpage=$vars['xpage'];//
    $model=$vars['model'];
    $limit=$vars['limit'];
    $pagination=array();//items;back;next
    $start=null;$end=null;
    $totalpages=intval($totalitems/$xpage);
    if(($totalitems%$xpage)>0){$totalpages++;}
    $medio=intval($limit/2);
    if(($limit%2)>0){$medio++;}
    if($totalpages<=$limit){
        $start=1;$end=$totalpages;
    } else if($totalpages-$page<=$medio){
        $end=$totalpages;$start=$totalpages-$limit+1;
    }else if($page<=$medio){
        $start=1;$end=$start+$limit-1;
    }else{
        $start=$page-$medio+1;$end=$start+$limit-1;
    }
    $items=array();
    for($i=$start;$i<=$end;$i++){
        $item[]=array();
        $item['href']=str_ireplace('<-p-a-g-e->',$i, $model);
        $item['page']=$i;
        $items[]=$item;
    }
    $pagination['pages']=$items;
    if($page>1){
        $item[]=array();
        $item['href']=str_ireplace('<-p-a-g-e->',$page-1, $model);
        $item['page']=$page-1;
        $pagination['back']=$item;
    }
    if($totalpages-$page>0){
        $item[]=array();
        $item['href']=str_ireplace('<-p-a-g-e->',$page+1, $model);
        $item['page']=$page+1;
        $pagination['next']=$item;
    }
    return $pagination;
}
?>

Ahora pasare a explicar este codigo ya que es importante:

  1. En la linea 6, se encuentra a la variable $maxrows, que indica el numero de registros a mostrar por pagina.
  2. En las lineas 10 y 11, puedes configurar la conexion a la base de datos.
  3. En las lineas 22 al 31, se prepara la variable $pagvars para pasarle a la funcion my_pagination($pagvars). El parametro $pagvars['limit'], indica el numero maximo de enlaces o paginas a mostrar en la paginacion. El parametro $pagvars['model'], contiene el modelo de la url que se va usar en la pagination, ‘<-p-a-g-e->‘ sera reemplazado por un numero de pagina correspondiente.
  4. En las lineas 35 al 52 se muestra los registros encontrados en html.
  5. En la linea 58, se llama a la funcion my_pagination($pagvars), cuya funcion es generar un array con una url asignada a cada pagina.
  6. Desde las lineas 61 al 94 se muestra la pagination en html.

Tercero, crear un archivo ‘paginacion.css’ con el siguiente contenido, que contiene los estilos css para esta aplicacion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/* Pagination by abelino.com
----------------------------- */


.pag {
    padding: 6px 0;
    background: #CFF7FF;
    font-size:12px;
}
.pag span {
    padding-left: 7px;
}
.pag .pagLftNav,
.pag .pagRitNav {
    float: left;
    width: 12%;
}
.pag .pagRitNav{
    float: right;
    text-align: right;
    padding: 0;
}
.pag .pagRitNav a{
    margin-right: 7px;
}
.pag .pagRitNav a,
.pag .pagLftNav a {
    color: #003D7B;
    font-weight:bold;
}
.pag .pagNums{
    text-align: center;
}
.pag .pagNums span {
    padding: 0 3px;
}
.pag .pagNums span a {
    background: #fff;
    padding: 1px 4px;
    color: #045CB6 !important;
    border: 1px solid #ccc;
}
.pag .pagNums span a.disabled {
    background: #666;
    color: #fff !important;
}
.pag .pagNums span a.showAll {
    background: none;
    color: #045CB6 !important;
    padding: 0;
    border: none;
}
/* style para tablas */
th{
    background-color:#CFCFCF;
}

Ahora desde tu navegador entra a “/explorador.php”, se listara los articulos de 3 en 3, y en la parte de inferios estara una paginación.
Espero que este tutorial haya sido provechoso para usted.

cake-logoSeguramente, ha escuchado de Struts o JavaServer Faces, son framework que usan el patron MVC (Modelo Vista Controlador) para aplicaciones java; para el desarrollo de aplicaciones PHP tambien existen framework, uno de ellos es CakePHP.

¿Por que es importante usar un framework?, un framework es una estructura de soporte definida, mediante la cual otro proyecto de software puede ser organizado y desarrollado. Hacen las cosas mas rapidas a un desarrollador, ya no es necesario preocuparse crear algun archivo config.php, o en crear codigo para validar formularios, o ejecutar sentencias SQL para añadir, eliminar, listar, etc datos de una base de datos…

CakePHP tiene caracteristicas destacables, por ejemplo:

  • Es compatible con PHP4 y PHP5
  • CRUD de la base de datos integrado.
  • URLs amigables
  • Sistema de plantillas rápido y flexible
  • Trabaja en cualquier subdirectorio del sitio
  • Validación integrada
  • Componentes de seguridad y sesión
  • Bake, Ayuda a generar codigo por medio de consola a partir de una base de datos.

Documentacion de CakePHP

Descargar CakePHP