PHP, CodeIgniter y jQuery
Entradas etiquetadas con framework
CodeIgniter: mod_rewrite
30 Mar
Uno de los principales inconvenientes de CodeIgniter es, en parte, visual en la dirección URL. Solemos tener nuestros programas con http://localhost/index.php/controlador/funcion y seguramente quedaría mucho mejor algo tipo: http://localhost/controlador/funcion, ¿verdad? Pues bien, para hacer esto necesitaremos usar Apache y el modulo mod_rewrite.
Para empezar será necesario saber si estamos usando mod_rewrite en Apache. Lo más fácil es, directamente, ir al archivo de configuración (el archivo http.conf) y buscar: mod_rewrite.so. Deberíamos encontrar la siguiente línea:
[code]LoadModule rewrite_module modules/mod_rewrite.so[/code]
Sin embargo, si esta contiene un símbolo de almohadilla (#) es que no esta activado. Si lo contiene al principio, lo borramos, guardamos y reiniciamos el servidor. Así, mod_rewrite se iniciará cada vez al iniciar Apache.
Ahora es el momento de crear nuestro archivo de configuración especifico en el directorio donde este nuestro index.php. A este archivo le pondremos de nombre .htaccess y contendrá lo siguiente:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin
ErrorDocument 404 /index.php
Bien, con esto ya nos ocupamos de cuando se acceda a nuestra web automáticamente, lo que hace el servidor web, es catalogar como si accediéramos a la misma pero con index.php/ al principio. Solo nos queda una cosa, que CodeIgniter nos construya los enlaces sin el index.php/. De este modo, accedemos al archivo config.php y cambiaremos la variable $config['index_page']:
De:
A:
Y esto es todo para tener unas direcciones URL mucho más limpias. Espero que les haya ayudado de nuevo y hasta pronto.
Activar $_GET en CodeIgniter
30 Mar
Uno de los inconvenientes que nos encontramos, a veces, al programar en CodeIgniter es que no podemos pasar datos, por ejemplo, con QUERY_STRINGS, que es esa información que sigue después del símbolo ? en nuestra URL. Un ejemplo de este método sería una URL tipo: http://blog.ipalaus.es/?id=3.
Para solucionar este problema deberemos hacer solo dos cosas:
- En nuestro config.php modificaremos el $config['uri_protocolo'] dejándolo similar a este:
[code lang="php"]
$config['uri_protocol'] = "PATH_INFO";
[/code] - En nuestros controladores usaremos la siguiente función para reconstruir el array $_GET:
[code lang="php"]
parse_str($_SERVER['QUERY_STRING'],$_GET);
[/code]
Con esto, debería funcionar perfectamente. Pronto, más trucos, programas y ejemplos sobre CodeIgniter.
Consultas MySQL en CodeIgniter
17 Mar
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:
[code lang="php"]
$this->db->query("SELECT * FROM entradas");
[/code]
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í:
[code lang="php"]
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas;
[/code]
También en $this->db->get(); es posible usar un segundo parámetro para especificar un LIMIT:
[code lang="php"]
$query = $this->db->get("entradas", 10, 20);
// Genera: SELECT * FROM entradas LIMIT 20,10
[/code]
SELECT
También podemos especificar el SELECT con $this->db->select(); tipo:
[code lang="php"]
$query = $this->db->select("id,title,body");
$query = $this->db->get("entradas");
// Genera: SELECT id,title,body FROM entradas
[/code]
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í:
[code lang="php"]
$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
[/code]
WHERE
[code lang="php"]
$query = $this->db->where("id","38");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas WHERE id = '38'
[/code]
Si quisiéramos podríamos unir varios WHERE, simplemente añadiendo otras condiciones:
[code lang="php"]
$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'
[/code]
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:
[code lang="php"]
$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'
[/code]
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
[code lang="php"]
$query = $this->db->like("body","sentencia");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entras LIKE body = '%sentencia%'
[/code]
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.
[code lang="php"]
$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%'
[/code]
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.
[code lang="php"]
$query = $this->db->group_by("title");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas GROUP BY title
[/code]
DISTINCT
Para añadir DISTINCT a la consulta:
[code lang="php"]
$query = $this->db->distinct();
$query = $this->db->get("entradas");
// Genera: SELECT DISTINCT * FROM entradas
[/code]
HAVING
[code lang="php"]
$query = $this->db->having("uid = 32");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas HAVING uid = 32
[/code]
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.
[code lang="php"]
$query = $this->db->order_by("id","DESC");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas ORDER BYid DESC
[/code]
LIMIT
Permite especificar el limite de resultados que quieres que devuelva:
[code lang="php"]
$query = $this->db->limit(30);
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas LIMIT 10
[/code]
COUNT ALL
Permite contar el numero de entradas que hay en una tabla:
[code lang="php"]
$num = $this->db->count_all("entradas");
// Genera: un numero que lo podemos tratar como una variable o escribirlo
[/code]
COUNT ALL RESULTS
A diferencia de COUNT ALL, nos permite contar el numero de resultados en la actual consulta:
[code lang="php"]
$query = $this->db->where("name","Isern");
$query = $this->db->get("entradas");
$num = $this->db->count_all_results();
// Genera: un numero
[/code]
INSERT
Para insertar datos usando el Active Record de CodeIgniter debemos usar un array luego insertar:
[code lang="php"]
$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')
[/code]
UPDATE
Al igual que INSERT usaremos un array para insertar, sin embargo si queremos actualizar, por ejemplo, una entrada deberemos especificar un where:
[code lang="php"]
$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
[/code]
DELETE
Al igual que UPDATE usaremos un ID para especificar cual es la que queremos borrar:
[code lang="php"]
$this->db->where("id","3");
$this->db->delete("entradas");
// Genera: DELETE FROM entradas WHERE id = 3
[/code]
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.
CodeIgniter: Aplicación Básica (I), Creación de un Blog
11 Mar
Después de la introducción de como configurar CodeIgniter, lo mejor sería empezar con un ejemplo básico de como usar CodeIgniter. Lo más común son los sistemas de noticias o un weblog, que funcionarían igual (añadir a una base de datos, listar juntos, listar individuales), así que vamos a crear uno.
Lo primero que vamos a necesitar es CodeIgniter, podéis recurrir a la web oficial para descargarlo o usar la pre-configuración del artículo CodeIgniter: Iniciación y Configuración (concretamente este). Una vez descomprimido vamos a renombrar algunos ficheros y configurar algunos.
Accedemos a /application/controllers/ y cambiamos el nombre de welcome.php a blog.php. Blog.php será la base de nuestra aplicación, el controlador principal. Lo abrimos y veremos como es, por defecto, un controlador de CodeIgniter. En este primer ejemplo no vamos a usar modelos para no complicar las cosas, en un futuro, lo haremos. Editamos nuestro archivo blog.php para que quede tal que así:
Archivo: /application/controllers/blog.php
[code lang="php"]
class Blog extends Controller {
function Blog()
{
parent::Controller();
}
function index()
{
}
}
?>
[/code]
Es sumamente importante que sea class Blog y no class blog, al igual que function Blog() y no function blog().
Ahora vamos a configurar CodeIgniter para que su controlador principal sea blog.php de modo que cuando accedamos a la pagina web sin establecer controlador alguno, sea blog.php el controlador por defecto. Para hacer esto necesitamos configurar el archivo routes.php y podemos encontrarlo en /application/config. Routes.php se ocupa de las rutas de nuestra URI, se usa habitualmente para redirigir cosas a los controladores. Si por ejemplo queremos que una dirección tipo /producto/id/123 vaya a productos.php y /producto/nombre/abc también vaya a productos.php podríamos usar algo similar a esto:
[code lang="php"]
$route['/producto/id/:num'] = "productos/productById";
$route['/producto/name/:any'] = "productos/productByName";
[/code]
Siendo productById y productByName dos funciones dentro del controlador productos.php. Bien, pero eso no es lo que necesitamos nosotros ahora mismo. El archivo routes.php también se usa para establecer el controlador por defecto y por defecto hay el welcome, nosotros lo cambiaremos por blog:
Archivo: /application/config/routes.php, Línea: 43
[code lang="php"]
$route['default_controller'] = "blog";
[/code]
También será necesario usar autoload.php, también en /application/config/ para cargar automáticamente una librería (database) y un helper (url):
Archivo: /application/config/autoload.php, Línea: 42
[code lang="php"]
$autoload['libraries'] = array("database");
[/code]
Archivo: /application/config/autoload.php, Línea: 54
[code lang="php"]
$autoload['helper'] = array("url");
[/code]
Al añadir database al array de librerías, se cargar cada vez que accedamos a cualquier controlador. Como nuestra aplicación estará basada en la base de datos, y la usaremos todo el rato, ya nos va bien cargarla al principio. El helper url lo vamos a usar para
Base de Datos
Ahora realmente empezamos a trabajar con la aplicación, lo primero que necesitaremos será una base de datos MySQL. Para configurar los datos de la base de datos deberemos acceder a /application/config/database.php como ya expliqué en el artículo CodeIgniter: Iniciación y Configuración. Una vez configurado, crearemos nuestra tabla. El esquema sería el siguiente:
[code]
CREATE TABLE `posts` (
`id` int(5) NOT NULL auto_increment,
`title` varchar(64) NOT NULL,
`url_title` varchar(64) NOT NULL,
`body` text NOT NULL,
`created_on` varchar(10) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
[/code]
El único campo que puede confundir un poco es el campo url_title, este campo lo usaremos para crear URI tipo: blog.iplauas.es/este-seria-el-url-title.
Controlador y vistas
Vamos a crear nuestro controlador. Los controladores los podemos dividir mediante funciones, nosotros vamos a usar la función index() para mostrar las entradas, show() para ver una entrada en particular (enlace permanente) y add() para añadirlas.
Lo primero que haremos en nuestra función index() va a ser la consulta a MySQL. En esta consulta, pondremos en un array() todas las entradas que tengamos en nuestra tabla MySQL. Debería ser algo así:
Archivo: /application/controllers/blog.php
[code lang="php"]
function index()
{
$query = $this->db->orderby("id","desc");
$query = $this->db->get("posts");
foreach ($query->result() as $row) {
$data["posts"][$row->id]["title"] = $row->title;
$data["posts"][$row->id]["url"] = $row->url_title;
$data["posts"][$row->id]["body"] = $row->body;
$data["posts"][$row->id]["date"] = $row->created_on
}
}
[/code]
Como podéis comprobar, lo primero que hacemos es ordenarlos por ID y luego almacenamos en el array $data["posts"] el contenido de las entradas. Sin embargo, tengo planteado guardar la fecha en timestamp de modo que necesitaremos convertirla a una fecha humana. Para esto usaremos el helper date de CodeIgniter. Para cargar un helper debemos usar la expresión: $this->load->helper();. En nuestro caso, crearemos un patrón para las fechas que lo almacenaremos en una variable:
Archivo: /application/controllers/blog.php
[code lang="php"]
function index()
{
$query = $this->db->orderby("id","desc");
$query = $this->db->get("posts");
foreach ($query->result() as $row) {
$data["posts"][$row->id]["title"] = $row->title;
$data["posts"][$row->id]["url"] = $row->url_title;
$data["posts"][$row->id]["body"] = $row->body;
$data["posts"][$row->id]["date"] = $row->created_on
}
}
[/code]
De este modo la fecha se mostrará DD-MM-AAAA. Con esto tenemos nuestro controlador index() listo. Solo nos falta añadir la salida, lo que llamaremos view y podemos encontrar en /application/views/. Si accedemos al directorio veremos el archivo welcome_message.php, le cambiaremos el nombre a blog_front.php. Lo abrimos con nuestro editor de textos y veremos que hay establecidos unos estilos (CSS), vamos a usar los mismos.
Lo primero que necesitamos saber es como cargar la vista desde nuestro controlador, para cargar la vista lo haremos con $this->load->view();. Otro tema de las vistas es añadirle nuestro contenido dinámico, para pasar el contenido tendremos que añadir una variable. Veamos como lo haríamos en nuestro ejemplo, siendo nuestro contenido el array $data.
Archivo: /application/controllers/blog.php
[code lang="php"]
function index()
{
$query = $this->db->orderby("id","desc");
$query = $this->db->get("posts");
$this->load->helper('date');
$datestring = "%d-%m-%Y";
foreach ($query->result() as $row) {
$data["posts"][$row->id]["title"] = $row->title;
$data["posts"][$row->id]["url"] = $row->url_title;
$data["posts"][$row->id]["body"] = $row->body;
$data["posts"][$row->id]["date"] = date($datestring,$row->created_on);
}
$this->load->view("blog_front",$data);
}
[/code]
Si ejecutáis este código, funcionará al 100%. Sin embargo, en nuestra vista, no vamos a ver más que el mensaje estático del welcome_message.php que hemos renombrado. Ahora es el momento de empezar a crear como se verá. Vamos a hacerlo muy sencillo para que veáis como trabajar con las variables que hemos pasado. Entre las dos etiquetas body del archivo blog_front.php, vamos a poner este código:
[code lang="php"]
foreach ($posts as $id => $post) {
echo "
".anchor($post["url"],"#".$id)." ".$post["title"]."
";
echo "
".$post["body"]."
";
echo "".anchor($post["url"],"Enlace Permanente")." - ".$post["date"]."";
}
?>
Pagina generada en {elapsed_time} segundos
[/code]
Como podéis recordar, nosotros teníamos una variable $data["posts"], que realmente es un array $posts dentro del array $data. Dentro del array $posts tenemos un array para cada ID de entrada. Para eso usamos la función foreach, para “dividir” estos arrays y generar el contenido para cada ID. En cuanto al contenido dentro del ID podéis fijaros en la siguiente expresión:
[code lang="php"]
anchor($post["url"],"#".$id)
[/code]
anchor() es una función que forma parte del helper url que hemos usado en autoload.php. En el primer termino de la función especificamos la dirección a donde debe apuntar el enlace y, en la segunda, el texto a mostrar.
Con esto que tenemos ya podemos mostrar las entradas correctamente, ahora vamos a crear la función show() en blog.php para ver una específica. Para empezar, clonaremos el blog_front.php y lo nombraremos blog_single.php. De momento lo dejaremos así. Volveremos al controlador blog.php y añadiremos el siguiente código:
[code lang="php"]
function show()
{
$url_title = $this->uri->segment(1, 0);
if($url_title) {
$this->load->helper('date');
$datestring = "%d-%m-%Y";
$query = $this->db->where("url_title",$url_title);
$query = $this->db->get('posts');
foreach ($query->result() as $row) {
$data["post"]["id"] = $row->id;
$data["post"]["title"] = $row->title;
$data["post"]["url"] = $row->url_title;
$data["post"]["body"] = $row->body;
$data["post"]["date"] = mdate($datestring,$row->created_on);
}
$this->load->view('blog_single',$data);
} else {
redirect();
}
}
[/code]
Podemos ver que el código es prácticamente igual al de la función index(), pero este tiene una particularidad: muestra solo una entrada. Como podéis ver, al principio del código establecemos el $url_title con $this->uri->segment(1, 0);. Esto nos permite recibir un segmento determinado de la URI, en nuestro caso, el primero. Acto seguido comprobamos si existe algo establecido y si existe empezamos a montar la estructura. Hemos añadido una cosa en la sentencia $query, hemos usado $this->db->where(“url_title”,$url_title); para establecer que el campo url_title de la base de datos sea igual al $url_title.
Si todo esto no se cumpliera, hay un redirect() que los envía al principio de la aplicación.
También tenemos que cambiar el código de nuestra vista, ya que solo hemos duplicado el archivo. Entre las etiquetas
y debería haber algo así:Archivo: /application/views/blog_single.php
[code lang="php"]
=anchor($post["url"],"#".$post["id"]);?> =$post["title"];?>
=$post["body"];?>
=anchor($post["url"],"Enlace Permanente");?> - =$post["date"];?>
Page rendered in {elapsed_time} seconds
[/code]
Solo nos falta un truco que hemos usado en archivo routes.php que hemos hablado antes:
Archivo: /application/config/routes.php, Línea: 46-49
[code lang="php"]
$route["blog"] = "blog";
$route["add"] = "blog/add";
$route[":any"] = "blog/show";
[/code]
Añadir entradas
Esta es la última parte de nuestra aplicación básica, como añadir una entrada a la base de datos. Es muy sencillo. Para empezar esta vez crearemos primero la vista. Copiamos uno de las vistas y cambiamos el nombre por blog_add.php. Vamos a usar otra de helpers de CodeIgniter para crear el campo de formulario, form. Entre las etiquetas
y debería quedar algo tal que así:Archivo: /application/view/blog_add.php
[code lang="php"]
Añadir entrada
=form_open("add");?>
=form_close();?>
=$this->validation->error_string; ?>
Page rendered in {elapsed_time} seconds
[/code]
Lo único que os puede despistar aquí es el $this->validation->error_string;, forma parte de una de las librerías de CodeIgniter que vamos a usar en nuestro controlador para validar los campos. Se usa para que, si al validar el formulario hay un error, mostrar en el mismo archivo el error. Para poder añadir la entrada a nuestro controlador blog.php vamos a añadirle el siguiente código:
[code lang="php"]
function add()
{
$this->load->library("validation");
$this->load->helper("form");
$admin_password = "prueba";
$rules["title"] = "trim|required|min_length[3]|max_length[64]";
$rules["body"] = "trim|required|min_lenght[50]";
$rules["password"] = "trim|required";
$this->validation->set_rules($rules);
$fields["title"] = "título";
$fields["body"] = "contenido";
$fields["password"] = "contraseña";
$this->validation->set_fields($fields);
if ($this->validation->run() && $this->input->post("password") == $admin_password) {
$this->load->helper("date");
$insert = array(
"title" => $this->input->post("title"),
"url_title" => url_title($this->input->post("title")),
"body" => $this->input->post("body"),
"created_on" => now()
);
$this->db->insert("posts", $insert);
redirect("");
}
$this->load->view("blog_add");
}
[/code]
Como podéis ver, al principio del código, lo primero que hacemos es cargar la librería validation que hemos comentado antes. También cargamos el helper form para crear el formulario. El sistema de “protección” es algo cutre, pero no era la misión de este artículo precisamente. Hemos establecido una contraseña que se validará cuando enviemos la entrada. Seguidamente establecemos, gracias a la librería validation, que es lo que los campos deben cumplir. Acto seguido, por si algo falla, establecemos unos nombres “humanos” a los campos.
Si todo lo anterior valida, y la contraseña que hemos puesto en el formulario es igual a la establecida en el campo $admin_password, podremos montar el array $insert que luego usaremos para añadir el contenido a la base de datos. Como podéis ver en el campo “url_title” usamos la función url_title() para crear unos vínculos más accesibles y no un simple id. Una vez hemos añadido el contenido redirigimos a la pagina principal. Si esto falla volvemos a cargar la vista blog_add.php.
Conclusión
Con todo esto ya podéis crear vuestra primera aplicación en CodeIgniter usando bases de datos, varias vistas y usando routes.php para redirigir las URI. Es una base bastante fuerte para empezar a desarrollar algo encima. Próximamente enseñaré como hacer un sistema de usuarios bastante para evitar que la gente vea nuestra administración.
Descargar el ejemplo “Aplicación Básica (I), Creación de un Blog”: ipalaus-CodeIgniter_BlogExample_v1.rar
CodeIgniter: Iniciación y configuración
9 Mar
CodeIgniter es uno de lo los muchos frameworks PHP que existen hoy en día. Para describir qué es un framework que mejor que una definición de la Wikipedia:
En el desarrollo de software, un framework es una estructura de soporte definida en la cual otro proyecto de software puede ser organizado y desarrollado. Típicamente, un framework puede incluir soporte de programas, bibliotecas y un lenguaje interpretado entre otros software para ayudar a desarrollar y unir los diferentes componentes de un proyecto.
Lo primero que necesitamos es descargar la última versión de CodeIgniter, nosotros trabajaremos con la versión 1.6.1 que es la última hoy en día. Una vez descargada descomprimimos el archivo .rar y veremos una estructura tal que así:
[code]
/system/
/user_guide/
/index.php
/license.txt
[/code]
En la carpeta system hay todo el contenido del framework: helpers, librerías, plugins… Y lo más importante, la carpeta application que es realmente donde nuestra aplicación va a estar. Acto seguido tenemos el directorio user_guide, es la misma Guía del Usuario (en inglés) que hay en la web de CodeIgniter. A mi me parece una de las mejores guías que he leído nunca. El index.php gestiona la aplicación y el liecense.txt es la licencia, seria interesante que la leyerais.
Requisitos
- Servidor
Instalación
La instalación de este framework es muy sencilla, y más si dejamos la configuración del mismo para otro apartado. Solo deberíamos subir los archivos a nuestro servidor (configurados) y ya estaría lista pero por motivos de seguridad, nosotros vamos a cambiar la jerarquía de los directorios. De un amigo, Víctor Román, aprendí que el acceso a la aplicación solo debería tenerla el servidor por lo que los directorios como application y system no deberían ser públicos. Para realizar esto usaremos un truco que, obviamente, podéis saltar si no os interesa o vuestro hosting no os lo permite.
Para empezar, necesitamos saber si podemos hacer una redirección de un dominio o subdominio, por ejemplo blog.ipalaus.es, a /ipalaus_es/subdominios/blog/public_html. Esto nos permitirá tener nuestros archivos del blog en un mismo directorio pero los públicos solo estarán en la carpeta public_html. Para empezar crearemos el directorio public_html en nuestra versión local y moveremos a esa misma carpeta el archivo index.php que teníamos en la raíz. Otra manía personal es poner los directorios application y system separados, porque podríamos, por ejemplo, usar siempre el mismo system para 3 o 4 aplicaciones y solo actualizar uno en vez de tener que hacerlo para cada uno… Así que movemos el application fuera de system. Debería quedarnos una jerarquía tal que así:
[code]
/application/
/public_html/
/public_html/index.php
/system/
[/code]
(El license.txt y la carpeta user_guide han sido borrados)
Ahora accedemos a editar el /public_html/index.php con cualquier editor de texto. Y editamos las siguientes lineas:
Archivo: /public_html/index.php, Línea: 26
[code lang="php"]
$system_folder = "../system";
[/code]
Archivo: /public_html/index.php, Línea: 43
[code lang="php"]
$application_folder = "../application";
[/code]
Y con esto ya tenemos configurada nuestra jerarquía. Ahora toca hacer una configuración básica del sistema.
Configuración
La configuración básica de nuestra aplicación se basará en la configuración de los archivos config.php y database.php, ambos en /application/config/. Para empezar, el config.php, lo abrimos con nuestro editor de textos favorito. Hay algunas cosas que simplemente las paso por alto, variables que no nos hacen falta para nada en una configuración básica.
Archivo: /application/config/config.php, Línea: 14
[code lang="php"]
$config['base_url'] = "http://blog.ipalaus.es/";
[/code]
La variable $config['base_url'] corresponde a la dirección que CodeIgniter interpretará como base cuando tenga que incluir ficheros o similar. Es muy importante que sea correcta. Otros ejemplos podrían ser: http://localhost/blog, http://www.ipalaus.es/…
Archivo: /application/config/config.php, Línea: 26
[code lang="php"]
$config['index_page'] = "index.php";
[/code]
Esta variable la usaremos en caso de que hayamos renombrado nuestro archivo index.php (en /public_html), cosa que dudo… De todos modos, si queremos usar mod_rewrite de Apache tendremos que dejar en blanco. En otra entrada explicaré como usar mod_rewrite en CodeIgniter.
Archivo: /application/config/config.php, Línea: 57
[code lang="php"]
$config['url_suffix'] = "";
[/code]
Hay gente que tiene la “manía” de ponerle sufijos a las direcciones web… Quizá para ocultar que realmente es PHP o poner una extensión significativa. Si pusiéramos algo tipo $config['url_suffix'] = “html”;, todas las direcciones nos saldrían tipo: http://blog.ipalaus.es/entradas/codeigniter-configuracion-basica.html, siendo este archivo, PHP.
Archivo: /application/config/config.php, Línea: 69
[code lang="php"]
$config['language'] = "spanish";
[/code]
Desde la web de uno de los creadores de CodeIgniter, Derek Allard, podemos descargar el archivo de idioma spanish. Su instalación es tan sencilla como, descomprimir el fichero y mover su contenido a /application/language/spanish/. Dentro del directorio spanish deben estar los archivos .php y no ningún directorio más. Este archivo de lenguaje es, generalmente, para errores y mensajes relacionados con las librerías del framework.
Archivo: /application/config/config.php, Línea: 234-241
[code lang="php"]
$config['sess_cookie_name'] = 'blogipalaus_session';
$config['sess_expiration'] = 7200;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
[/code]
Esta parte es usada solo si usamos sesiones en nuestras aplicaciones… Aunque si vamos a usar PHP para programar nuestro sitio web, lo más probable es que las usemos. Lo más característico de esta parte es poder usar la base de datos para gestionar las sesiones. Si lo quisiéramos, deberíamos cambiar la variable $config['sess_use_database'] a TRUE.
Archivo: /application/config/config.php, Línea: 266
[code lang="php"]
$config['global_xss_filtering'] = TRUE;
[/code]
Activaremos el filtro de XSS por si las moscas… Nunca se sabe
.
Ahora ya hemos terminado con el config.php y pasamos a la configuración de database.php que, obviamente, es más sencilla. En CodeIgniter es posible usar varios perfiles de base de datos, por si tenemos una base de datos de desarrollo y una de producción o miles de configuraciones más.
Archivo: /application/config/config.php, Línea: 40-51
[code lang="php"]
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "ipalaus";
$db['default']['password'] = "ejemplo";
$db['default']['database'] = "blog";
$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";
[/code]
Como podéis comprobar es bien sencillo. Colocar el nombre de usuario, la base de datos, el host de la misma… Si quisiéramos usar una base de datos diferente a MySQL deberíamos cambiar el $db['default']['dbdriver'] por el deseado. A parte, es posible usar cache para las consultas MySQL… pero es algo bastante avanzado y que a usuarios de a pié no es muy necesario.
Conclusión
Espero que esta pequeña introducción a CodeIgniter, a nivel muy básico, sirva a alguien para animarse a programar usando este framework. Pretendo continuar añadiendo configuraciones y pequeños programas y ejemplos para que podáis incrementar vuestro nivel de conocimiento en CodeIgniter.
Descarga CodeIgniter en Español y semiconfigurado: CodeIgniter_1.6.1-spanish.rar


