Está en la página 1de 73

Instituto Tecnolgico de Chetumal

Ingeniera en Sistemas Computacionales


FrameWork para desarrollo WEB
Unidad 1 Estrategias de Reutilizacin
1.1 Introduccin
La ingeniera del software basada en reutilizacin es una estrategia de ingeniera del
software comparable en la que el proceso de desarrollo es adaptado a la reutilizacin del
software existente.
Si bien los beneficios de la reutilizacin han sido reconocidos durante muchos aos, solo
en la ltima dcada ha existido una transicin gradual desde el desarrollo del software
original hasta el desarrollo basado en la reutilizacin. La tendencia hacia el desarrollo
basado en la reutilizacin viene dada como respuesta a las demandas de una menor
produccin de software y de menores costos de mantenimiento, de una entrega ms
rpida de los sistemas y del incremento en la calidad del software.
Cada vez ms compaas ven su software como un activo valioso y estn
promocionando la reutilizacin para incrementar sus beneficios en las inversiones
del software.
Las unidades de software que se reutilizan pueden ser de tamaos totalmente diferentes:
Reutilizacin de sistemas de aplicaciones: Puede ser reutilizada incorporndolos sin
ningn cambio en otros sistemas, configurando la aplicacin para diferentes clientes.
Reutilizacin de componentes: Vara en tamao desde subsistemas hasta objetos
simples.
Reutilizacin de objetos y funciones: Pueden reutilizarse componentes software que
implementan una nica funcin.
Una forma complementaria de reutilizacin es la reutilizacin de conceptos, en la que en
lugar de reutilizar un componente, la entidad reutilizada es ms abstracta y se disea para
ser configurada y adaptada a una variedad de situaciones. Puede incluirse tanto en
patrones de diseo, productos de sistemas configurables y generadores de programas.
La gran ventaja es que los costos de desarrollo deberan reducirse.
Seguidamente se muestra una tabla con una serie de ventajas e inconvenientes que
existe en el proceso de reutilizacin del software:
VENTAJAS
Incremento de la confiabilidad
Reduccin del riesgo del proceso
Uso efectivo de especialistas
Cumplimiento de estndares
Desarrollo acelerado

DESVENTAJAS
Incremento en los costos de mantenimiento
Falta de soporte de las herramientas
Sndrome de reinventar la rueda
Creacin y mantenimiento de una librera de
componentes
Bsqueda de componentes

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

EL CAMPO DE REUTILIZACIN
Se explota el hecho de que los sistemas del mismo dominio de aplicacin son similares y
tienen potencial para la reutilizacin. Esta reutilizacin es posible a diferentes niveles
desde funciones simples a funciones completas. Los factores clave que deberan de
considerarse a la hora de planificar la reutilizacin son:
La agenda de desarrollo del software: Son activos reutilizables de grano grueso (difcil de
modificar).
Vida esperada del software: Si se est desarrollando un sistema de larga vida, habra que
centrarse en la mantenibilidad del sistema. Se tendr que adaptar el sistema a nuevos
requerimientos, lo cual probablemente signifique hacer cambios a los componentes y
sistemas de proveedores.
Los conocimientos, habilidades y experiencia del grupo de desarrollo: Todas las
tecnologas de reutilizacin son bastante complejas y se necesita bastante tiempo para
comprenderlas y usarlas de forma efectiva.
Los aspectos crticos del software y sus requerimientos no funcionales:
Se tiene que crear un caso de confiabilidad para el sistema. Esto es difcil si no se tiene
acceso al cdigo fuente del software.
El dominio de las aplicaciones:
En algunos dominios de aplicaciones como los sistemas de informacin medica y de
fabricacin hay varios productos genricos que pueden reutilizarse para configurarlos a
una situacin particular. La plataforma sobre la que el sistema se va ejecutar: Los
sistemas de aplicaciones genricos pueden ser plataformas especificas y solamente es
posible reutilizarlos si el sistema se disea para la plataforma.

Ejercicio 1.1
Despus de la lectura de las hojas anteriores el alumno entregar en equipo de no
ms de 5 integrantes lo siguiente:
Una conclusin en la que determine que es un Framework y cual es es el mayor
beneficio de su uso, as mismo especificar que tan conveniente es usarlo en el
desarrollo de un Sistema Computacional.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

PATRONES DE DISEO Los patrones de diseo se derivaron de las ideas introducidas


por Christopher Alezander, quien sugiri que existan ciertos patrones del diseo de
edificios que eran comunes e inherentemente interesantes y efectivos.
1.2 Patrones de Diseo
Patrones de diseo o ms comnmente conocidos como "Design Patterns". Son
soluciones simples y elegantes a problemas especficos y comunes. Son soluciones
basadas en la experiencia y que se ha demostrado que funcionan. Es evidente que a lo
largo de multitud de diseos de aplicaciones hay problemas que se repiten o que son
anlogos, es decir, que responden a un cierto patrn. Sera deseable tener una coleccin
de dichos patrones con las soluciones ms ptimas para cada caso.
Los patrones de diseo no son fciles de entender, pero una vez entendido su
funcionamiento, los diseos sern mucho ms flexibles, modulares y reutilizables. Han
revolucionado el diseo orientado a objetos y todo buen arquitecto de software debera
conocerlos.
El trmino patrn de diseo no es extremadamente preciso pero s muy til. En la forma
en la que se suele entender actualmente, fue acuado en Gamma y col. (1994),
importante referencia que se suele designar abreviadamente como GoF.

Por la manera en que se emplea este concepto en esta referencia bsica y en la mayora
de usos posteriores, se refiere a una manera especialmente inteligente y perspicaz de
resolver un tipo general de problema.
A pesar de constar el trmino diseo no se suele considerar que se refiera nicamente a
la fase de diseo de un programa, es una solucin completa que incluye anlisis, diseo e
implementacin. Un patrn de diseo no se considera bien especificado hasta que se ha
podido plasmar en forma de cdigo en algn lenguaje, pero claramente no es una
convencin o receta idiomtica, ligada a un lenguaje concreto, como podra la
relacionada con cmo recorrer de forma eficiente un vector en C empleando aritmtica de
punteros, por poner un ejemplo. Sin embargo, en GoF se remarca que un patrn puede
serlo, tener sentido identificarlo como tal o no, dependiendo del lenguaje utilizado. En el
lenguaje de implementacin elegido en GoF, C++, un patrn como herencia no tiene
sentido (ya est implcito en el propio lenguaje) mientras que sera una solucin general
muy adecuada a numerosos problemas si el lenguaje de implementacin fuese C, por
ejemplo. En un mbito de problemas y de conceptos ms cercano a la Estadstica, y que
trataremos con mayor detalle ms adelante, un patrn de diseo muy comn como objeto
funcin segn la terminologa de Eckel(2003) o comando segn la terminologa de GoF,
tiene sentido en Java o en C++, pero no en Python, donde todo, y en concreto cualquier
mtodo o funcin miembro, es un objeto.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

Lista con los patrones de diseo a objetos ms habituales publicados en el libro "Design
Patterns ", escrito por los que comnmente se conoce como GoF (gang of four, "pandilla
de los cuatro").

Abstract Factory.
Proporciona una interfaz para crear familias de objetos o que dependen entre s, sin
especificar sus clases concretas.
La idea detrs del patron Abstract Factory (que en espaol se traducira como fabrica
abstracta) consiste en la nocin de que nuestro programa (o el cliente de una clase que
nosotros proporcionamos) trabaja con una serie de productos (como los de una fbrica)
que tienen unas determinadas caractersticas (por ejemplo tenemos productos
embotellados y productos en tetrabrick). Nuestro programa va a utilizar dichos productos
realizando una serie de acciones sobre ellos (como meter las botellas en unos camiones y
los tetrabricks en otros) sin importarle quien le est suministrando los productos.
As mismo existen una serie de fbricas que producen esos productos que vamos a tratar,
una empresa fabrica cocacola y otra pepsi pero ambas en botellas de las que nuestro
programa trata. Al final, el concepto bsico consiste en que a nuestro programa (o cliente)
no le importa lo que haya dentro de la botella ni quien lo haya producido mientras sea una
botella.
Desde el punto de vista software el ejemplo anterior se traduce en una situacin en la que
nuestro programa maneja un tipo de objetos con unas caractersticas comunes y algunas
caractersiticas propias. Esto en general en software se resuelve mediante el uso de dos
caractersticas de los lenguajes de programacin orientados a objetos, las clases
abstractas y las interfaces.
Problema
El patrn de diseo Abstract Factory aborda el problema de la creacin de familias de
objetos (como por ejemplo iterfaces grficos) que comparten toda una serie de
caractersticas comunes en los objetos que componen dichas familias.
Aplicabilidad
El uso de este patrn est recomendado para situaciones en las que tenemos una familia
de productos concretos y prevemos la inclusin de distintas familias de productos en un
futuro.
De esta forma nuestro programa realiza unas ciertas operaciones sobre dichas
caractersticas comunes sin importarle que otras caractersticas tenga el objeto en
cuestin. Por otro lado existen distintos productores de dichos objetos. Un ejemplo muy
tpico en muchos frameworks de programacin que sigue este patrn se da en el caso de
las familias de interfaces grficos. As existen diversas fbricas de interfaces que
proporcionan sus propios botones, campos de texto, listas desplegables, etc... Todas ellas
basadas en los tipos bsicos. Los clientes obtienen una familia y proceden a utilizar los
controles usando el tipo abstracto genrico que da soporte.
Ejemplos reales

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

Familia de comunicaciones
Un caso bastante comn es el similar al presentado en el ejemplo de cdigo, es decir, una
familia de algoritmos de comunicacin por distintos medios que permiten el envo de
informacin entre pares (por ejemplo). De esta forma nuestro programa puede usar
comunicacin TCP, UDP o cualquier otro protocolo que se nos ocurra sobre un dispositivo
no estandar o que no soporte IP.
Interfaces grficos
Otro caso relativamente comn de uso de este patrn se da en la creacin de familias de
interfaces grficos en las cuales los elementos (productos) del interfaz se mantienen
constantes (por ejemplo labels, botones, cajas de texto ...) pero el dibujado de dichos
elementos puede delegarse en distintas familias (por ejemplo QT, GTK, etc) de forma que,
en funcin de la fbrica seleccionada obtenemos unos botones u otros.
Builder.
Separa la construccin de un objeto complejo de su representacin, de forma que el
mismo proceso de construccin pueda crear diferentes representaciones.
Permite a un objeto (fuente) construir un objeto complejo especificando slo su tipo. El
objeto constructor (fuente) se compone de una serie de partes que individualmente van
formando el objeto complejo. As se abstrae el proceso de creacin del objeto complejo
para que se puedan crear representaciones diferentes con el mismo proceso.
Se nos pueden ocurrir muchos ejemplos para el patrn Builder, vehculos, recetas,
electrodomsticos y cualquier cosa que est compuesta por muchas partes. Tambin se
utiliza mucho para crear los objetos del patrn Composite (patrn estructural). El siguiente
ejemplo va ensamblando los componentes de un ordenador segn el uso que le
queramos dar.
El patrn constructor sigue la misma idea que el patrn factora, pero no se encarga
simplemente de devolver una clase, si no de construir una composicin de objetos entera,
por compleja o sencilla que sea. El caso ms habitual es el de construir una interfaz de
usuario, pero no se limita nicamente a componentes visuales.
Intencin
Separar la construccin de un objeto complejo de su representacin de modo que el
mismo proceso de construccin pueda crear diferentes representaciones.
Motivacin
Los objetos que dependen de un algoritmo tendrn que cambiar cuando el algoritmo
cambia. Por lo tanto los algoritmos que estn expuestos a dicho cambio deberan ser
separados, permitiendo de esta manera reutilizar algoritmos para crear diferentes
representaciones.
El patrn Builder se usa cuando:

El algoritmo para creacin de un objeto complejo debe ser independiente de las


partes que conforman el objeto y cmo estn ensambladas.

El proceso de construccin debe permitir diferentes representaciones del objeto


que se construye.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

2. Patrones de Diseo (Modelo Vista Controlador)


El Modelo Vista Controlador es un patrn de diseo empleado por la mayora de
Frameworks PHP para desarrollo web, existen tambin algunos lenguajes que lo
implementan, en este punto analizaremos como aplica el Framework CodeIgniter este
modelo, es interesante porque separa en varios grupos las complejidades de las distintas
partes que componen una pgina web, como la vista y la lgica, as como el acceso a la
base de datos.
Quizs lo que ms nos lleva a cambiar nuestros hbitos de programacin en PHP es el
hecho de tener que basar nuestros scripts en este modelo de programacin, que
seguramente resultar novedoso sobretodo para los programadores veteranos, porque fija
un nuevo estilo de desarrollo de aplicaciones, que nos obliga a separar cdigo fuente
segn su mbito. Sin embargo, como hemos dicho anteriormente, estas nuevas
costumbres de codificacin tambin nos ayudarn a que nuestros programas sean
mejores y disfruten de varias ventajas como ser ms organizados, extendibles y
entendibles por otros desarrolladores, reutilizables, y sobretodo algo muy importante:
Facilitar el mantenimiento, etc.
Para los que no lo conocen, el Modelo - Vista - Controlador (en ingls Model - View Controller) es un patrn de desarrollo o un estilo de arquitectura de software que separa el
cdigo fuente de las aplicaciones en tres grupos:
Modelo: Este representa todo el cdigo que tiene que ver con el acceso a base de datos.
En el modelo mantendremos encapsulada la complejidad de nuestra base de datos y
simplemente crearemos funciones para recibir, insertar, actualizar o borrar informacin de
nuestras tablas. Al mantenerse todas las llamadas a la base de datos en un mismo
cdigo, desde otras partes del programa podremos invocar las funciones que necesitemos
del modelo y ste se encargar de procesarlas. En el modelo nos podrn preocupar cosas
como el tipo de base de datos con la que trabajamos, o las tablas y sus relaciones, pero
desde las otras partes del programa simplemente llamaremos a las funciones del modelo
sin importarnos qu tiene que hace ste para conseguir realizar las acciones invocadas.
Vista: La vista codifica y mantiene la presentacin final de nuestra aplicacin de cara al
usuario. Es decir, en la vista colocaremos todo el cdigo HTML, CSS, Javascript, etc. que
se tiene que generar para producir la pgina tal cual queremos que la vea el usuario. En
la prctica la vista no slo sirve para producir pginas web, sino tambin cualquier otra
salida que queramos enviar al usuario, en formatos o lenguajes distintos, como pueden
ser feeds RSS, archivos JSON, XML, etc.
Controlador: El controlador podramos decir que es la parte ms importante, porque hace
el enlace entre el modelo, la vista y cualquier otro recurso que se tenga que procesar en
el servidor para generar la pgina web. En resumen, en el controlador guardamos la
lgica de nuestras pginas y realizamos todas las acciones que sean necesarias para
generarlas, ayudados del modelo o la vista.
Como podr ver: Esto quiere decir que en la prctica para el caso de CodeIgniter,
tendremos que escribir las lneas de cdigo de cualquier pgina web en tres grupos de
archivos distintos. En una aplicacin estndar podremos tener varios modelos (por
ejemplo, para cada una de las entidades distintas de la base de datos), varias vistas (una
o varias para cada pgina o seccin) y varios controladores (para cada pgina o seccin
de la web). Luego veremos dnde tenemos que guardar los archivos de cada uno de
estos tres grupos.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

Durante el desarrollo con CodeIgniter ser muy recomendable seguir las normas del
diseo Modelo - Vista - Controlador (MVC), pero realmente el framework es bastante
flexible y permite que, si lo deseamos, no sigamos el desarrollo atendiendo a dicha
arquitectura. En este caso, podramos tener simplemente controladores y dentro de ellos
realizar todas las acciones de acceso a la base de datos directamente, sin hacer llamadas
al modelo, o escribir texto en la salida sin utilizar las vistas. Obviamente, esta opcin no
aprovechar las ventajas de separacin de cdigo entre presentacin, lgica y modelo de
base de datos, pero si resulta muy complejo el MVC, se puede dejar de lado.
En el caso que no utilizramos los modelos, no ocurrir ningn efecto negativo en el
desempeo del framework, pero en el caso de las vistas, si no las utilizamos y escribimos
salida directamente desde el controlador, como por ejemplo con sentencias echo de PHP
en el cdigo de los controladores, perderemos algunas de las ventajas que CodeIgniter
realiza por nosotros para procesar la salida antes de enviarla al usuario.
Como sabemos, o podremos imaginar, separar la vista o presentacin de la lgica de los
programas es una ventaja importante, ya que ayuda a mantener un cdigo ms sencillo,
reducido y con mayor facilidad de mantenimiento. En principio puede parecer un tanto
complejo el hecho de manejar varios archivos con cdigos distintos, pero a medio plazo
nos vendr muy bien separar el cdigo de cada parte de nuestra aplicacin. Nos evitar
muchos de los problemas que a veces tenemos en desarrollos PHP, donde en un mismo
archivo tenemos mezclado cdigo en varios lenguajes como HTML, CSS, SQL, con el
propio cdigo PHP para generar la lgica de nuestro negocio.
Aplicacin del modelo vista controlador en CodeIgniter
Ejercicio 1.2
Instalacin de CodeIgniter:
1. Descargar CodeIgniter y descompactar el archivo
2. Descargar Xampp e Instalar
3. Descargar SubLime Text 2 e Instalar
4. Mover el Directorio descompactado CodeIgniter al directorio htdocs de Xampp
5. Abrir con SubLime Text 2 el directorio CodeIgniter y seleccionar config
6. Abrir el archivo Config.php y modificar la lnea $config['base_url']
= '';
por: $config['base_url']
= 'http://localhost/codeigniter';
Puedes hacer el siguiente ejercicio, en la Opcin
welcome_message.php y realiza los siguientes cambios:

views,

busca

el

archivo

1. Borrar lo que se encuentra dentro del <div id="container"> hasta </body>


Te debe de quedar as:
<div id="container">
</body>
2. Borrar todo el estilo desde
<style type="text/css"> hasta </style>
3. En la opcin <title> agregamos lo siguiente:
<title>Framework para desarrollo WEB</title>
4. Abajo de <div id="container"> pones:
<h1>Bienvenido a CodeIgniter</h1>
5. Salva todo y ejecuta nuevamente la pgina de inicio
http://localhost/Codeigniter/
Tarea: 1.1

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

Investigar de manera individual que es:


1. CSS
2. feeds RSS
3. Archivos JSON
4. Archivos XML
1. CSS
Es una tecnologa que nos permite crear pginas web de una manera ms exacta.
Gracias a las CSS somos mucho ms dueos de los resultados finales de la pgina,
pudiendo hacer muchas cosas que no se poda hacer utilizando solamente HTML, como
incluir mrgenes, tipos de letra, fondos, colores...
CSS son las siglas de Cascading Style Sheets, en espaol Hojas de estilo en Cascada.
2. Feeds RSS
Gracias a los feeds RSS de Google Noticias, puede obtener un acceso ms fcil a las
actualizaciones de noticias sobre temas que le interesan. Hay feeds disponibles para
todas las secciones de Google Noticias (como Deportes o Economa), para los resultados
la bsqueda de Google Noticias o para las pginas personalizadas del programa. Si se
suscribe a un feed de Google Noticias con un lector de feeds, recibir peridicamente un
resumen actualizado de las noticias relevantes junto con enlaces a los artculos
completos. Los feeds RSS de Google Noticias estn disponibles en formato RSS 2.0.
Puede utilizar tanto los feeds de resultados de bsqueda como los feeds de secciones de
Google Noticias y suscribirse a ellos. Para localizar los feeds de Google Noticias, busque
el icono naranja de RSS en la parte inferior de cualquier pgina de Google Noticias.
Haciendo clic en este icono de RSS, se puede obtener un feed de cualquiera de las
secciones de Google Noticias. Por ejemplo, si hace clic en el icono de RSS situado en la
parte inferior de la pgina de la seccin "Economa", se podr suscribir a un feed de
noticias econmicas.
Tambin es posible obtener un feed de cualquier bsqueda realizada en Google Noticias.
Para ello, primero debe efectuar una bsqueda en Google Noticias y, a continuacin,
hacer clic en el icono de RSS situado en la parte inferior de la pgina de resultados de
bsqueda para que se genere el feed.
3. Archivos JSON
JSON, acrnimo de JavaScript Object Notation, es un formato ligero para el intercambio
de datos. JSON es un subconjunto de la notacin literal de objetos de JavaScript que no
requiere el uso de XML.
La simplicidad de JSON ha dado lugar a la generalizacin de su uso, especialmente como
alternativa a XML en AJAX. Una de las supuestas ventajas de JSON sobre XML como
formato de intercambio de datos en este contexto es que es mucho ms sencillo escribir
un analizador sintctico (parser) de JSON. En JavaScript, un texto JSON se puede
analizar fcilmente usando la funcin eval(), lo cual ha sido fundamental para que JSON
haya sido aceptado por parte de la comunidad de desarrolladores AJAX, debido a la
ubicuidad de JavaScript en casi cualquier navegador web.
En la prctica, los argumentos a favor de la facilidad de desarrollo de analizadores o del
rendimiento de los mismos son poco relevantes, debido a las cuestiones de seguridad que
plantea el uso de eval() y el auge del procesamiento nativo de XML incorporado en los

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

navegadores modernos. Por esa razn, JSON se emplea habitualmente en entornos


donde el tamao del flujo de datos entre cliente y servidor es de vital importancia (de aqu
su uso por Yahoo, Google, etc, que atienden a millones de usuarios) cuando la fuente de
datos es explcitamente de fiar y donde no es importante el no disponer de procesamiento
XSLT para manipular los datos en el cliente.
Si bien es frecuente ver JSON posicionado contra XML, tambin es frecuente el uso de
JSON y XML en la misma aplicacin. Por ejemplo, una aplicacin de cliente que integra
datos de Google Maps con datos meteorolgicos en SOAP hacen necesario soportar
ambos formatos.
Cada vez hay ms soporte de JSON mediante el uso de paquetes escritos por terceras
partes. La lista de lenguajes soportados incluye ActionScript, C, C++, C#, ColdFusion,
Common Lisp, Delphi, E, Eiffel, Java, JavaScript, ML, Objective-C, Objective CAML, Perl,
PHP, Python, Rebol, Ruby, Lua y Visual FoxPro.
En diciembre de 2005 Yahoo! comenz a dar soporte opcional de JSON en algunos de
sus servicios web.1
El trmino JSON est altamente difundido en los medios de programacin, sin embargo,
es un trmino mal descrito ya que en realidad es solo una parte de la definicin del
estndar ECMA-262 en que est basado Javascript. De ah que ni Yahoo, ni Google
emplean JSON, sino LJS[cita requerida]. Una de las cualidades intrnsecas de Javascript
denominada LJS (Literal Javascript) facilita el flujo de datos e incluso de funciones, para la
cual no requiere la funcin eval() si son datos los que se transfieren como en el caso de
XML. Todo lo referente a transferencia de datos en todos sus tipos, incluyendo arrays,
booleans, integers, etc. no requieren de la funcin eval(), y es precisamente en eso en
donde supera por mucho JavaScript al XML, si se utiliza el LJS y no la incorrecta
definicin de JSON.
4. Archivos XML
La tecnologa XML busca dar solucin al problema de expresar informacin estructurada
de la manera ms abstracta y reutilizable posible. Que la informacin sea estructurada
quiere decir que se compone de partes bien definidas, y que esas partes se componen a
su vez de otras partes. Entonces se tiene un rbol de pedazos de informacin. Ejemplos
son un tema musical, que se compone de compases, que estn formados a su vez con
notas. Estas partes se llaman elementos, y se las seala mediante etiquetas.
Una etiqueta consiste en una marca hecha en el documento, que seala una porcin de
este como un elemento. Un pedazo de informacin con un sentido claro y definido.
Teniendo en cuenta esta definicin podremos definir un XML para una lista de temas
musicales de esta manera: Tanto MUSICA como tema son ambas etiquetas!
xml
< view plain text >
1. <MUSICA>
2. <tema titulo="Mi musica" />
3. </MUSICA>

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

Como pueden observar la informacin est fragmentada pero a su vez est organizada de
manera secuencial y en un orden jerrquico, digamos que MUSICA es el padre de tema
porque cada uno de los tema que son nodos se encuentra dentro de la etiqueta MUSICA
que agrupa todos los hijos o nodos tema. Pero para que un archivo realmente cumpla con
las normas de XML no solo debe respetar esta estructura jerrquica sino tambin debe
incluir elementos obligatorios como es el tipo de codificacin de lenguaje o prlogo.
xml
< view plain text >
1. <?xml version="1.0" encoding="utf-8"?>
2. <MUSICA>
3.
<tema titulo="Mi musica" />
4. </MUSICA>
Como pueden observar se agrego una nueva lnea en la parte superior del XML que
cumple con la funcin de indicar el tipo de versin 1.0 y el tipo de codificacin de
lenguaje utf-8 que en este caso es para poder nosotros usar alfabeto espaol dentro de la
estructura del XML.
Ejemplos y ejecucin de programas Codeigniter
Cuando el usuario hace una peticin a una URL del proyecto, el controlador identifica a
que URL se esta refiriendo, por lo general todos los procesos pasan por el archivo
index.php de codeigniter, despus del archivo index.php puedes poner el nombre del
controlador que quieras ejecutar y el ltimo parmetro que puedes poner es la funcin que
se va a ejecutar de ese controlador, si no especificas ninguna funcin se va a ejecutar la
funcin index.
Puedes hacer lo siguiente para probarlo:
1. Dentro de Sublime Text 2 posicinate en controllers, oprime el botn derecho del
mouse y crea un nuevo controlador (archivo) de nombre welcome.php que contenga lo
siguiente:
Programa welcome.php (Controlador)
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
$this->load->view('welcome_message');
}
public function holaMundo()
{
$this->load->view('holaMundo');
}
}

Como podrs observar el controlador de nombre welcome tiene una clase del mismo
nombre solo que inicia con maysculas (Welcome) adems se extiende de CI_Controller,
es importante remarcar que en todos los casos se debe respetar esta nomenclatura.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

10

Observa tambin que el controlador welcome.php tiene dos funciones, index() que
siempre debe existir ya que es la funcin que se ejecuta por default cuando tu llamas al
controlador y holaMundo() esta funcin la puedes llamar desde el URL.
Ejemplo:
http://localhost/codeigniter/index.php/welcome De esta forma ejecutas la funcin index
del controlador welcome.
http://localhost/codeigniter/index.php/welcome/holamundo Aqu ejecutas la funcin
holamundo del controlador welcome.
2. Hasta este momento ya tienes el controlador con dos funciones, index() y
holamundo(), fjate que cada funcin carga una vista con $this->load->view por
ejemplo la funcin index() carga la vista ('welcome_message') y la funcin
holamundo() carga la vista ('holaMundo'), ahora es necesario construir esas vistas (los
programas). Para esto nos posicionamos en el apartado views del rbol de codeigniter
y oprimimos el botn derecho del mouse para crear un nuevo programa (archivo) de
nombre welcome_message.php y otro de nombre holaMundo.php que contengan lo
siguiente:
Programa holamundo.php (Vista)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>FrameWork para desarrollo WEB</title>
</head>
<body>
<div id="container">
<h1> Estas ejecutando la vista de Hola mundo </h1>
</body>
</html>

Programa welcome_message (Vista)


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>FrameWork para desarrollo WEB</title>
</head>
<body>
<div id="container">
<h1>Bienvenido a CodeIgniter</h1>
</body>
</html>

3. Prueba su ejecucin.
Uso de helpers

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

11

En la jerarqua de los archivos puedes ir a system, ah encontraras un apartado que se


llama helpers, en este se encuentran todos los que ya trae por default el CodeIgniter, si
observas alguno te dars cuenta que no tienen una estructura propiamente orientada a
objetos, ms bien representan un conjunto de funciones que te pueden ayudar a
solucionar situaciones de manera rpida.
Los nuevos helpers que tu vas a crear por lo general deben de ir en la carpeta helpers
pero dentro de la aplicacin (application).
Cada helper que tu creas debe ir con el nombre que le asignaras, seguido de un guin
bajo y la palabra helper para indicarle al sistema o framework que este se trata de un
helper (mihelper_helper.php).
Es importante comentar que ninguno de los helpers viene precargado, todos los que
necesites usar tendrs que cargarlos ($this->load->helper(mihelper)) observa que ya no
es necesario anteceder la palabra helper y el guion bajo.
Es importante comentar que la carga del helper la debes hacer en la lnea siguiente a la
carga del constructor (parent::__construct();)

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

12

Probablemente ya te diste cuenta que si como URL pones lo siguiente:


http://localhost/codeigniter/
Se ejecutara el mtodo o funcin index() del controlador welcome, esto se debe a que
dentro de application/config/routes.php de CodeIgniter hay una variable que se llama
controlador por defecto (default_controller) que es la que indica cual es el controlador (la
clase del controlador) que se va cargar por defecto al entrar en la direccin URL del
proyecto.

$route['default_controller'] = welcome;
Si lo deseas la puedes cambiar segn tus necesidades y adaptarla para que cargue un
controlador propio.
Como ejemplo:
$route['default_controller'] = hola_mundo; // nombre de la clase

Acceso a Bases de Datos


Insertando Datos
Para poder trabajar con las bases de datos desde CodeIgniter lo primero que necesitamos
hacer es configurar el archivo llamado database.php que se encuentra en la carpeta
config de application, te debe de quedar de la siguiente manera:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

13

Es importante resaltar que te debes de asegurar que el $active_record se encuentre en


TRUE y si te das cuenta en la imagen anterior $db[default][dbdriver] esta igualado a
mysql ya que en este caso el DBMS que usaremos ser precisamente Mysql, tambin es
importante que notes que la base de datos que estamos usando para este ejemplo
$db[default][database] se llama itch en tu caso pon el nombre de tu base de datos, el
usuario de base de datos que usamos es root y no tiene pasword.
Una ves hechas estas modificaciones, solo tienes que salvar el archivo.
Como siguiente paso vamos a crear un formulario (formulario.php) que se encontrar en
la vista (views) este formulario se encargara de pedir los datos de entrada, para este
ejercicio vamos a crear una tabla en la base de datos itch que se llame Alumnos y que
tenga los siguientes campo: ncontrol, nombre y correo como se indica en la imagen
siguiente:

Ahora bien para poder crear el formulario vamos a hacer uso de las funciones que ya se
encuentran creadas (helpers), para este caso usaremos la funcin form, la cual tendremos
que declarar o mejor dicho cargar en el controlador principal, es recomendable hacer
estas cargas justamente despus del constructor, como se muestra a continuacin:
function __construct(){
parent::__construct();
$this -> load -> helper('form');
}
Para este ejemplo el formulario quedara de la siguiente manera:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

14

/** Programa formulario.php **/


<?= form_open("/holamundo/recibirdatos") ?>
/* Despues de hacer el form_submit('','Alta de Alumno') se va al controlador holamundo y
ejecuta la funcin recibirdatos */
<meta charset="utf-8">
/* Establecemos el soporte para los acentos */
<?
$ncontrol = array(
'name' => 'ncontrol',
'placeholder' => 'Esciba su Numero de Control'
);
$nombre = array(
'name' => 'nombre',
'placeholder' => 'Esciba su Nombre'
);
$correo = array(
'name' => 'correo',
'placeholder' => 'Esciba su Correo'
);
?>
/** En el cdigo anterior declaramos tres arreglos ($ncontrol, $nombre y $correo) y dentro
de cada uno asignamos a name el valor de una variable y a placeholder el dialogo que
queremos que se visualice cuando se teclea el dato solicitado. **/

<?= form_label ('Nmero de control: ', 'ncontrol') ?>


<?= form_input($ncontrol) ?>
/** En las dos lneas anteriores hacemos lo siguiente: Con form_label escribimos el
mensaje del dato que vamos a solicitar y a continuacin desplegamos la variable,
posteriormente leemos el dato. **/
<br>
/** Damos un salto de lnea **/
<?= form_label ('Nombre: ', 'nombre') ?>
<?= form_input($nombre) ?>
/** Hacemos lo mismo para Nombre **/
<br>
/** Otro salto **/
<?= form_label ('Correo: ', 'Correo') ?>

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

15

<?= form_input($correo) ?>


/** Y lo mismo para correo **/
<br>
/** Tambien un salto para separar el texto **/
<?= form_submit('','Alta de Alumno') ?>
/** Ponemos el botn con el mensaje 'Alta de Alumno' y cuando lo opriman ejecutaremos
la funcin recibirdatos del controlador holamundo */
<?= form_close() ?>
/** Cerramos la forma **/
</body>
/** Cerramos el body **/
</html>
/** Cerramos el html **/
Posterior a la creacin del formulario, creamos el controlador, este se encargar entre
otras cosas de cargar los archivos, programas o clases necesarias, ah encontraras la
carga del formulario, la carga de la vista (views) y la carga del modelo.
A continuacin se muestra el controlador usado para este ejemplo:
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class HolaMundo extends CI_Controller {
/** Para este ejemplo el controlador se llamar holamundo.php **/
function __construct(){
parent::__construct();
/** Cargo el constructor **/
$this -> load -> helper('form');
/** Cargo el formulario **/
$this -> load -> model ('itch_model');
/** Cargo el modelo **/
}
public function index()
{
$this->load->view('Holamundo');
}
/** Si no tecleo nada despus del nombre del controlador se ejecutara la vista
holamundo.php ya que es la que se encuentra dentro de la funcin index **/
public function nuevo()
{
$this->load->view('formulario');
/** Para ejecutar el programa escribimos en el URL lo siguiente:
localhost/codeigniter/index.php/nuevo para que se ejecute esta

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

16

funcin **/
}
public function recibirdatos() {
/** Esta funcin ser la que se ejecute cuando oprima el botn Alta de alumno
que se fijo con la orden <?= form_submit('','Alta de Alumno') ?> **/
$data = array(
/** Creamos un arreglo de nombre data ($data) y le asignamos los valores
tecleados en el formulario (ncontrol, nombre y correo) **/
'ncontrol' => $this->input->post('ncontrol'),
'nombre' => $this->input->post('nombre'),
'correo' => $this->input->post('correo')
);
$this->itch_model->crearCurso($data);
/** Ejecutamos la funcin crearCurso del modelo itch (itch_model) y le
enviamos la variable data ($data).
}
}
?>
Veamos como nos debe quedar el modelo (itch_model)
<? if (! defined('BASEPATH')) exit('No direct script access allowed');
class itch_model extends CI_Model {
function __construct(){
parent::__construct();
$this -> load -> database();
/** Cargamos la base de datos **/
}
function crearCurso($data) {
/** Creamos la funcin crearCurso y recibilos la variable o arreglo data ($data)
$this ->db->insert('alumnos',array('ncontrol'=>$data['ncontrol'],
'nombre'=>$data['nombre'], 'correo'=>$data['correo']));
}
}
?>
Sintaxis del $this ->db->insert:
$data = array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
);
$this->db->insert('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')

Consultando Datos
Para poder realizar un proceso de consulta, ser necesario agregar lo siguiente:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

17

En primera instancia creo que es necesario ordenar un poco nuestro controlador principal
para no sobrecargarlo y adems usar nombres de clases, funciones y variables ms
acorde con el proceso, iniciaremos cambindole de nombre al controlador principal y
efectuando algunas modificaciones de tal forma que quede de la siguiente manera:
<?php
/** Nombre del controlador: itch.php **/
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Itch extends CI_Controller {
function __construct(){
parent::__construct();
$this -> load -> helper('form');
$this -> load -> model ('itch_model');
}
public function index()
{
$data['alumnos'] = $this->itch_model->leealumnos();
$this->load->view('alumnos',$data);
}
public function nuevoAlumno()
{
$this->load->view('formulario');
}
public function recibirdatos() {
$data = array(
'ncontrol' => $this->input->post('ncontrol'),
'nombre' => $this->input->post('nombre'),
'correo' => $this->input->post('correo')
);
$this->itch_model->GuardaAlumno($data);
}
}
?>
Si te das cuenta en el controlador se agrego una funcin de nombre index, en ella se
declara una variable $data['alumnos'] = $this->itch_model->leealumnos(); y se ejecuta
la funcin leealumnos() del modelo, esperando que esta funcin consulte los datos de la
tabla alumnos y los retorne en la variable declarada, para posteriormente enviaselos a la
vista de nombre alumnos para su impresin en pantalla.
<? if (! defined('BASEPATH')) exit('No direct script access allowed');
/** nombre del modelo: itch_model.php **/
class itch_model extends CI_Model {
function __construct(){
parent::__construct();
$this -> load -> database();
}
function GuardaAlumno($data) {

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

18

$this
->db->insert('alumnos',array('ncontrol'=>$data['ncontrol'],
'nombre'=>$data['nombre'], 'correo'=>$data['correo']));
}
function leealumnos(){
$query = $this->db->get('alumnos');
if($query->num_rows() > 0) return $query;
else return false;
}
}
?>
Vista: alumnos.php
<html>
<body>
<meta charset="utf-8">
<?
foreach ($alumnos->result() as $alumno) { ?>
<ul>
<li><?= $alumno->ncontrol; ?></li>
<li><?= $alumno->nombre; ?></li>
<li><?= $alumno->correo; ?></li>
</ul>
<? } ?>
</body>
</html>
Controlador: itch
public function index()
{
$data['segmento'] = $this->uri->segment(3);
if(!$data['segmento']){
$data['alumnos'] = $this->itch_model->leealumnos();
}
else{
$data['alumnos']
=
$this->itch_model>leealumno($data['segmento']);
}
$this->load->view('alumnos',$data);
}
Modelo: itch_model
function leealumno($id){
$this->db->where('id',$id);
$query = $this->db->get('alumnos');
if($query->num_rows() > 0) return $query;
else return false;
}
function leealumnos(){
$query = $this->db->get('alumnos');
if($query->num_rows() > 0) return $query;
else return false;
}
Vista: alumnos
<html>
<body>

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

19

<meta charset="utf-8">
<?
if($alumnos) {
foreach ($alumnos->result() as $alumno) { ?>
<ul>
<li><a href="<?= $alumno->id;?>"><?= $alumno->id; ?></li>
<li><?= $alumno->ncontrol; ?></li>
<li><?= $alumno->nombre; ?></li>
<li><?= $alumno->correo; ?></li>
</ul>
<? }
}else{
echo "<p> Error en la aplicacin</p>";
}
?>
</body>
</html>

Configuraciones adicionales del entorno


Quitando el index.php de la url
Hasta este momento, para poder ejecutar algn controlador es necesario teclear:
http://localhost/codeigniter/index.php/Mi_controlador
Veamos como podemos configurar los archivos iniciales para acortar esta ruta. Lo primero
que tenemos que hacer es:
1. Crear o modificar en el caso de que ya exista un archivo de nombre .htaccess que
se encuentra ubicado en la raz principal del proyecto, en nuestro ejemplo
(codeigniter), este archivo debe contener lo siguiente:
Options FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /alumnosITCH/index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

20

2. En el directorio config de aplicattion se encuentra un archivo de nombre


config.php, a este archivo le haremos las siguientes modificaciones:
Ubica tu ruta de acceso en donde dice $config[base_url] = MiRura;
Y modifcala por algo parecido a: (el nombre de tu proyecto)
$config[base_url] = http://localhost/alumnosITCH/;
Ya que nuestro proyecto de llama alumnosITCH.
Y en $config['index_page'] = 'index.php'; quita el index.php, de modo
que se vea algo as: $config['index_page'] = ''; Guardamos el archivo config.
3. Ahora, podemos establecer a travs de la modificacin del archivo routes.php que
se encuentra en la carpeta config de application, que por defecto al entrar a la
aplicacin se cargue y ejecute nuestro controlador principal, para esto
modificamos la lnea: $route['default_controller'] = welcome; de tal forma que
quede as:
$route['default_controller'] = itch; // nombre del controlador principal

Templates, headers, footers y elementos de las vistas

Controller home
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller {
function __construct(){
parent::__construct();
$this -> load -> helper('form');
}
public function index()
{
$this->load->view('home/index');
}

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

21

public function funcion1()


{
$this->load->view('home/funcion1');
}
public function funcion2()
{
$this->load->view('home/funcion2');
}
}
?>

Vista funcion1
<html>
<body>
<?
echo ("<br> Hola bienvenido a la funcin (funcion1) del controlador home");
echo ("<br> Ahora se esta ejecutando la vista (funcion1)");
echo ("<br> cmo inicio solo mostramos esto ");
echo base_url();
?>
</body>
</html>

Vista funcion2
<html>
<body>
<?

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

22

echo ("<br> Hola bienvenido a la funcin (funcion2) del controlador home");


echo ("<br> Ahora se esta ejecutando la vista (funcion2)");
echo ("<br> cmo inicio solo mostramos esto ");
echo base_url();
?>
</body>
</html>

Vista index
<html>
<body>
<?
echo ("<br> Hola bienvenido a la funcin index del controlador home");
echo ("<br> Ahora se esta ejecutando la vista index");
echo ("<br> cmo inicio solo mostramos esto ");
echo base_url();
?>
</body>
</html>

Ahora observe los siguientes cambios que se hicieron al controlador:


Controller home
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller {
function __construct(){

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

23

parent::__construct();
$this -> load -> helper('form');
}
public function index()
{
$data['contenido'] = 'home/index';
$this->load->view('template', $data);
}
public function funcion1()
{
$data['contenido'] = 'home/funcion1';
$this->load->view('template', $data);
}
public function funcion2()
{
$data['contenido'] = 'home/funcion2';
$this->load->view('template', $data);
}
}
?>
Como podr ver hemos creado una vista de nombre template con la que configuramos
nuestro entorno y posteriormente la ejecutamos envindole como parmetro la vista que
queremos ejecutar.
Vista template
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Trabajando con templates </title>
</head>
<body>
<?= $this->load->view($contenido) ?>
</body>
</html>
Y observe el resultado que se obtiene:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

24

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

25

Instalacin y activacin de Bootstrap


Despus de haber realizado los primeros ejemplos con Codeigniter integraremos
Bootstrap a nuestra aplicacin, esto nos permitir trabajar todo lo relacionado con las
vistas de una manera ms sencilla.

Antes de continuar nos detendremos unos minutos para entender que es realmente
Bootstrap

En pocas palabras es el Framework de Twitter que permite crear interfaces web con CSS
y Javascript que adaptan la interfaz dependiendo del tamao del dispositivo en el que se
visualice de forma nativa, es decir, automticamente se adapta al tamao de un
ordenador o de una Tablet sin que el usuario tenga que hacer nada, esto se denomina
diseo adaptativo o Responsive Design.

Aun ofreciendo todas las posibilidades que nos da Bootstrap a la hora de crear interfaces
web, los diseos son simples, limpios e intuitivos, esto les da agilidad a la hora de cargar
y al adaptarse a otros dispositivos. El Framework trae varios elementos con estilos
predefinidos fciles de configurar:
Botones, Mens desplegables, Formularios incluyendo todos sus elementos e integracin,
jQuery para ofrecer ventanas y tooltips dinmicos.
En su GitHub oficial puedes encontrar pginas con toda la informacin necesaria para
utilizar Bootstrap en tus proyectos web, adems tambin puedes encontrar ejemplos de
utilizacin.
Claramente el mejor ejemplo de utilizacin de Bootstrap es Twitter, pero existen otros
sitios que implementan diseos responsive basados en este Framework.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

26

Para descargar bootstrap entraremos en su pagina web:

http://twitter.github.io/bootstrap/
Una vez descargado y abierto podremos observar la estructura de archivos que tiene,
bsicamente son tres carpetas:
Copiamos y pegamos en el directorio raz de nuestro proyecto las tres carpetas.
CREACION DE UNA PLANTILLA
A continuacin crearemos un controlador nuevo llamado acerca_de.
1 public function acerca_de()
2 {
3
$this->load->view('home/acerca_de');
4 }
Creamos la vista acerca_de, por ahora podemos usar index.php y guardarla con otro
nombre.
Empezamos por crear una vista en la carpeta views con el nombre template.php y
aadimos el siguiente cdigo que hemos descargado de la pagina de Bootstrap.

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<!DOCTYPE html>
1 <html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="<?= base_url('css/bootstrap-responsive.css') ?>" rel="stylesheet">
<link href="<?= base_url('css/bootstrap.min.css') ?>" rel="stylesheet"
media="screen">
<title> Mi Sitio </title>
</head>
<body>
<div class="container-fluid">
<div class="row-fluid">
<div class="span3">

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

27

<p> Men Sistema </p>


</div>

17
18
19
20
21
22
23
24
25
26
27
28

<div class="span9">
</div>
</div>
</div>

<script src="<?= base_url('js/jquery.js') ?>"></script>


<script src="<?= base_url('js/bootstrap.min.js') ?>"></script>
</body>
</html>
Cosas que aclarar de el cdigo de arriba:

base_url: Esta funcin de codeigniter se usa para la llamada desde la raz de la


carpeta a cualquier cosa que necesitemos.

jquery: Necesitaremos la ultima versin, si se fijan se ha cambiado de la


documentacin oficial de bootstrap que lo llama online a interno a travs de base_url.
Para que eso funcione nicamente tenemos que ir a la pagina del cdigo de Jquery y
guardar ese cdigo con el nombre jquery.js dentro de la carpeta js.
En estos momentos tenemos creado nuestro template pero nos faltara llamar al
contenido de index.php y acerca_de, para hacer eso tendramos que crear una variable
dentro del arreglo $data que llamaremos $contenido, en la carpeta controladores y que le
daremos la ruta segn si queramos que sea una u otra pagina. A la hora de cargar la vista
le tendremos que pasar el arreglo $data:

1
public function index()
2
{
3
$data['contenido']='home/index';
4
$this->load->view('template',$data);
5
}
6
7
public function acerca_de()
8
{
9
$data['contenido']='home/acerca_de';
10
$this->load->view('template',$data);
11
}
Lo nico que falta para cargar la pagina, es llamar al arreglo en la vista.
Lo colocaremos dentro del segundo div:
1

<div class="span9">
<?= $this->load->view($contenido) ?>
</div>

2
3
Borramos todo de las paginas acerca_de e index y colocamos solo el nombre de cada
una en encabezado 1.
Ejemplo de index:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

28

<h1> Pgina Inicio </h1>

1 <h1> Pgina Acerca De </h1>


2 <p class="text-error">Donec ullamcorper nulla non metus auctor fringilla.</p>
3
4 <p>
5 <button class="btn btn-large btn-primary" type="button">Large button</button>
6 <button class="btn btn-large" type="button">Large button</button>
7 </p>
Probamos a ver como queda acerca_de:

A continuacin cargaremos o generaremos el archivo jquery.js


Observa que el jquery lo puedes ejecutar va Internet aunque desde mi punto de vista no
es lo ms recomendable, lo mejor es descargarlo y pegarlo a tu aplicacin como archivo,
para tal fin se requiere hacer lo siguiente:
1. Dirgete a la pgina de jquery (http://jquery.com/) y selecciona lo siguiente:

Posteriormente elige:

Te mostrara un cdigo muy raro pero en el inicio encontraras algo como esto: /*! jQuery
v1.11.0 | (c) 2005
Seleccinalo todo, completo para que lo puedas copiar a un archivo.
Crea en la carpeta js un nuevo archivo de nombre jquery.js

Y pega todo el contenido que copiaste

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

29

A continuacin te muestro la imagen de un template.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

30

Ejemplos de Mantenimiento a tablas de base de datos

Creamos la Base de Datos itch y la tabla Alumnos con la siguiente estructura:

Recordemos como debe de estar nuestro archivo database.php que se encuentra en la


carpeta config:

Iniciaremos con el listado de nuestro controlador principal de nombre itch:

<?php

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

31

/*
Controlador principal itch.php
Instituto Tecnolgico de Chetumal
Departamento de Sistemas y Computacin

Proyecto Didctico AlumnosITCH

Materias que apoya:


Framework para desarrollo Web
Administracin de Bases de Datos
Taller de Bases de Datos

Catedrtico:
M.T.E. Lino Rangel Gmez
*/

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Itch extends CI_Controller {


function __construct() {
parent::__construct();
$this -> load -> helper('form');
$this -> load -> model ('itch_model');
}

public function index() {


$data['contenido'] = 'itch/index';

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

32

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

public function consulta() {


$data['segmento'] = $this->uri->segment(3);
if(!$data['segmento']) {
$data['alumnos'] = $this->itch_model->leealumnos();
}
else{
$data['alumnos'] = $this->itch_model->leealumno($data['segmento']);
}
$data['contenido'] = 'itch/alumnos';
$this->load->view('template',$data);
}

public function nuevo() {


$data['contenido'] = 'itch/formulario';
$this->load->view('template', $data);
}

public function borrar() {


$data['alumnos'] = $this->itch_model->leealumnos();
$data['contenido'] = 'itch/baja';
$this->load->view('template',$data);
}

public function recibirdatos() {

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

33

$data = array(
'ncontrol' => $this->input->post('ncontrol'),
'nombre' => $this->input->post('nombre'),
'correo' => $this->input->post('correo')
);
$this->itch_model->GuardaAlumno($data);
redirect('itch/nuevo');
}

public function actualizar() {


$data = array(
'ncontrol' => $this->input->post('ncontrol'),
'nombre' => $this->input->post('nombre'),
'correo' => $this->input->post('correo')
);
$this->itch_model->ActualizaAlumno($data);
redirect('itch/modifica');
}

public function baja() {


$ncontrol = $_POST['ncontrol'];
$this->itch_model->baja($ncontrol);
$this->borrar();
}

public function modifica() {


$data['alumnos'] = $this->itch_model->leealumnos();

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

34

$data['contenido'] = 'itch/modifica';
$this->load->view('template',$data);
}

public function modificar() {


$nc =$_POST["ncontrol"];
$data['alumnos'] = $this->itch_model->leealumno($nc);
$data['contenido'] = 'itch/pidemodifica';
$this->load->view('template', $data);
}
}
?>

Ahora listaremos nuestro template principal:


<!--Template principal de nombre template.php queda guardado en la carpeta views -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="<?= base_url('css/bootstrap.min.css') ?>" rel="stylesheet">
<link href="<?= base_url('css/bootstrap-responsive.css') ?>" rel="stylesheet">
<title>Itch Control Escolar</title>
</head>
<body>
<div class="container-fluid">
<div class="row-fluid">
<div class="span3">
<ul class="nav nav-list">
<li class="nav-header">Sistema de Control Escolar</li>
<!-- <li class="active"><a href="<?= base_url('/itch/nuevo') ?>"> Alta </a></li> -->
<li><a href="<?= base_url('/itch/nuevo') ?>"> Alta </a></li>
<li><a href="<?= base_url('/itch/consulta') ?>"> Consulta </a></li>
<li><a href="<?= base_url('/itch/borrar') ?>">Baja</a></li>
<li><a href="<?= base_url('/itch/modifica') ?
>">Modificacin</a></li>
<li><a href="#">Salir</a></li>
</ul>

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

35

</div>
<div class="span9">
<?= $this->load->view($contenido) ?>
</div>
</div>
</div>
</body>
</html>

Ahora listemos todas las vistas:


<!-- Vista: formulario.php queda guardada en la carpeta views -->
<?= form_open("/itch/recibirdatos") ?>
<?
$ncontrol = array(
'name' => 'ncontrol',
'placeholder' => 'Esciba su Numero de Control'
);
$nombre = array(
'name' => 'nombre',
'placeholder' => 'Esciba su Nombre'
);
$correo = array(
'name' => 'correo',
'placeholder' => 'Esciba su Correo'
);
?>
<?= form_label ('Nmero de control: ', 'ncontrol') ?>
<?= form_input($ncontrol) ?>
<br>
<?= form_label ('Nombre: ', 'nombre') ?>
<?= form_input($nombre) ?>
<br>
<?= form_label ('Correo: ', 'Correo') ?>
<?= form_input($correo) ?>
<br>
<?= form_submit('','Alta de Alumno') ?>
<?= form_close() ?>
</body>
</html>
<!-- Vista: alumnos.php queda guardada en la carpeta views -->
<html>
<body>
<meta charset="utf-8">
<?
if($alumnos) {
foreach ($alumnos->result() as $alumno) { ?>
<ul>
<li><?= $alumno->ncontrol;?> </li>
<li><?= $alumno->nombre; ?> </li>
<li><?= $alumno->correo; ?> </li>
</ul>
<? }
}else{
echo "<p> Error en la aplicacin</p>";
}

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

36

?>
</body>
</html>
<!-- Vista: pidemodifica.php queda guardada en la carpeta views -->
<?= form_open("/itch/actualizar") ?>
<?
$fila=$alumnos->row();
$ncntrol = array(
'name' => 'ncontrol',
'value'=> "$fila->ncontrol"
);
$nombre = array(
'name' => 'nombre',
'value'=> "$fila->nombre"
);
$correo = array(
'name' => 'correo',
'value'=> "$fila->correo"
);
?>
<br>
<input type="hidden" name="ncontrol" value=<?=$fila->ncontrol?>>
<?= form_label ('Nombre: ', 'nombre')?>
<?= form_input($nombre) ?>
<br>
<?= form_label ('Correo: ', 'Correo')?>
<?= form_input($correo) ?>
<br>
<?= form_submit('','Alta de Alumno')?>
<?= form_close()?>
</body>
</html>
<!-- Vista: modifica.php queda guardada en la carpeta views -->
<?
if($alumnos) {
foreach ($alumnos->result() as $alumno) { ?>
<ul>
<li><?= $alumno->ncontrol;?> </li>
<li><?= $alumno->nombre; ?> </li>
<li><?= $alumno->correo; ?> </li>
</ul>
<? }
}else{
echo "<p> Error en la aplicacin</p>";
}
?>
<form name="modifica" action="<?= base_url('/itch/modificar') ?>" method="POST">
<table>
<tr>
<td>Ncontrol: </td>
<td><input name="ncontrol" type="text"/></td>
</tr>
</table>
<input type="submit" value="Editar" />

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

37

</form>
<!-- Vista: baja.php queda guardada en la carpeta views -->
<?
if($alumnos) {
foreach ($alumnos->result() as $alumno) { ?>
<ul>
<li><?= $alumno->ncontrol;?> </li>
<li><?= $alumno->nombre; ?> </li>
<li><?= $alumno->correo; ?> </li>
</ul>
<? }
}else{
echo "<p> Error en la aplicacin</p>";
}
?>
<form name="alta" action="<?= base_url('/itch/baja') ?>" method="POST">
<table>
<tr>
<td>Ncontrol: </td><td><input name="ncontrol" type="text"/></td>
</tr>
</table>
<input type="submit" value="Borrar" />
</form>
<!-- Vista: index.php queda guardada en la carpeta views -->
<html>
<body>
<?
echo ("<br> Hola bienvenido al sistema de control escolar del ITCH");
echo ("<br> Seleccione alguna de las opciones del menu de la izquierda");
?>
</body>
</html>

Y finalmente el modelo:
<?php /* Modelo: itch_model.php queda guardada en la carpeta models */
if (! defined('BASEPATH')) exit('No direct script access allowed');
class itch_model extends CI_Model {
function __construct(){
parent::__construct();
$this -> load -> database();
}
function GuardaAlumno($data) {
$this ->db->insert('alumnos',array('ncontrol'=>$data['ncontrol'],
'nombre'=>$data['nombre'], 'correo'=>$data['correo']));
}
function ActualizaAlumno($data) {
$this->db->set('nombre', $data['nombre']);
$this->db->set('correo', $data['correo']);
$this->db->where('ncontrol', $data['ncontrol']);
$this->db->update('alumnos');
}
function leealumno($nc){

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

38

$this->db->where('ncontrol',$nc);
$query = $this->db->get('alumnos');
if($query->num_rows() > 0) return $query;
else return false;
}
function leealumnos(){
$query = $this->db->get('alumnos');
if($query->num_rows() > 0) return $query;
else return false;
}
function baja($ncontrol) {
$this->db->where('Ncontrol', $ncontrol);
$this->db->delete('alumnos');
}
}
?>

Otro ejemplo de mantenimiento a tablas tomado de:


Referencia: http://copypastereference.wordpress.com/2012/03/07/crud-mantenimiento-basico-deuna-tabla-con-codeigniter/

Creando la Base de Datos.


1.
2.

Abrimos el navegador y nos dirigimos a http://localhost/xampp/, creamos una base de


datos que se llame CPRCRUD (Copy Paste Reference CRUD).
En la base de datos que acabamos de crear, insertamos esta pequea tabla:
CREATE TABLE `cprcrud`.`Contacto` (
`idContacto` INT NOT NULL AUTO_INCREMENT ,
1
`Nombre` VARCHAR(45) NULL ,
2
`Telefono` VARCHAR(45) NULL ,
3
`Email` VARCHAR(45) NULL ,
4
`Direccion` VARCHAR(45) NULL ,
5
PRIMARY KEY (`idContacto`) );
6
INSERT INTO `cprcrud`.`contacto(`Nombre`,`Telefono`,`Email`,Direccion`) VALUES ('Ned Stark',
7
'987654321', 'ned@invernalia.com', 'Invernalia');
8
INSERT INTO `cprcrud`.`contacto` (`Nombre`, `Telefono`, `Email`, `Direccion`) VALUES ('Robb
9
Stark', '987654321', 'robb@invernalia.com', 'Invernalia' );
1
INSERT INTO `cprcrud`.`contacto` (`Nombre`, `Telefono`, `Email`, `Direccion`) VALUES ('Tyrion
0
Lannister', '887996354', 'tyrion@rocacasterly.com', 'Roca Casterly' );
11
INSERT INTO `cprcrud`.`contacto` (`Nombre`, `Telefono`, `Email`, `Direccion`) VALUES ('Jaime
1
Lannister', '887996354', 'jaime@rocacasterly.com', 'Roca Casterly' );
2
INSERT INTO `cprcrud`.`contacto` (`Nombre`, `Telefono`, `Email`, `Direccion`) VALUES
('Rhaegar Targaryen', '887996354', 'rhaegar@targaryen.com', 'Desembarco del Rey' );
Vincular CodeIgniter con la Base de Datos.
Una vez creada la tabla, nos dirigimos a C:\xampp\htdocs\CRUD\application\config y editamos el
archivo llamado database.php.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

39

Realizamos los siguientes cambios:


1 $db['default']['hostname'] = 'localhost'; // <-- Nombre del Servidor
2 $db['default']['username'] = 'root'; // <-- Usuario
3 $db['default']['password'] = ''; // <-- Contrasea
4 $db['default']['database'] = 'cprcrud'; // <-- Base de Datos
5 $db['default']['dbdriver'] = 'mysql';

Creando el Modelo.
Nos dirigimos a C:\xampp\htdocs\CRUD\application\models y creamos un archivo llamado
mantenimiento_model.php.

El contenido del archivo, por ahora, ser el siguiente:

<?php
class Mantenimiento_model extends CI_Model {
function Mantenimiento_model() {
parent::__construct(); //llamada al constructor de Model.
}
function getData() {
$usuarios = $this->db->get('contacto');
// Obtenemos la tabla 'contacto'. db->get('nombre_tabla') equivale a SELECT * FROM
nombre_tabla.
return $usuarios->result(); //devolvemos el resultado de lanzar la query.
}
}
?>

Creando el Controlador.
Nos dirigimos a C:\xampp\htdocs\CRUD\application\controllers y creamos un archivo que se llame
mantenimiento.php.

El contenido del archivo, por ahora, ser el siguiente:

1 <?php
2
3 class Mantenimiento extends CI_Controller {

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

40

4
5
6
7
8
9
1
0
public function __construct() {
11
parent::__construct();
1
}
2
1
function index() {
3
$this->load->model('mantenimiento_model'); //cargamos el modelo
1
4
$data['page_title'] = "Copy Paste Reference! - Tutorial CodeIgniter";
1
5
//Obtener datos de la tabla 'contacto'
1
$usuarios = $this->mantenimiento_model->getData(); //llamamos a la funcin getData() del
6
modelo creado anteriormente.
1
7
$data['usuarios'] = $usuarios;
1
8
//load de vistas
1
$this->load->view('mantenimiento_view', $data); //llamada a la vista, que crearemos
9
posteriormente
2
}
0
2
}
1
?>
2
2
2
3
2
4
2
5
Creando la Vista.
Nos dirigimos a C:\xampp\htdocs\CRUD\application\views y creamos el archivo
mantenimiento_view.php.

El contenido ser el siguente:

1 <html>
2 <head>
3 <title><?=$page_title?></title>
4 </head>
5 <body>
6 <form name="tabla" action="" method="POST">
7 <table border="solid">
8 <thead>
9 <tr>

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

41

<th></th>
10
<th>Nombre</th>
11
<th>Telefono</th>
12
<th>Email</th>
13
<th>Direccion</th>
14
</tr>
15
</thead>
16
<tbody>
17
<?php foreach ($usuarios as $u):?>
18
19
<tr>
20
<td><input type="radio" name="editar" value="<?=$u->idContacto?>"/></td>
21
<td><?=$u->Nombre?></td>
22
<td><?=$u->Telefono?></td>
23
<td><?=$u->Email?></td>
24
<td><?=$u->Direccion?></td>
25
</tr>
26
27
<?php endforeach;?>
28
</tbody>
29
</table>
30
<input type="submit" value="Editar" />
31
</form>
32
</body>
33
</html>
34
Visualizacin de la Tabla.
Una vez realizados estos pasos, abrimos el navegador y nos dirigimos a
http://localhost/crud/index.php/mantenimiento.

Deberamos poder visualizar el contenido de la tabla.

Alta.
En nuestra vista, agregamos el siguiente contenido:
1 <p></p>
2
3 <form name="alta" action="http://localhost/crud/index.php/mantenimiento/alta" method="POST">
4 <table>
5 <tr>
6 <td>Nombre</td>
7 <td><input type="text" name="txtNombre" /></td>
8 </tr>
9 <tr>
10 <td>Telefono</td>
11 <td><input type="text" name="txtTelefono" /></td>
12 </tr>
13 <tr>
14 <td>Email</td>
15 <td><input type="text" name="txtEmail" /></td>

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

42

</tr>
16
<tr>
17
<td>Direccion</td>
18
<td><input type="text" name="txtDireccion" /></td>
19
</tr>
20
</table>
21
<input type="submit" value="Alta"/>
22
</form>
23
En nuestro controlador agregamos la siguiente funcin:

1
function alta() {
2
//recogemos los datos obtenidos por POST
3
$data['nombre'] = $_POST['txtNombre'];
4
$data['email'] = $_POST['txtEmail'];
5
$data['telefono'] = $_POST['txtTelefono'];
6
$data['direccion'] = $_POST['txtDireccion'];
7
//llamamos al modelo, concretamente a la funcin insert() para que nos haga el insert en la base
8
de datos.
9
$this->load->model('mantenimiento_model');
1
$this->mantenimiento_model->insert($data);
0
//volvemos a visualizar la tabla
11
$this->index();
1
}
2
En nuestro modelo agregamos la siguiente funcin:

1
2
3
4
5
6
7

function insert($data) {
$this->db->set('Nombre', $data['nombre']);
$this->db->set('Email', $data['email']);
$this->db->set('Telefono', $data['telefono']);
$this->db->set('Direccion', $data['direccion']);
$this->db->insert('contacto');
}

A estas alturas, deberamos poder insertar registros desde la vista.

Baja.
En nuestra vista, agregamos el siguiente formulario para realizar la baja:

1<p>BAJA</p>
2 <form name="alta" action="http://localhost/crud/index.php/mantenimiento/baja" method="POST">
3 <table>
4 <tr>
5 <td>Nombre: </td><td><input name="txtNombre" type="text"/></td>
6 </tr>

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

43

7 </table>
8 <input type="submit" value="Borrar" />
9 </form>
Agregamos la funcin baja a nuestro controlador:
function baja() {
1 //obtenemos el nombre
2 $nombre = $_POST['txtNombre'];
3 //cargamos el modelo y llamamos a la funcin baja(), pasndole el nombre del registro que
4queremos borrar.
5 $this->load->model('mantenimiento_model');
6 $this->mantenimiento_model->baja($nombre);
7 //mostramos la vista de nuevo.
8 $this->index();
9}

Y agregamos la siguiente funcin al modelo:

function baja ($nombre) {


$this->db->where('Nombre', $nombre);
1 $this->db->delete('contacto');
2 }
3
4

Ahora deberamos poder borrar registros utilizando, de nuestra vista, el formulario baja.

Modificacin.
Primero, en nuestro formulario tabla (dentro de la vista, el primer formulario que hemos creado),
le agregamos el action que, hasta ahora, ha estado vaco.

<form name="tabla" action="http://localhost/crud/index.php/mantenimiento/accion"


method="POST">

Hecho esto, dentro del controlador agregaremos la funcin accion y editar:


1 function accion() {
2 //cargamos el modelo y obtenemos la informacin del contacto seleccionado.
3 $this->load->model('mantenimiento_model');
4 $data['usuario'] = $this->mantenimiento_model->obtenerContacto($_POST['editar']);
5 //cargamos la vista para editar la informacin, pasandole dicha informacin.
6 $this->load->view('edit', $data);
7 }
8
9 function editar() {
10 //recogemos los datos por POST

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

44

11
12
13
14
15
16
17
18
19
20
21

$data['id'] = $_POST['id'];
$data['nombre'] = $_POST['txtNombre'];
$data['email'] = $_POST['txtEmail'];
$data['telefono'] = $_POST['txtTelefono'];
$data['direccion'] = $_POST['txtDireccion'];
//cargamos el modelo y llamamos a la funcin update()
$this->load->model('mantenimiento_model');
$this->mantenimiento_model->update($data);
//volvemos a cargar la primera vista
$this->index();
}

Agregamos al modelo la funcion obtenerContacto:

function obtenerContacto($idContacto) {
1
$this->db->select('Nombre, Email, Telefono, Direccion, idContacto');
2
$this->db->from('contacto');
3
$this->db->where('idContacto = ' . $idContacto);
4
$contacto = $this->db->get();
5
return $contacto->result();
6
}
7
A continuacin, crearemos una nueva vista con el nombre edit.php. Su contenido ser el
siguiente:

1 <html>
2 <head>
3 <title><?=$page_title?></title>
4 </head>
5 <body>
6 <form name="editar" action="http://localhost/crud/index.php/mantenimiento/editar"
7 method="POST">
8 <table>
9 <tr>
1 <td>Nombre: </td><td><input name="txtNombre" value="<?=$usuario[0]->Nombre?>"
0 type="text"/></td>
11 </tr>
1 <tr>
2 <td>Email: </td><td><input name="txtEmail" value="<?=$usuario[0]->Email?>"
1 type="text"/></td>
3 </tr>
1 <tr>
4 <td>Telefono: </td><td><input name="txtTelefono" value="<?=$usuario[0]->Telefono?>"
1 type="text"/></td>
5 </tr>
1 <tr>
6 <td>Direccion: </td><td><input name="txtDireccion" value="<?=$usuario[0]->Direccion?>"
1 type="text"/></td>
7 </tr>
1 </table>
8 <input type="hidden" name="id" value="<?=$usuario[0]->idContacto?>"/>
1 <input type="submit" value="Editar" />

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

45

9
2
0
2
1
</form>
2
</body>
2
</html>
2
3
2
4
2
5
Por ltimo, al modelo le agregamos la siguiente funcin:

1
2
3
4
5
6
7
8

function update($data) {
$this->db->set('Nombre', $data['nombre']);
$this->db->set('Email', $data['email']);
$this->db->set('Telefono', $data['telefono']);
$this->db->set('Direccion', $data['direccion']);
$this->db->where('idContacto', $data['id']);
$this->db->update('contacto');
}

Comentario del Autor:


Bueno leyendo un tuto en ingles vi tu problema que no haz declarado nada de
$this->load->database();
Quedando as tu funcin model:
function mantenimiento_model() {
parent::__construct(); //llamada al constructor de Model.
$this->load->database();
}
As Solucionando el problema de Jorge y el mio.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

46

Ayuda adicional, manuales, textos y notas


Inicio Rpido de Base de Datos: Cdigo de Ejemplo
La pgina siguiente contiene cdigo de ejemplo mostrando como la clase de base de
datos es usada. Para detalles completos por favor lea las pginas individuales
describiendo cada funcin.
Inicializando la Clase de Base de Datos
El cdigo siguiente carga e inicializa la clase de base de datos basado en tu
configuracin:
$this->load->database();
Una vez cargada la clase, est lista para ser usada como se describe a continuacin.
Nota: si todas tus pginas requieren acceso a la base de datos, puedes conectarla
automticamente. Vea la pgina de conexin para detalles.
Consulta Estndar con Mltiples Resultados (Versin Objeto)
$consulta = $this->db->query('SELECT nombre, titulo, email FROM mi_tabla');
foreach ($consulta->result() as $fila)
{
echo $fila->titulo;
echo $fila->nombre;
echo $fila->email;
}
echo 'Resultados Totales: ' . $consulta->num_rows();
La funcin result() de arriba devuelve un arreglo de objetos. Por ejemplo: $fila->titulo
Consulta Estndar con Mltiples Resultados (Versin Arreglo)
$consulta = $this->db->query('SELECT nombre, titulo, email FROM mi_tabla');
foreach ($consulta->result_array() as $fila)
{
echo $fila['titulo'];
echo $fila['nombre'];
echo $fila['email'];
}
La funcin result_array() de arriba devuelve una arreglo de arreglos con ndices comunes.
Por ejemplo: $fila['titulo']
Probando los Resultados

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

47

Si ejecutas consultas que pueden not producir un resultado, eres animado a probar el
resultado antes usando la funcin num_rows():
$consulta = $this->db->query("YOUR QUERY");
if ($consulta->num_rows() > 0)
{
foreach ($consulta->result() as $fila)
{
echo $fila->titulo;
echo $fila->nombre;
echo $fila->body;
}
}
Consulta Estndar Con Un Solo Resultado
$consulta = $this->db->query('SELECT nombre FROM mi_tabla LIMIT 1');
$fila = $consulta->row();
echo $fila->nombre;
La funcin de arriba row() devuelve un objeto. Por ejemplo: $fila->nombre
Consulta Estndar Con Un Solo Resultado (Versin Arreglo)
$consulta = $this->db->query('SELECT nombre FROM mi_tabla LIMIT 1');
$fila = $consulta->row_array();
echo $fila['nombre'];
La funcin de arriba row_array() devuelve un arreglo. Por ejemplo: $fila['nombre']
Insertar Estndar
$sql = "INSERT INTO mitabla (titulo, nombre)
VALUES (".$this->db->escape($titulo).", ".$this->db->escape($nombre).")";
$this->db->query($sql);
echo $this->db->affected_rows();
Consulta Active Record
El Patrn Active Record otorga una forma simplificada de recuperar datos:
$consulta = $this->db->get('nombre_tabla');
foreach ($consulta->result() as $fila)
{
echo $fila->titulo;
}

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

48

La funcin get() de arriba devuelve todos los resultados de la tabla. La clase Active
Record contiene un completo complemento de funciones para trabajar con datos.
Insertar con Active Record
$data = array(
'titulo' => $titulo,
'nombre' => $nombre,
'fecha' => $fecha
);
$this->db->insert('mitabla', $data);
// Produce: INSERT INTO mitabla (titulo, nombre, fecha) VALUES ('{$titulo}', '{$nombre}',
'{$fecha}')

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

49

Clase Active Record


CodeIgniter usa una versin modificada del Patrn de Base de Datos Active Record. Este
patrn permite obtener, insertar y actualizar informacin in tu base de datos con mnima
codificacin. En algunos casos, slo una o dos lneas de cdigo son necesarias para
realizar una accin de base de datos. CodeIgniter no requiere que cada tabla de la base
de datos sea un propio archivo de clase. Se permite una interface ms simplificada
Ms all de la simplicidad, un beneficio mayor de usar la Active Record es que te permite
crear una aplicacin independiente de la base de datos que usa, ya que la sintaxis de
consulta es generada por cada adaptador de base de datos. Tambin permite querys ms
seguras, ya que los valores son controlados automticamente por el sistema.
Nota: Si tienes intenciones de usar tus propias consultas, puedes deshabilitar esta clase
en tu archivo de configuracin de base de datos, permitiendo a la librera de la base de
datos y adaptadores usar menos recursos

Seleccionar Datos

Insertar Datos

Actualizar Datos

Borrar Datos

Mtodos en cadena

Cache de Active Record

Seleccionar Datos
Las siguientes funciones permiten construir una sentencia SELECT SQL.
Nota: Si est usando PHP 5, puede usar mtodos en cadena para una sintaxis ms
compacta. Esto es descripto al final de la pgina.
$this->db->get();
Ejecuta la consulta de seleccin y devuelve el resultado. Puede ser usado solo, para traer
todos los registros de una tabla:
$consulta = $this->db->get('mitabla');
// Produce: SELECT * FROM mitabla
El segundo y tercer parmetro permiten establecer clusulas de lmite y principio:
$consulta = $this->db->get('mitabla', 10, 20);

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

50

// Produce: SELECT * FROM mitabla LIMIT 20, 10 (en MySQL. Otras bases de datos
tienen pequeas diferencias en la sintaxis)
Notar que la funcin de arriba es asignada a la variable llamada $consulta, que puede
ser usada para mostrar los resultados:
$consulta = $this->db->get('mitabla');
foreach ($consulta->result() as $fila)
{
echo $fila->titulo;
}
Por favor visite la pgina de funciones de resultados para una completa discusin acerca
de la generacin de resultados.
$this->db->get_where();
Idntica a la funcin de arriba, excepto que permite agregar una clausula "where" en el
segundo parmetro, en vez de usar la funcin db->where():
$consulta = $this->db->get_where('mitabla', array('id' => $id), $limite, $principio);
Por favor lea sobre la funcin where ms abajo para ms informacin
Nota: get_where() era anteriormente conocida como getwhere(), que ha sido eliminada
$this->db->select();
Permite escribir la porcin de SELECT de tu consulta:
$this->db->select('titulo, contenido, fecha');
$consulta = $this->db->get('mitabla');
// Produce: SELECT titulo, contenido, fecha FROM mitabla
Nota: Si est seleccionando todo (*) de una tabla, no es necesario usar esta funcin.
Cuando se omite, CodeIgniter asume que desa SELECT *
$this->db->select() acepta un opcional segundo parmetro. Si se establece como FALSE,
CodeIgniter no intentar proteger los nombres de campos u tablas. Esto es til si necesita
una consulta de seleccin compuesta.
$this->db->select('(SELECT SUM(pagos.monto) FROM pagos WHERE
pagos.factura_id=4') AS monto_pagado', FALSE);
$consulta = $this->db->get('mitabla');
$this->db->select_max();
Escribe una porcin "SELECT MAX(campo)" de tu consulta. Opcionalmente, puedes
incluir un segunda parmetro para renombrar el campo resultante.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

51

$this->db->select_max('edad');
$consulta = $this->db->get('miembros');
// Produce: SELECT MAX(edad) as edad FROM miembros
$this->db->select_max('edad', 'edad_miembro');
$query = $this->db->get('miembros');
// Produce: SELECT MAX(edad) as edad_miembro FROM miembros
$this->db->select_min();
Escriba una porcin "SELECT MIN(campo)" de tu consulta. Como en select_max(),
puedes opcionalmente incluir un segundo parmetro para renombrar el campo resultante.
$this->db->select_min('edad');
$consulta = $this->db->get('miembros');
// Produce: SELECT MIN(edad) as edad FROM miembros
$this->db->select_avg();
Escriba una porcin "SELECT AVG(campo)" de tu consulta. Como en select_max(),
puedes opcionalmente incluir un segundo parmetro para renombrar el campo resultante.
$this->db->select_avg('edad');
$consulta = $this->db->get('miembros');
// Produce: SELECT AVG(edad) as edad FROM miembros
$this->db->select_sum();
Escriba una porcin "SELECT SUM(campo)" de tu consulta. Como en select_max(),
puedes opcionalmente incluir un segundo parmetro para renombrar el campo resultante.
$this->db->select_sum('edad');
$consulta = $this->db->get('miembros');
// Produce: SELECT SUM(edad) as edad FROM miembros
$this->db->from();
Permite escribir la porcin FROM de la consulta:
$this->db->select('titulo, contenido, fecha');
$this->db->from('mitabla');
$consulta = $this->db->get();
// Produce: SELECT titulo, contenido, fecha FROM mitabla
Nota: Como se mostr antes, la porcin FROM de tu consulta puede ser especificada en
la funcin $this->db->get(), as que use el mtodo que prefiera
$this->db->join();
Permite escribir una porcin JOIN de la consulta:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

52

$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comentarios', 'comentarios.id = blogs.id');
$query = $this->db->get();
// Produce:
// SELECT * FROM blogs
// JOIN comentarios ON comentarios.id = blogs.id
Multiples llamados a la funcin pueden ser hechos si necesita multiples joins en una
consulta.
Si necesita algo distinto al natural JOIN puede especificarlo a travs del tercer parmetro
de la funcin. Las opciones son: left, right, outer, inner, left outer, and right outer.
$this->db->join('comentarios', 'comentarios.id = blogs.id', 'left');
// Produce: LEFT JOIN comentarios ON comentarios.id = blogs.id
$this->db->where();
Est funcin habilita establecer clusulas WHERE usando uno de cutro mtodos:
Nota: Todos los valores pasados a esta funcin son escapados automticamente,
produciendo consultas ms seguras.
1. Mtodo simpre de clave/valor: $this->db->where('nombre', $nombre);
// Produce: WHERE nombre = 'Jose'
Note que el signo igual es agregado para uested.
Si utiliza multiples llamadas a la funcin, ellos sern encadenados juntos con un
AND entre ellos:
$this->db->where('nombre', $nombre);
$this->db->where('titulo', $titulo);
$this->db->where('estado', $estado);
// WHERE nombre = 'Jose' AND titulo = 'jefe' AND estado = 'activo'
2. Mtodo especial de clave/valor:
Se puede incluir un operador en el primer parmetro con el objeto de controlar la
comparacin:
$this->db->where('nombre !=', $nombre);
$this->db->where('id <', $id);
// Produce: WHERE nombre != 'Jose' AND id < 45

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

53

3. Mtodo de arreglo asociativo: $arreglo = array('nombre' => $nombre, 'titulo' =>


$titulo, 'status' => $status);
$this->db->where($arreglo);
// Produce: WHERE nombre = 'Joe' AND titulo = 'boss' AND status = 'active'
Puede incluir operadores propios cuando se usa este mtodo tambin:
$array = array('nombre !=' => $nombre, 'id <' => $id, 'date >' => $date);
$this->db->where($array);
4. Cadena especial:
Se puede escribir clusulas propias manualmente:
$where = "nombre='Jose' AND estado='jefe' OR estado='activo'";
$this->db->where($where);
$this->db->or_where();
Est funcin es idntica a la de arriba, excepto que multiples instancias son unidas por
OR:
$this->db->where('nombre !=', $nombre);
$this->db->or_where('id >', $id);
// Produce: WHERE nombre != 'Joe' OR id > 50
Nota: or_where() era anteriormente conocida como orwhere(), la cual ha sido deprecada.
$this->db->where_in();
Genera WHERE campo IN ('item', 'item') unido con AND si corresponde
$nombres = array('Frank', 'Todd', 'James');
$this->db->where_in('username', $nombres);
// Produce: AND WHERE username IN ('Frank', 'Todd', 'James')
$this->db->or_where_in();
Genera WHERE campo IN ('item', 'item') unido con OR si corresponde
$nombres = array('Frank', 'Todd', 'James');
$this->db->or_where_in('username', $nombres);
// Produce: OR WHERE username IN ('Frank', 'Todd', 'James')
$this->db->where_not_in();
Genera WHERE campo NOT IN ('item', 'item') unido con AND si corresponde

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

54

$nombres = array('Frank', 'Todd', 'James');


$this->db->where_not_in('username', $nombres);
// Produce: AND WHERE username NOT IN ('Frank', 'Todd', 'James')
$this->db->or_where_not_in();
Genera WHERE campo NOT IN ('item', 'item') unido con OR si corresponde
$nombres = array('Frank', 'Todd', 'James');
$this->db->or_where_not_in('username', $nombres);
// Produces: OR WHERE username NOT IN ('Frank', 'Todd', 'James')
$this->db->like();
Est funcin permite generar clusulas LIKE, tiles para realizar bsquedas.
Nota: Todos los valores pasados a esta funcin son escapados automticamente.
1. Mtodo simple de clave/valor: $this->db->like('titulo', 'match');
// Produce: WHERE titulo LIKE '%match%'
Si utiliza mltiples llamados a la funcin, ellos sern encadenados con AND entre
ellos:
$this->db->like('titulo', 'match');
$this->db->like('body', 'match');
// WHERE titulo LIKE '%match%' AND body LIKE '%match% Si desea controlar
donde la wildcard (%) es ubicada, puede utilizar un tercer parmetro opcional. Las
opciones son 'before', 'after' y 'both' (por defecto). $this->db->like('titulo', 'match',
'before');
// Produces: WHERE titulo LIKE '%match'
$this->db->like('titulo', 'match', 'after');
// Produces: WHERE titulo LIKE 'match%'
$this->db->like('titulo', 'match', 'both');
// Produces: WHERE titulo LIKE '%match%'
2. Mtodo de arreglo asociativo: $array = array('titulo' => $match, 'pagina1' =>
$match, 'pagina2' => $match);
$this->db->like($array);
// WHERE titulo LIKE '%match%' AND pagina1 LIKE '%match%' AND pagina2
LIKE '%match%'
$this->db->or_like();
Est funcin es idntica a la anterior, excepto que multiples instances son unidas por OR:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

55

$this->db->like('titulo', 'match');
$this->db->or_like('body', $match);
// WHERE titulo LIKE '%match%' OR body LIKE '%match%'
Nota: or_like() era anteriormente conocida como orlike(), la cual ha sido deprecada.
$this->db->not_like();
Esta funcin es idntica a like(), excepto que genera sentencias NOT LIKE:
$this->db->not_like('titulo', 'match');
// WHERE titulo NOT LIKE '%match%
$this->db->or_not_like();
Esta funcin es idntica a not_like(), excepto que muchas instancias son unidas por OR:
$this->db->like('titulo', 'match');
$this->db->or_not_like('body', 'match');
// WHERE titulo LIKE '%match% OR body NOT LIKE '%match%'
$this->db->group_by();
Permite escribir porciones GROUP BY de la consulta:
$this->db->group_by("titulo");
// Produces: GROUP BY titulo
Tambin se puede pasar un arreglo de multiples valores:
$this->db->group_by(array("titulo", "fecha"));
// Produce: GROUP BY titulo, fecha
Nota: group_by() era anteriormente conocida como groupby(), la cual ha sido deprecada.
$this->db->distinct();
Agrega la palabra clave "DISTINCT" a la consulta
$this->db->distinct();
$this->db->get('tabla');
// Produce: SELECT DISTINCT * FROM tabla
$this->db->having();
Permite escribir la porcin HAVING de la consulta:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

56

$this->db->having('user_id = 45');
// Produce: HAVING user_id = 45
$this->db->having('user_id', 45);
// Produce: HAVING user_id = 45
Tambin puede pasar un arreglo de multiples valores:
$this->db->having(array('titulo =' => 'Mi titulo', 'id <' => $id));
// Produce: HAVING titulo = 'Mi titulo', id < 45
$this->db->or_having();
Idntica a having(), slo que separa mltiples clusulas con "OR".
$this->db->order_by();
Permite establecer una clusula de ORDER BY. El primer parmetro contiene el nombre
de la columna por la que desea ordenar. El segundo parmetro establece la direccin del
resultado. Las opciones son asc or desc, or random.
$this->db->order_by("titulo", "desc");
// Produce: ORDER BY titulo DESC
Tambin puede pasar su propia cadena en el primer parmetro:
$this->db->order_by('titulo desc, nombre asc');
// Produce: ORDER BY titulo DESC, nombre ASC
O mltiples llamados a la funcin pueden ser hechos si necesita mltiples campos.
$this->db->order_by("titulo", "desc");
$this->db->order_by("nombre", "asc");
// Produces: ORDER BY titulo DESC, nombre ASC
Nota: order_by() era anteriormente conocida como orderby(), la cual a sido deprecada.
Note: ordernamiento aleatorio no es soportado actualmetne en los "drivers" Oracle o
MSSQL. Estos sern predeterminados como 'ASC'.
$this->db->limit();
Permite limitar el nmero de filas que desea que devuelva la consulta:
$this->db->limit(10);
// Produce: LIMIT 10

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

57

El segundo parmetro permite establecer el inicio del resultado.


$this->db->limit(10, 20);
// Produce: LIMIT 20, 10 (in MySQL. Otras bases de datos tienen pequeas diferencias de
sintaxis.)
$this->db->count_all_results();
Permite determinar el nmero de filas de una consulta Active Record en particular. Las
consultas aceptan las restricciones de Active Record tales como where(), or_where(),
like(), or_like(), etc. Ejemplo:
echo $this->db->count_all_results('mi_tabla');
// Produce un entero, como 25
$this->db->like('titulo', 'match');
$this->db->from('mi_tabla');
echo $this->db->count_all_results();
// Produce un entero, como 17
$this->db->count_all();
Permite determinar el nmero de filas de una tabla en particular. Permits you to determine
the number of rows in a particular table. Enve el nombre de la tabla como primer
parmetro. Por ejemplo:
echo $this->db->count_all('mi_tabla');
// Produce un entero, como 25
Insertar Datos
$this->db->insert();
Genera una cadena de insercin basado en los datos que se suministren, y ejectua la
consulta. Se puede pasar un arreglo o un objeto a la funcin. Aqu hay un ejemplo,
usando un arreglo:
$data = array(
'titulo' => 'Mi titulo' ,
'nombre' => 'Mi nombre' ,
'fecha' => 'Mi fecha'
);
$this->db->insert('mitabla', $data);
// Produces: INSERT INTO mitabla (titulo, nombre, fecha) VALUES ('Mi titulo', 'Mi nombre',
'Mi fecha')
El primer parmetro contiene el nombre de la table, la segunda es un arreglo de valores.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

58

Aqu hay un ejemplo usando un objeto:


/*
class Myclass {
var $titulo = 'Mi titulo';
var $contenido = 'Mi Contenido';
var $fecha = 'Mi Fecha';
}
*/
$objeto = new Myclass;
$this->db->insert('mitabla', $objeto);
// Produce: INSERT INTO mitabla (titulo, contenido, fecha) VALUES ('Mi titulo', 'Mi
Contenido', 'Mi Fecha')
El primer parmetro contendr el nombre de la tabla, el segundo es un arreglo asociativa
de valores.
Nota: Todos los valores son escapados automticamente produciendo consultas ms
seguras.
$this->db->insert_batch();
Genera una cadena insert de SQL basada en los datos provistos, y ejecuta la consulta. A
la funcin se le puede pasar tanto un array como un objeto. Aqu hay un ejemplo usando
un array:
$data = array(
array(
'title' => 'Mi titulo' ,
'name' => 'Mi Nombre' ,
'date' => 'Mi fecha'
),
array(
'title' => 'Otro titulo' ,
'name' => 'Otro Nombre' ,
'date' => 'Otra fecha'
)
);
$this->db->update_batch('mi_tabla', $data);
// Produces: INSERT INTO mi_tabla (titulo, nombre, fecha) VALUES ('Mi titulo', 'Mi
nombre', 'Mi fecha'), ('Otro titulo', 'Otro nombre', 'Otra fecha')
El primer parmetro contendr el nombre de la tabla y el segundo es un array asociativo
de valores.
Nota: Todos los valores pasados a esta funcin se escapan, produciendo consultas ms
seguras.

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

59

$this->db->set();
Esta funcin habilita permite establecer valores para insertar o actualizar.
Puede ser usado en vez de pasar un arreglo de datos directamente a las funciones
de insert o update:
$this->db->set('nombre', $nombre);
$this->db->insert('mitabla');
// Produce: INSERT INTO mitabla (nombre) VALUES ('{$nombre}')
Si utiliza mltiples llamados a la funcin, ellos sern ensamblados apropiadamente
basados en si est insertando o actualizando:
$this->db->set('nombre', $nombre);
$this->db->set('titulo', $titulo);
$this->db->set('estado', $estado);
$this->db->insert('mytable');
set() tambin aceptar un opcional tercer parmetro ($escape), que prevendr datos de
ser escapado si es establecido como FALSE. Para ilustrar la diferencia, aqu est set()
usado con y sin el parmetro de escape.
$this->db->set('campo', 'campo+1', FALSE);
$this->db->insert('mitabla');
// resulta INSERT INTO mitabla (campo) VALUES (campo+1)
$this->db->set('campo', 'campo+1');
$this->db->insert('mitabla');
// resulta INSERT INTO mitabla (campo) VALUES ('campo+1')
Tambin puede pasar un arreglo asociativo a esta funcin:
$arreglo = array('nombre' => $nombre, 'titulo' => $titulo, 'estado' => $estado);
$this->db->set($arreglo);
$this->db->insert('mitabla');
O un objeto:
/*
class Miclase {
var $titulo = 'Mi titulo';
var $content = 'Mi Content';
var $date = 'Mi Date';
}
*/
$objeto = new Miclase;
$this->db->set($objeto);

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

60

$this->db->insert('mitabla');
Actualizar Datos
$this->db->update();
Genera una cadena de actualizacin y corre la consulta basado en los datos
suministrados. Puede pasar una arreglo o un objeto a la funcin. Aqu hay un ejemplo,
usando un arreglo:
$data = array(
'titulo' => $titulo,
'nombre' => $nombre,
'fecha' => $fecha
);
$this->db->where('id', $id);
$this->db->update('mitabla', $data);
// Produces:
// UPDATE mitabla
// SET titulo = '{$titulo}', nombre = '{$nombre}', fecha = '{$fecha}'
// WHERE id = $id
O puede suministrar un objeto:
/*
class Miclase {
var $titulo = 'My titulo';
var $contenido = 'My Contenido';
var $fecha = 'My Fecha';
}
*/
$objeto = new Miclase;
$this->db->where('id', $id);
$this->db->update('mitabla', $objeto);
// Produce:
// UPDATE mitabla
// SET titulo = '{$titulo}', nombre = '{$nombre}', fecha = '{$fecha}'
// WHERE id = $id
Nota: Todos los valores son escapados automticamente produciendo consulta ms
seguras.
Notar el uso de la funcin $this->db->where(), permitiendo establecer una clusula
WHERE. Opcionalmente, puede pasar informacin directamente como una cadena:
$this->db->update('mitabla', $data, "id = 4");

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

61

O como un arreglo:
$this->db->update('mitabla', $data, array('id' => $id));
Tambin se puede usar la funcin $this->db->set() descripta anteriormente, cuando se
efectan actializaciones.

Borrar Datos
$this->db->delete();
Genera una cadena de eliminacin SQL y ejecuta la consulta.
$this->db->delete('mitabla', array('id' => $id));
// Produce:
// DELETE FROM mitabla
// WHERE id = $id
El primer parmetro es el nombre de la tabla, el segundo la clusula WHERE. Tambin
puede usar las funciones where() o or_where() en vez de pasar los datos como segundo
parmetro de la funcin:
$this->db->where('id', $id);
$this->db->delete('mitabla');
// Produce:
// DELETE FROM mitabla
// WHERE id = $id
Un arreglo de nombres de tablas puede ser pasada a delete() si desea eliminar datos de
ms de una tabla.
$tablas = array('tabla1', 'tabla2', 'tabla3');
$this->db->where('id', '5');
$this->db->delete($tablas);
Si desea eliminar todos los datos de una tabla, puede usar la funcin truncate(), o
empty_table().
$this->db->empty_table();
Genera una cadena SQL de eliminacin y ejecuta la consulta.
$this->db->empty_table('mitabla');
// Produce:
// DELETE FROM mitabla

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

62

$this->db->truncate();
Genera una cadena SQL de truncado y ejecuta una consulta.
$this->db->from('mitabla');
$this->db->truncate();
// or
$this->db->truncate('mitabla');
// Produce:
// TRUNCATE mitabla
Nota: Si el comando TRUNCATE no est disponible, truncate() ejecutar "DELETE FROM
tabla".

Mtodos en cadena
Mtodos en cadena permite simplificar tu sintaxis conectando mltiples funciones.
Considere este ejemplo:
$this->db->select('titulo')->from('mitabla')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
Note: Mtodos en cadena slo funciona con PHP 5.

Active Record Caching


Mientras no es un verdadero cacheo, Active Record permite salvar (o "cache") ciertas
partes de tus consultas para reusar despus. Normalmente, cuando una llamada a Active
Record es completada, toda la informacin es reinizializada para el prximo llamado. Con
cacheo, puede prevenir esta reinizializacin, y reusar la informacin fcilmente.
Las llamadas a cache son acumulables. Si ejecuta 2 llamadas a cached select(), y luego 2
llamadas a no cached select(), esto ersultar en 4 llamadas a select(). Hay tres funciones
de cacheo disponibles:
$this->db->start_cache()
Esta funcin debe ser llamada para comenzar a cachear. Todas las consultas Active
Record del tipo correcto (ver debajo para las consultas soportadas) son guardadas para
uso posterior.
$this->db->stop_cache()
Esta funcin puede ser llamada para parar el cacheo.
$this->db->flush_cache()

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

63

Esta funcin elimina todos los items cacheados por la Active Record.
Aqu hay un ejemplo de uso:
$this->db->start_cache();
$this->db->select('campo1');
$this->db->stop_cache();
$this->db->get('tabla');
// Results in:
// SELECT `campo1` FROM (`tabla`)
$this->db->select('campo2');
$this->db->get('tabla');
// Results in:
// SELECT `campo1`, `campo2` FROM (`tabla`)
$this->db->flush_cache();
$this->db->select('campo2');
$this->db->get('tabla');
// Results in:
// SELECT `campo2` FROM (`tabla`)

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

64

Form Helper
The Form Helper file contains functions that assist in working with forms.
Loading this Helper
This helper is loaded using the following code:
$this->load->helper('form');
The following functions are available:
form_open()
Creates an opening form tag with a base URL built from your config preferences. It will
optionally let you add form attributes and hidden input fields, and will always add the
attribute accept-charset based on the charset value in your config file.
The main benefit of using this tag rather than hard coding your own HTML is that it permits
your site to be more portable in the event your URLs ever change.
Here's a simple example:
echo form_open('email/send');
The above example would create a form that points to your base URL plus the
"email/send" URI segments, like this:
<form method="post" accept-charset="utf-8"
action="http:/example.com/index.php/email/send" />
Adding Attributes
Attributes can be added by passing an associative array to the second parameter, like this:
$attributes = array('class' => 'email', 'id' => 'myform');
echo form_open('email/send', $attributes);
The above example would create a form similar to this:
<form method="post" accept-charset="utf-8"
action="http:/example.com/index.php/email/send" class="email" id="myform" />
Adding Hidden Input Fields
Hidden fields can be added by passing an associative array to the third parameter, like
this:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

65

$hidden = array('username' => 'Joe', 'member_id' => '234');


echo form_open('email/send', '', $hidden);
The above example would create a form similar to this:
<form method="post" accept-charset="utf-8"
action="http:/example.com/index.php/email/send">
<input type="hidden" name="username" value="Joe" />
<input type="hidden" name="member_id" value="234" />
form_open_multipart()
This function is absolutely identical to the form_open() tag above except that it adds a
multipart attribute, which is necessary if you would like to use the form to upload files with.
form_hidden()
Lets you generate hidden input fields. You can either submit a name/value string to create
one field:
form_hidden('username', 'johndoe');
// Would produce:
<input type="hidden" name="username" value="johndoe" />
Or you can submit an associative array to create multiple fields:
$data = array(
'name' => 'John Doe',
'email' => 'john@example.com',
'url' => 'http://example.com'
);
echo form_hidden($data);
// Would produce:
<input type="hidden" name="name" value="John Doe" />
<input type="hidden" name="email" value="john@example.com" />
<input type="hidden" name="url" value="http://example.com" />
form_input()
Lets you generate a standard text input field. You can minimally pass the field name and
value in the first and second parameter:
echo form_input('username', 'johndoe');
Or you can pass an associative array containing any data you wish your form to contain:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

66

$data = array(
'name'
=> 'username',
'id'
=> 'username',
'value'
=> 'johndoe',
'maxlength' => '100',
'size'
=> '50',
'style'
=> 'width:50%',
);
echo form_input($data);
// Would produce:
<input type="text" name="username" id="username" value="johndoe" maxlength="100"
size="50" style="width:50%" />
If you would like your form to contain some additional data, like Javascript, you can pass it
as a string in the third parameter:
$js = 'onClick="some_function()"';
echo form_input('username', 'johndoe', $js);
form_password()
This function is identical in all respects to the form_input() function above except that is
sets it as a "password" type.
form_upload()
This function is identical in all respects to the form_input() function above except that is
sets it as a "file" type, allowing it to be used to upload files.
form_textarea()
This function is identical in all respects to the form_input() function above except that it
generates a "textarea" type. Note: Instead of the "maxlength" and "size" attributes in the
above example, you will instead specify "rows" and "cols".
form_dropdown()
Lets you create a standard drop-down field. The first parameter will contain the name of
the field, the second parameter will contain an associative array of options, and the third
parameter will contain the value you wish to be selected. You can also pass an array of
multiple items through the third parameter, and CodeIgniter will create a multiple select for
you. Example:
$options = array(
'small' => 'Small Shirt',
'med' => 'Medium Shirt',
'large' => 'Large Shirt',
'xlarge' => 'Extra Large Shirt',
);
Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

67

$shirts_on_sale = array('small', 'large');


echo form_dropdown('shirts', $options, 'large');
// Would produce:
<select name="shirts">
<option value="small">Small Shirt</option>
<option value="med">Medium Shirt</option>
<option value="large" selected="selected">Large Shirt</option>
<option value="xlarge">Extra Large Shirt</option>
</select>
echo form_dropdown('shirts', $options, $shirts_on_sale);
// Would produce:
<select name="shirts" multiple="multiple">
<option value="small" selected="selected">Small Shirt</option>
<option value="med">Medium Shirt</option>
<option value="large" selected="selected">Large Shirt</option>
<option value="xlarge">Extra Large Shirt</option>
</select>
If you would like the opening <select> to contain additional data, like an id attribute or
JavaScript, you can pass it as a string in the fourth parameter:
$js = 'id="shirts" onChange="some_function();"';
echo form_dropdown('shirts', $options, 'large', $js);
If the array passed as $options is a multidimensional array, form_dropdown() will produce
an <optgroup> with the array key as the label.
form_multiselect()
Lets you create a standard multiselect field. The first parameter will contain the name of
the field, the second parameter will contain an associative array of options, and the third
parameter will contain the value or values you wish to be selected. The parameter usage is
identical to using form_dropdown() above, except of course that the name of the field will
need to use POST array syntax, e.g. foo[].
form_fieldset()
Lets you generate fieldset/legend fields.
echo form_fieldset('Address Information');
echo "<p>fieldset content here</p>\n";
echo form_fieldset_close();
// Produces
<fieldset>

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

68

<legend>Address Information</legend>
<p>form content here</p>
</fieldset>
Similar to other functions, you can submit an associative array in the second parameter if
you prefer to set additional attributes.
$attributes = array('id' => 'address_info', 'class' => 'address_info');
echo form_fieldset('Address Information', $attributes);
echo "<p>fieldset content here</p>\n";
echo form_fieldset_close();
// Produces
<fieldset id="address_info" class="address_info">
<legend>Address Information</legend>
<p>form content here</p>
</fieldset>
form_fieldset_close()
Produces a closing </fieldset> tag. The only advantage to using this function is it permits
you to pass data to it which will be added below the tag. For example:
$string = "</div></div>";
echo form_fieldset_close($string);
// Would produce:
</fieldset>
</div></div>
form_checkbox()
Lets you generate a checkbox field. Simple example:
echo form_checkbox('newsletter', 'accept', TRUE);
// Would produce:
<input type="checkbox" name="newsletter" value="accept" checked="checked" />
The third parameter contains a boolean TRUE/FALSE to determine whether the box
should be checked or not.
Similar to the other form functions in this helper, you can also pass an array of attributes to
the function:
$data = array(
'name'
=> 'newsletter',
'id'
=> 'newsletter',
'value'
=> 'accept',
'checked' => TRUE,
'style'
=> 'margin:10px',
Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

69

);
echo form_checkbox($data);
// Would produce:
<input type="checkbox" name="newsletter" id="newsletter" value="accept"
checked="checked" style="margin:10px" />
As with other functions, if you would like the tag to contain additional data, like JavaScript,
you can pass it as a string in the fourth parameter:
$js = 'onClick="some_function()"';
echo form_checkbox('newsletter', 'accept', TRUE, $js)
form_radio()
This function is identical in all respects to the form_checkbox() function above except that
is sets it as a "radio" type.
form_submit()
Lets you generate a standard submit button. Simple example:
echo form_submit('mysubmit', 'Submit Post!');
// Would produce:
<input type="submit" name="mysubmit" value="Submit Post!" />
Similar to other functions, you can submit an associative array in the first parameter if you
prefer to set your own attributes. The third parameter lets you add extra data to your form,
like JavaScript.
form_label()
Lets you generate a <label>. Simple example:
echo form_label('What is your Name', 'username');
// Would produce:
<label for="username">What is your Name</label>
Similar to other functions, you can submit an associative array in the third parameter if you
prefer to set additional attributes.
$attributes = array(
'class' => 'mycustomclass',
'style' => 'color: #000;',
);
echo form_label('What is your Name', 'username', $attributes);

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

70

// Would produce:
<label for="username" class="mycustomclass" style="color: #000;">What is your
Name</label>
form_reset()
Lets you generate a standard reset button. Use is identical to form_submit().
form_button()
Lets you generate a standard button element. You can minimally pass the button name
and content in the first and second parameter:
echo form_button('name','content');
// Would produce
<button name="name" type="button">Content</button> Or you can pass an associative
array containing any data you wish your form to contain: $data = array(
'name' => 'button',
'id' => 'button',
'value' => 'true',
'type' => 'reset',
'content' => 'Reset'
);
echo form_button($data);
// Would produce:
<button name="button" id="button" value="true" type="reset">Reset</button> If you would
like your form to contain some additional data, like JavaScript, you can pass it as a string
in the third parameter: $js = 'onClick="some_function()"';
echo form_button('mybutton', 'Click Me', $js);
form_close()
Produces a closing </form> tag. The only advantage to using this function is it permits you
to pass data to it which will be added below the tag. For example:
$string = "</div></div>";
echo form_close($string);
// Would produce:
</form>
</div></div>
form_prep()
Allows you to safely use HTML and characters such as quotes within form elements
without breaking out of the form. Consider this example:

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

71

$string = 'Here is a string containing "quoted" text.';


<input type="text" name="myform" value="$string" />
Since the above string contains a set of quotes it will cause the form to break. The
form_prep function converts HTML so that it can be used safely:
<input type="text" name="myform" value="<?php echo form_prep($string); ?>" />
Note: If you use any of the form helper functions listed in this page the form values will be
prepped automatically, so there is no need to call this function. Use it only if you are
creating your own form elements.
set_value()
Permits you to set the value of an input form or textarea. You must supply the field name
via the first parameter of the function. The second (optional) parameter allows you to set a
default value for the form. Example:
<input type="text" name="quantity" value="<?php echo set_value('quantity', '0'); ?>"
size="50" />
The above form will show "0" when loaded for the first time.
set_select()
If you use a <select> menu, this function permits you to display the menu item that was
selected. The first parameter must contain the name of the select menu, the second
parameter must contain the value of each item, and the third (optional) parameter lets you
set an item as the default (use boolean TRUE/FALSE).
Example:
<select name="myselect">
<option value="one" <?php echo set_select('myselect', 'one', TRUE); ?> >One</option>
<option value="two" <?php echo set_select('myselect', 'two'); ?> >Two</option>
<option value="three" <?php echo set_select('myselect', 'three'); ?> >Three</option>
</select>
set_checkbox()
Permits you to display a checkbox in the state it was submitted. The first parameter must
contain the name of the checkbox, the second parameter must contain its value, and the
third (optional) parameter lets you set an item as the default (use boolean TRUE/FALSE).
Example:
<input type="checkbox" name="mycheck" value="1" <?php echo set_checkbox('mycheck',
'1'); ?> />
<input type="checkbox" name="mycheck" value="2" <?php echo set_checkbox('mycheck',
'2'); ?> />

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

72

set_radio()
Permits you to display radio buttons in the state they were submitted. This function is
identical to the set_checkbox() function above.
<input type="radio" name="myradio" value="1" <?php echo set_radio('myradio', '1',
TRUE); ?> />
<input type="radio" name="myradio" value="2" <?php echo set_radio('myradio', '2'); ?> />

Informacin tomada de: http://www.slideshare.net/pto0404/seminario-3-reutilizacin-del-software

73