Tecnologías
web
Las
tecnologías web implican un conjunto de herramientas que nos facilitarán lograr
mejores resultados a la hora del desarrollo de un sitio web. Las
tecnologías Web sirven para acceder a los recursos de conocimiento disponibles
en Internet o en las intranets utilizando un navegador. Están muy extendidas
por muchas razones: facilitan el desarrollo de sistemas de Gestión del
Conocimiento (en lo adelante GC), su flexibilidad en términos de escalabilidad,
es decir, a la hora de expandir el sistema; su sencillez de uso y que imitan la
forma de relacionarse de las personas, al poner a disposición de todos el
conocimiento de los demás, por encima de jerarquías, barreras formales u otras
cuestiones. Estas tecnologías pueden llegar a proporcionar recursos
estratégicos, pero, evidentemente, no por la tecnología en sí misma, que está
disponible ampliamente, sino por lo fácil que es personalizarla y construir con
ella sistemas de GC propietarios de la empresa.
Formularios
con PHP
Los Formularios no forman
parte de PHP, sino del lenguaje estándar de Internet, HTML. Vamos a dedicar en
este capítulo algunas líneas al HTML, para entrar posteriormente a tratarlos con
PHP.
Todo formulario comienza con
la etiqueta <FORM ACTION="lo_que_sea.php"
METHOD="post/get"> . Con . Con ACTION indicamos el script que va
procesar la información que recogemos en el formulario, mientras que METHOD nos
indica si el usuario del formulario va ha
enviar datos ( post ) o recogerlos ( get ). La etiqueta <FORM>
indica el final del formulario.
A partir de la etiqueta
<FORM> vienen los campos de entrada de datos que pueden ser:
Cuadro de texto:
<input
type="text" name="nombre" size="20" value="jose">
Cuadro de texto con barras
de desplazamiento:
<textarea
rows="5" name="descripcion" cols="20">Es de
color rojo</textarea>
Casilla de verificación:
<input type="checkbox"
name="cambiar" value="ON">
Botón de opción:
<input
type="radio" value="azul" checked
name="color">
Menú desplegable:
<select
size="1" name="dia">
<option selected
value="lunes">lunes</option>
<option>martes</option>
<option value="miercoles">miércoles</option>
</select>
Boton de comando:
<input type="submit"
value="enviar" name="enviar">
Campo oculto:
<input
type="hidden" name="edad" value="55">
Este último tipo de campo
resulta especialmente útil cuando que remos pasar datos ocultos en un
formulario.
Como habrás observado todos
lo tipos de campo tienen un modificador llamado name , que no es otro que el
nombre de la variable con la cual recogeremos los datos en el script indicado
por el modificador ACTION de la etiqueta FORM FORM , con value establecemos un
valor por defecto.
A continuación veamos un
ejemplo, para lo cual crearemos un formulario en HTML como el que sigue y lo
llamaremos formulario.htm :
<HTML>
<BODY>
<FORM METHOD="post"
ACTION="mis_datos.php">
<input type="hidden"
name="edad" value="55">
<p>Tu nombre <input
type="text" name="nombre" size="30"
value="jose"></p>
<p>Tu sistema favorito
<select
size="1" name="sistema">
<option selected
value="Linux">Linux</option>
<option
value="Unix">Unix</option>
<option
value="Macintosh">Macintosh</option>
<option
value=&qmargin-left: 75"><option value="Windows">Windows</option>
</select></p>
<p>¿Te gusta el futbol
? <input type="checkbox" name="futbol"
value="ON"></p>
<p>¿Cual es tu
sexo?</p>
<blockquote>
<p>Hombre<input
type="radio" value="hombre" checked
name="sexo"></p>
<p>Mujer <input
type="radio" name="sexo"
value="mujer"></p>
</blockquote>
<p>Aficiones</p>
<p><textarea
rows="5" name="aficiones"
cols="28"></textarea></p>
<p><input
type="submit" value="Enviar datos"
name="enviar">
<input
type="res-left: 50"> <input type="reset" value="Restablecer"
name="B2"></p>
</FORM>
</BODY>
<HTML>
Y ahora creemos el script
PHP llamado desde le formulario mis_datos.php :
Todos los datos se
encuentran en la variable $_POST, ya que el formulario está enviado por el
método post.
<?PHP;
if (isset($_POST['enviar'])
{
echo "Hola
<b>" . $_POST['nombre'] . "</b> que tal
estás<BR>n";
echo "Eres " .
$_POST['sexo'] . "<BR>n";
echo "Tienes " .
$_POST['edad'] . "<BR>n";
echo "Tu sistema
favorito es " . $_POST['sistema'] . "<BR>n";
if (isset($_POST['futbol'])
{
echo "Te gusta el
futbol <BR>n";
} else odigo" style="margin-left:
50">} else {
echo "NO te gusta el
futbol <BR>n";
}
if ($_POST['aficiones'] !=
"") {
echo "Tus aficiones
son: <BR>n";
echo
nl2br($_POST['aficiones']);
} else {
echo "NO tienes
aficiones <BR>n";
}
}
echo "<a
href='formulario.htm'>VOLVER AL FORMULARIO</a>"
?>
Una vez rellenados los datos
del formulario, pulsamos el botón Enviar datos , con lo que le campo enviar
toma lo que su etiqueta value indica, es decir enviar="Enviar datos"
. En nuestro script lo primero que evaluamos es que se haya enviado el formulario, y para ello
nada mejor que comprobar que la variable $enviar no está vacía. Le ponemos el
signo dólar delante a enviar , ponemos el signo dólar delante a enviar , ya que
en PHP todas las variables se les refiere con este signo.
Hay que tener en cuenta que
si fusionáramos el código de ambos ficheros, nos ahorraríamos uno, pero no
también se puede hacer en dos como lo estamos haciendo. Si la variable $enviar
está vacia, enviamos el formulario.
<?PHP;
if ($enviar) {
echo "Hola <b>"
. $nombre . "</b> que tal estás<BR>n";
echo "Eres " .
$sexo . "<BR>n";
echo "Tienes " .
$edad . "<BR>n";
echo "Tu sistema favorito
es " . $sistema . "<BR>n";
if ($futbol) {
echo "Te gusta el
futbol <BR>n";
} else {
echo "NO te gusta el
futbol <BR>n";
}
if ($aficiones !=
"") {
< stuot;)>
echo "Tus aficiones
son: <BR>n";
echo nl2br($aficiones);
} else {
echo "NO tienes
aficiones <BR>n";
}
echo "<a href='$PHP_SELF'>VOLVER
AL FORMULARIO</a>"
} else {
<HTML>
<BODY>
<FORM
METHOD="post" ACTION="<?PHP echo $PHP_SELF ?>">
<input type="hidden"
name="edad" value="55">
<p>Tu nombre <input
type="text" name="nombre" size="30" nombre"
size="30" value="jose"></p>
<p>Tu sistema favorito
<select
size="1" name="sistema">
<option selected
value="Linux">Linux</option>
<option
value="Unix">Unix</option>
<option value="Macintosh">Macintosh</option>
<option value="Windows">Windows</option>
</select></p>
<p>¿Te gusta el futbol
? <input type="checkbox" name="futbol"
value="ON"></p>
<p>¿Cual es tu
sexo?</p>
<blockquote>
<p>Hombre<input
type="radio" value="hombre" checked
name="sexo"></p>
<p>="codigo"
style="margin-left: 100"><p>Mujer <input
type="radio" name="sexo"
value="mujer"></p>
</blockquote>
<p>Aficiones</p>
<p><textarea
rows="5" name="aficiones"
cols="28"></textarea></p>
<p><input
type="submit" value="Enviar datos"
name="enviar">
<input
type="reset" value="Restablecer"
name="B2"></p>
</FORM>
</BODY>
</HTML>
<?PHP
} //fin IF
?>
La variable de entorno
$PHP_SELF , es una variable de entorno que nos devuelve el nombre del script
que estamos ejecutando. Y por último, hacer notar el uso de la función nl2br()
, nl2br() , con la cuál sustituimos los retornos de carro del texto, los cuáles no reconocen los navegadores, por la etiqueta
<BR> .
Procesar
variables de formularios. POST en PHP
Este tipo de transferencia es de gran
utilidad ya que nos permite interaccionar directamente con el usuario.
El proceso es similar al
explicado para las URLs. Primeramente, presentamos una primera página con el
formulario clásico a rellenar y las variables son recogidas en una segunda
página que las procesa:
No siempre se definen
automáticamente las variables recibidas por el formulario en las páginas web,
depende de una variable de configuración de PHP: register_globals, que tiene
que estar activada para que así sea. Ver comentarios del artículo al final de
la página para más información.
<HTML>
<HEAD>
<TITLE>formulario.html</TITLE>
</HEAD>
<BODY>
<FORM
METHOD="POST" ACTION="destino2.php">
Nombre<br>
<INPUT
TYPE="TEXT" NAME="nombre"><br>
Apellidos<br>
<INPUT
TYPE="TEXT" NAME="apellidos"><br>
<INPUT
TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>destino2.php</TITLE>
</HEAD>
<BODY>
<?
echo
"Variable $nombre: $nombre <br>n";
echo
"Variable $apellidos: $apellidos <br>n"
?>
</BODY>
</HTML>
Ejecutar
ejemplo
$HTTP_POST_VARS
Recordamos que es posible
recopilar en una variable tipo array el conjunto de variables que han sido
enviadas al script por este método a partir de la variable de sistema
$HTTP_POST_VARS.
echo "Variable $nombre:
" . $HTTP_POST_VARS["nombre"] . "<br>n";
Nota: Aunque podamos recoger
variables con este array asociativo o utilizar directamente las variables que
se definen en nuestra página, resulta más seguro utilizar $HTTP_POST_VARS por
dos razones, la primera que así nos aseguramos que esa varible viene realmente
de un formulario y la segunda, que así nuestro código será más claro cuando lo
volvamos a leer, porque quedará especificado que esa variable estamos
recibiéndola por un formulario.
$_POST
A partir de PHP 4.1.0 se pueden
recoger las variables de formulario utilizando también el array asociativo
$_POST, que es el mismo que $HTTP_POST_VARS, pero más corto de escribir.
Ejemplo
de restricción de acceso por edad
Para continuar aportando
ejemplos al uso de formularios vamos a realizar una página que muestra solicita
la edad del visitante y, dependiendo de dicha edad, permita o no visualizar el
contenido de la web. A los mayores de 18 años se les permite ver la página y a
los menores no.
El ejemplo es muy sencillo y
no valdría tal cual está para utilizarlo a modo de una verdadera restricción de
acceso. Únicamente nos sirve para saber cómo obtener datos de un formulario y
como tratarlos para realizar una u otra acción, dependiendo de su valor.
La página del formulario,
que hemos llamado edad.php tendría esta forma:
<html>
<head>
<title>Restringir por
edad</title>
</head>
<body>
<form
action="edad2.php" method="post">
Escribe tu edad:
<input type="text" name="edad" size="2">
<input
type="submit" value="Entrar">
</form>
</body>
</html>
Esta es una página sin
ningún código PHP, simplemente tiene un formulario. Fijémonos en el action del
formulario, que está dirigido hacia una página llamada edad2.php, que es la que
recibirá el dato de la edad y mostrará un contenido u otro dependiendo de ese
valor. Su código es el siguiente:
<html>
<head>
<title>Restringir
por edad</title>
</head>
<body>
<?
$edad =
$_POST["edad"];
echo "Tu
edad: $edad<p>";
if ($edad < 18)
{
echo
"No puedes entrar";
}else{
echo
"Bienvenido";
}
?>
</body>
</html>
Procesar
variables de formularios. GET en PHP
El uso de GET en formularios, salvo que el
desarrollador sepa muy bien lo que hace y los datos no sean comprometidos, no
debe usarse para otras cosas diferentes a los formularios de búsqueda. El
motivo es sencillo, el método GET lo que hace es pasar las variables y sus
valores por la URL, es decir, no solo queda a la vista de cualquier usuario,
sino que además la información puede quedar guardada en el historial del
navegador. Imagine que se usa este método para identificar usuarios, y el
nombre de usuario y la clave se queda guardada en el historial del navegador de
un ordenador, digamos de una biblioteca pública, el fallo en la seguridad seria
catastrófico.
Vamos a aplicar este método
al caso de la calculadora que vimos antes. Para este caso tampoco seria un
problema el método GET, ya que unos valores numéricos que queremos sumar, no
tiene mucha importancia que aparezca en la URL.
Pero el método GET también
tiene otras diferencias con POST, una de ellas es la recarga de la página. Si
pasas las variables por URL (usando GET) cuando pulsas el botón volver atrás o
actualizas la página lo haces sin más problemas. No obstante cuando se hace
esto con el método POST te sale un mensaje que dice algo así como: “para
recargar la página debe enviar la información que ya envío antes” y te obliga a
recargar la página de nuevo para ver el contenido. Pruebe a recargar la página
que muestra la suma con POST en este enlace.
El mismo código que
presentamos antes para el ejemplo de calculadora, lo usaremos ahora la ilustrar
el método GET.
Pruebe en este caso la
recarga de la página que muestra la suma en el enlace de demostración y
compárelo con lo que ocurre según el caso sea POST o GET. Preste atención a la
página que muestra la suma, verá como en ella aparecen los datos enviados junto
al nombre de la variable.
<html>
<head>
<title>Formulario.</title>
</head>
<body>
<form
method="GET" action="sumar.php">
<p>Valor 1: <input
type="text" name="T1" size="20"></p>
<p>Valor 2: <input
type="text" name="T2" size="20"></p>
<p>Valor 3: <input
type="text" name="T3" size="20"></p>
<p><input type="submit"
value="Sumar" name="B1"></p>
</form>
</body>
</html>
===============================
<html>
<head>
<title>Sumar.</title>
</head>
<body>
<?php
$valor1 =
$_GET['T1'];
$valor2 =
$_GET['T2'];
$valor3 =
$_GET['T3'];
$suma = $valor1 +
$valor2 + $valor3;
echo "$valor1
+ $valor2 + $valor3 = $suma";
?>
</body>
</html>
Hojas
de estilo
Introducción a las hojas de
estilo
Las hojas de estilo representan un avance
importante para los diseñadores de páginas web, al darles un mayor rango de
posibilidades para mejorar la apariencia de sus páginas. En los entornos
científicos en que la Web fue concebida, la gente estaba más preocupada por el
contenido de sus páginas que por su presentación. A medida que la Web era
descubierta por un espectro mayor de personas de distintas procedencias, las
limitaciones del HTML se convirtieron en fuente de continua frustración, y los
autores se vieron forzados a superar las limitaciones estilísticas del HTML.
Aunque las intenciones han sido buenas -- mejorar la presentación de las
páginas web --, las técnicas para conseguirlo han tenido efectos secundarios
negativos. Entre estas técnicas, que dan buenos resultados para algunas
personas, algunas veces, pero no siempre ni para todas las personas, se
incluyen:
La utilización de
extensiones propietarias del HTML
Conversión del texto en
imágenes
Utilización de imágenes para
controlar el espacio en blanco
La utilización de tablas
para la organización de las páginas
Escribir programas en lugar
de usar HTML
Estas técnicas incrementan
considerablemente la complejidad de las páginas web, ofrecen una flexibilidad
limitada, sufren de problemas de interoperabilidad, y crean dificultades para
las personas con discapacidades.
Las hojas de estilo
resuelven estos problemas al mismo tiempo que reemplazan al limitado rango de
mecanismos de presentación del HTML. Con las hojas de estilo es más fácil
especificar la cantidad de espacio entre líneas, el sangrado de las líneas, los
colores a utilizar para el texto y el fondo, el tamaño y estilo de las fuentes,
y otros muchos detalles.
Por ejemplo, la siguiente
hoja de estilo CSS (almacenada en el fichero "especial.css") hace que
el color del texto de un párrafo sea verde ("green") y lo rodea de un
borde rojo ("red") continuo ("solid"):
P.especial {
color : green;
border: solid red;
}
Los autores pueden vincular
esta hoja de estilo a su documento fuente HTML con el elemento LINK:
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Un documento con una hoja de
estilo externa<TITLE>
<LINK href="especial.css"
rel="stylesheet" type="text/css">
</HEAD>
<BODY>
<P class="especial">Este
párrafo debería tener texto especial verde.
</BODY>
</HTML>
HTML 4 soporta las
siguientes características de hojas de estilo:
Colocación
flexible de la información de estilo
Al colocar las hojas de estilo en ficheros
separados es más fácil reutilizarlas. Algunas veces es útil incluir
instrucciones de representación dentro del documento al que se aplican, ya sea agrupada
al comienzo del documento, o en atributos de los elementos a lo largo del
cuerpo del documento. Para facilitar la gestión de estilos a nivel de sitio,
esta especificación describe cómo utilizar los encabezados HTTP para
especificar qué hojas de estilo se aplican a un documento.
Independencia
de lenguajes de hojas de estilo específicos
Esta especificación no liga el HTML con
ningún lenguaje de hojas de estilo en particular. Esto permite que se puedan
usar otros lenguajes diferentes, desde los lenguajes más simples válidos para
la mayoría de los usuarios, hasta los más complejos, útiles para una minoría de
usuarios con necesidades muy especializadas. Todos los ejemplos que se incluyen
en lo que sigue se sirven del lenguaje CSS (Hojas de Estilo en Cascada,
Cascading Style Sheets, [CSS1]), pero también son posibles otros lenguajes de
hojas de estilo.
Cascada
Se llama así a la capacidad que
proporcionan algunos lenguajes de hojas de estilo tales como CSS que permiten
que las informaciones de estilo provenientes de varias fuentes puedan
combinarse. Éstas podrían ser, por ejemplo, las guías de estilo de una empresa,
los estilos comunes a un grupo de documentos, y los estilos específicos de un
documento en particular. Al almacenarse independientemente, las hojas de estilo
pueden reutilizarse, lo cual simplifica las tareas de diseño y hace más
efectiva la utilización de la memoria caché de la red. La cascada define una
secuencia ordenada de hojas de estilo en la que las reglas de las últimas hojas
tienen una prioridad mayor que las de las primeras. No todos los lenguajes de
hojas de estilo soportan la cascada.
Dependencias
de los medios
HTML permite a los autores especificar sus
documentos de una manera independiente del medio. Esto permite a los usuarios
acceder a las páginas web usando una amplia gama de dispositivos y medios,
p.ej., pantallas gráficas para ordenadores bajo Windows, Macintosh OS y X11,
dispositivos para aparatos de televisión, teléfonos adaptados y dispositivos
portátiles PDA, navegadores basados en voz, y dispositivos táctiles Braille.
Las hojas de estilo, en
contraste, se aplican a medios o grupos de medios específicos. Una hoja de
estilo diseñada para una pantalla puede ser aplicable para una salida impresa,
pero es de poca utilidad para los navegadores basados en voz. Esta especificación
le permite definir categorías generales de medios a los que es aplicable una
hoja de estilo dada. Esto permite a los agentes de usuario evitar la descarga
de hojas de estilo que no sean apropiadas. Los lenguajes de hojas de estilo
pueden incluir características para describir dependencias del medio dentro de
una misma hoja de estilo.
Estilos
alternativos
Los autores pueden querer ofrecer a los
lectores varias maneras diferentes de ver un documento. Por ejemplo, una hoja
de estilo para representar documentos compactos con fuentes pequeñas, o una que
especifique fuentes más grandes para una lectura más fácil. Esta especificación
permite a los autores especificar una hoja de estilo preferente así como hojas
alternativas que se dirijan a medios o usuarios específicos. Los agentes de
usuario deberían dar a los usuarios la oportunidad de seleccionar una de las
hojas de estilo alternativas o incluso de desactivar las hojas de estilo
completamente.
Consideraciones
de rendimiento
Algunas personas han expresado su
preocupación acerca de los posibles problemas de rendimiento relacionados con
las hojas de estilo. Por ejemplo, la obtención de una hoja de estilo externa
puede retrasar la presentación del documento al usuario. Algo parecido sucede
si la cabecera del documento contiene un conjunto muy grande de reglas de
estilo.
La propuesta actual resuelve
estos problemas, pues permite a los autores incluir instrucciones de
representación dentro de cada elemento HTML. Así, la información de
representación siempre estará disponible en el momento en que el agente de
usuario quiera representar cada elemento.
En muchos casos los autores
sacarán partido de una hoja de estilo común a un grupo de documentos. En este
caso, la distribución de reglas de estilo a lo largo del documento conducirá a
un rendimiento peor que si se usara una hoja de estilo vinculada, ya que para
la mayoría de los documentos la hoja de estilo ya estará almacenada en la caché
local. La disponibilidad pública de hojas de estilo de calidad potenciará este efecto.
Añadir
estilos al HTML
La hoja de estilo por defecto del HTML 4
que se incluye en [CSS2] expresa la información de estilo por defecto
generalmente aceptada para cada elemento. Los autores, así como los
implementadores, pueden encontrar en ella un recurso útil.
Los documentos HTML pueden
contener reglas de hojas de estilo directamente, o bien pueden importar hojas
de estilo.
Se puede usar cualquier
lenguaje de hojas de estilo con HTML. Un lenguaje simple de hojas de estilo
puede ser suficiente para la mayoría de los usuarios, pero para otras
necesidades más especializadas pueden ser apropiados otros lenguajes. Esta
especificación utiliza para los ejemplos el lenguaje de estilo llamado
"Hojas de Estilo en Cascada" ("Cascading Style Sheets",
[CSS1]), abreviado CSS.
La sintaxis de los datos de
estilo depende del lenguaje de hojas de estilo.
Especificación
del lenguaje de hojas de estilo por defecto
Los autores deben especificar el lenguaje
de hojas de estilo de la información de estilo asociada con un documento HTML.
Los autores deberían usar el
elemento META para especificar el lenguaje de hojas de estilo por defecto de un
documento. Por ejemplo, para especificar que el valor por defecto es CSS, los
autores deberían poner la siguiente declaración en la sección HEAD de sus
documentos:
<META
http-equiv="Content-Style-Type" content="text/css">
El lenguaje de hojas de
estilo por defecto también puede ser establecido con encabezados HTTP. La
declaración META de arriba es equivalente al encabezado HTTP siguiente:
Content-Style-Type: text/css
Los agentes de usuario
deberían determinar el lenguaje de hojas de estilo por defecto de acuerdo con
los siguientes pasos (ordenados de mayor a menor prioridad):
Si alguna declaración META
especifica "Content-Style-Type", la última de ellas en el flujo de
caracteres determina el lenguaje de hojas de estilo por defecto.
De otro modo, si algún
encabezado HTTP especifica "Content-Style-Type", el último de ellos
en el flujo de caracteres determina el lenguaje de hojas de estilo por defecto.
De otro modo, el lenguaje de
hojas de estilo por defecto es "text/css".
Los documentos que incluyan
elementos que especifiquen el atributo style pero que no definan un lenguaje de
hojas de estilo por defecto son incorrectos. Las herramientas de creación
deberían generar información de lenguaje de hojas de estilo por defecto
(normalmente una declaración META) de modo que los agentes de usuario no tengan
que atenerse al valor por defecto "text/css".
Información
de estilo en línea
Definiciones de atributos
style = estilo [CN]
Este atributo especifica
información de estilo para el elemento actual.
La sintaxis del valor del
atributo style viene determinada por el lenguaje de hojas de estilo por
defecto. Por ejemplo, para los estilos [[CSS2]] en línea, se usa la sintaxis de
bloque de declaraciones descrita en la sección 4.1.8 (sin las llaves).
Este ejemplo CSS establece
información sobre el color y el tamaño de la fuente del texto de un párrafo
específico.
<P style="font-size:
12pt; color: fuchsia">¿No son maravillosas las hojas de estilo?
En CSS, las declaraciones de
propiedades son de la forma "nombre : valor" y están separadas por un
punto y coma.
Para especificar información
de estilo en línea para más de un elemento, los autores deberían usar el
elemento STYLE. Para lograr una flexibilidad óptima, los autores deberían
definir los estilos en hojas de estilo externas.
Tipos
de medios
HTML permite a los autores
diseñar documentos que saquen partido de las características de los medios en
los que el documento vaya a ser representado (p.ej., pantallas gráficas,
pantallas de televisión, dispositivos de mano, navegadores basados en voz, dispositivos
táctiles Braille, etc.). Al especificar el atributo media, los autores permiten
a los agentes de usuario cargar y aplicar las hojas de estilo de manera
selectiva. Consulte la lista de descriptores de medios reconocidos.
Las siguientes declaraciones
de ejemplo se aplican a elementos H1. Cuando se proyecten en una reunión de
negocios, todos ellos aparecerán en azul. Cuando se impriman, aparecerán
centrados.
<HEAD>
<STYLE type="text/css"
media="projection">
H1 { color: blue }
</STYLE>
<STYLE type="text/css"
media="print">
H1 { text-align: center }
</STYLE>
Este ejemplo añade efectos
de sonido a los vínculos para su uso en salidas por voz:
<STYLE type="text/css"
media="aural">
A { cue-before: uri(bell.aiff); cue-after:
uri(dong.wav)}
</STYLE>
</HEAD>
El control de medios es
particularmente interesante cuando se aplica a hojas de estilo externas, ya que
los agentes de usuario pueden ahorrar tiempo si obtienen de la red únicamente
aquellas hojas de estilo que se apliquen el dispositivo actual. Por ejemplo,
los navegadores basados en voz pueden evitar la descarga de hojas de estilo
diseñadas para la representación visual. Veáse la sección sobre cascadas
dependientes del medio para más información.
Hojas
de estilo externas
Los autores pueden separar las hojas de
estilo de los documentos HTML. Esto ofrece varias ventajas:
Los autores y los
administradores de sitios web pueden compartir hojas de estilo entre varios
documentos (y sitios).
Los autores pueden cambiar
la hoja de estilo sin necesidad de hacer modificaciones en el documento.
Los agentes de usuario
pueden cargar hojas de estilo selectivamente (en función de los descriptores de
medios).
Hojas
de estilo preferentes y alternativas
HTML permite a los autores asociar
cualquier número de hojas de estilo externas a un documento. El lenguaje de
hojas de estilo define el modo en que interaccionan varias hojas de estilo (por
ejemplo, las reglas de "cascada" de CSS).
Los autores pueden
especificar cualquier número de hojas de estilo mutuamente excluyentes llamadas
hojas de estilo alternativas. Los usuarios pueden seleccionar su hoja favorita
según sus preferencias. Por ejemplo, un autor puede especificar una hoja de
estilo diseñada para pantallas pequeñas y otra para usuarios con poca visión
(p.ej., con fuentes grandes). Los agentes de usuario deberían permitir a los
usuarios seleccionar las hojas de estilo alternativas.
El autor puede especificar
que una de las alternativas es una hoja de estilo preferente. Los agentes de
usuario deberían aplicar la hoja de estilo preferente del autor a menos que el
usuario haya seleccionado una alternativa diferente.
Los autores pueden agrupar
varias hojas de estilo alternativas (incluyendo las hojas de estilo preferentes
del autor) bajo un nombre de estilo común. Cuando un usuario selecciona un
nombre de estilo, el agente de usuario debe aplicar todas las hojas de estilo
con ese nombre. Los agentes de usuario no deben aplicar hojas de estilo alternativas
con un nombre de estilo diferente. La sección sobre especificación de hojas de
estilo externas explica cómo dar un nombre a un grupo de hojas de estilo.
Los autores también pueden
especificar hojas de estilo persistentes que los agentes de usuario deben
aplicar además de cualquier hoja de estilo alternativa.
Los agentes de usuario deben
respetar los descriptores de medios al aplicar cualquier hoja de estilo.
Los agentes de usuario
también deberían permitir a los usuarios deshabilitar completamente las hojas
de estilo del autor, en cuyo caso el agente de usuario no debería aplicar
ninguna hoja de estilo persistente ni alternativa.
Especificación
de hojas de estilo externas
Los autores especifican hojas de estilo
externas mediante los siguientes atributos del elemento LINK:
Haciendo el valor de href
igual a la localización del fichero de la hoja de estilo. El valor de href es
un URI.
Haciendo que el valor del
atributo type indique el lenguaje del recurso (hoja de estilo) vinculado. Esto
permite al agente de usuario evitar la descarga de una hoja de estilo cuyo
lenguaje no soporte.
Especificando si la hoja de
estilo es persistente, preferente, o alternativa:
Para hacer una hoja de
estilo persistente, se hace el atributo rel igual a "stylesheet" y no
se establece el atributo title.
Para hacer una hoja de
estilo preferente, se hace el atributo rel igual a "stylesheet" y se
da un nombre a la hoja de estilo mediante el atributo title.
Para especificar una hoja de
estilo alternativa, se hace el atributo rel igual a "alternate
stylesheet" y se da un nombre a la hoja de estilo mediante el atributo
title.
Los agentes de usuario
deberían posibilitar a los usuarios ver la lista de estilos alternativos y
escoger uno de ellos. Se recomienda que el nombre de cada opción sea el valor
del atributo title.
En este ejemplo,
especificamos en primer lugar una hoja de estilo persistente localizada en el
fichero miestilo.css:
<LINK
href="miestilo.css" rel="stylesheet"
type="text/css">
Si establecemos el atributo
title la convertimos en la hoja de estilo preferente del autor:
<LINK href="miestilo.css"
title="compacto" rel="stylesheet"
type="text/css">
Si añadimos la palabra clave
"alternate" al atributo rel la convertimos en una hoja de estilo
alternativa:
<LINK
href="miestilo.css" title="Medium" rel="alternate
stylesheet" type="text/css">
Para más información sobre
hojas de estilo externas, consulte la sección sobre vínculos y hojas de estilo
externas.
Los autores también pueden
usar el elemento META para establecer la hoja de estilo preferente del
documento. Por ejemplo, para especificar que la hoja de estilo preferente sea
"compacto" (ver el ejemplo precedente), los autores pueden incluir la
siguiente línea en el HEAD:
<META http-equiv="Default-Style"
content="compacto">
La hoja de estilo preferente
también se puede especificar mediante encabezados HTTP. La declaración META
precedente es equivalente a este encabezado HTTP:
Default-Style:
"compacto"
Si hay dos o más
declaraciones META o encabezados HTTP que especifiquen la hoja de estilo
preferente, la que prevalece es la última. A estos efectos, se considera que
los encabezados HTTP aparecen antes que la sección HEAD del documento.
Si hay dos o más elementos
LINK que especifiquen una hoja de estilo preferente, el que prevalece es el
primero.
Las hojas de estilo
preferentes especificadas con un elemento META o con encabezados HTTP
prevalecen sobre las especificadas con el elemento LINK.
Hojas
de Estilo en Cascada
Los lenguajes de hojas de estilo en
cascada, tales como CSS, permiten que se pueda combinar la información de
varias fuentes. Sin embargo, no todos los lenguajes de hojas de estilo soportan
la cascada. Para definir una cascada, los autores especifican una secuencia de
elementos LINK y/o STYLE. La información de estilo se combina en cascada según
el orden en que aparecen los elementos en la sección HEAD.
Esta especificación no
especifica cómo se combinan en cascada hojas de estilo de lenguajes de hojas de
estilo distintos. Los autores deberían evitar mezclar lenguajes de hojas de
estilo.
En el siguiente ejemplo,
especificamos dos hojas de estilo alternativas llamadas "compacto".
Si el usuario selecciona el estilo "compacto", el agente de usuario
debe aplicar ambas hojas de estilo externas, así como la hoja de estilo persistente
"comun.css". Si el usuario selecciona el estilo "tipos
grandes", sólo se aplicarán la hoja de estilo alternativa
"tgrandes.css" y "comun.css".
<LINK rel="alternate
stylesheet" title="compacto"
href="peq-base.css"
type="text/css">
<LINK rel="alternate
stylesheet" title="compacto"
href="peq-extras.css"
type="text/css">
<LINK rel="alternate
stylesheet" title="tipos grandes"
href="tgrandes.css"
type="text/css">
<LINK
rel="stylesheet" href="comun.css"
type="text/css">
Aquí tenemos un ejemplo de
cascada que incluye tanto al elemento LINK como al STYLE.
<LINK
rel="stylesheet" href="empresa.css"
type="text/css">
<LINK
rel="stylesheet" href="informe.css"
type="text/css">
<STYLE
type="text/css">
p.especial { color: rgb(230, 100, 180) }
</STYLE>
Cascadas
dependientes del medio
Una cascada puede incluir hojas de estilo
aplicables a medios diferentes. Tanto LINK como STYLE pueden usarse con el
atributo media. El agente de usuario es por tanto responsable de filtrar
aquellas hojas de estilo que no se apliquen al medio actual.
En el siguiente ejemplo,
definimos un cascada en la cual se incluyen varias versiones de la hoja de
estilo "empresa": una diseñada para su impresión, otra para la
pantalla y otra para navegadores basados en voz (útil, por ejemplo, para leer
correo electrónico en el coche). La hoja de estilo "informe" se
aplica a todos los medios. La regla de color definida por el elemento STYLE se
usa para impresoras y pantallas, pero no para la representación auditiva.
<LINK
rel="stylesheet" media="aural"
href="empresa-aural.css" type="text/css">
<LINK
rel="stylesheet" media="screen"
href="empresa-screen.css" type="text/css">
<LINK
rel="stylesheet" media="print"
href="empresa-print.css" type="text/css">
<LINK
rel="stylesheet" href="informe.css" type="text/css">
<STYLE
media="screen, print" type="text/css">
p.especial { color: rgb(230, 100, 180) }
</STYLE>
Herencia
y cascada
Cuando el agente de usuario quiere
representar un documento, necesita encontrar valores para las propiedades de
estilo, p.ej., la familia tipográfica, el tamaño de fuente, la altura de línea,
el color del texto, etc. El mecanismo exacto depende del lenguaje de la hoja de
estilo, pero en general es válida la descripción siguiente:
Se utiliza el mecanismo de
cascada cuando varias reglas de estilo se aplican directamente a un mismo
elemento. El mecanismo permite al agente de usuario ordenar las reglas según su
especificidad para determinar la regla a aplicar. Si no encuentra ninguna
regla, el siguiente paso depende de si la propiedad de estilo puede ser
heredada o no. No todas las propiedades se heredan. Para estas propiedades el
lenguaje de la hoja de estilo proporciona unos valores por defecto que son los
que se usan cuando no hay reglas explícitas para un elemento en particular.
Si la propiedad puede ser
heredada, el agente de usuario examina el elemento contenedor inmediato para
ver si hay alguna regla que se aplique a él. Este proceso continúa hasta que se
encuentra alguna regla aplicable. Este mecanismo permite que las hojas de
estilo puedan definirse de una manera compacta. Por ejemplo, los autores pueden
especificar la familia tipográfica de todos los elementos contenidos en BODY
con una sola regla que se aplique al elemento BODY.
Ocultar
datos de estilo a los agentes de usuario
Algunos lenguajes de hojas de estilo
soportan sintaxis pensada para permitir a los autores ocultar el contenido de
los elementos STYLE a los agentes de usuario no conformes.
Este ejemplo ilustra cómo
comentar en CSS el contenido de los elementos STYLE para asegurarse de que los
agentes de usuario antiguos y no conformes no lo representarán como texto.
<STYLE type="text/css">
<!--
H1 { color: red }
P {
color: blue}
-->
</STYLE>
Vinculación
de hojas de estilo mediante encabezados HTTP
Esta sección sólo se aplica a los agentes
de usuario conformes con las versiones de HTTP que definan un campo de
encabezado Link. Obsérvese que HTTP 1.1, tal y como se define en [RFC2616].
Los administradores de
servidores web pueden creer conveniente configurar un servidor de modo que una
hoja de estilo se aplique a un grupo de páginas. El encabezado HTTP Link tiene
el mismo efecto que un elemento LINK con los mismos atributos y valores. Varios
encabezados Link corresponderían a varios elementos LINK que aparecieran en el
mismo orden.
Por ejemplo:
Link: <http://www.acme.com/empresa.css>;
REL=stylesheet
corresponde a:
<LINK
rel="stylesheet" href="http://www.acme.com/empresa.css">
Es posible especificar
varias hojas de estilo alternativas especificando varios encabezados Link, y a
continuación utilizar el atributo rel para determinar el estilo por defecto.
En el ejemplo siguiente, se
aplica "compacto" por defecto, ya que omite la palabra clave
"alternate" del atributo rel.
Link: <compacto.css>;
rel="stylesheet"; title="compacto"
Link: <tgrandes.css>;
rel="alternate stylesheet"; title="tipos grandes"
Esto debería funcionar
cuando se envían documentos HTML por correo electrónico. Algunos agentes de
correo pueden alterar el orden de los encabezados de [RFC822]. Para evitar que
esto afecte al orden de cascada de las hojas de estilo especificadas con
encabezados Link, los autores pueden usar la concatenación de encabezados para
combinar varias apariciones del mismo campo de encabezado. Las comillas sólo se
necesitan si los valores de los atributos contienen algún espacio en blanco.
Utilice entidades SGML para hacer referencia a caracteres que no se permitan en
encabezados de HTML o de correo electrónico, o que sean susceptibles de
resultar afectados por el tránsito a lo largo de la red.
Datos
de Sesiones
Generalmente una web se compone de una
serie de páginas entre las que existe alguna relación. Un ejemplo claro es una
página en la cual es necesario estar registrado para poder acceder a ellas ya
que en función de la categoría del usuario nos permitirá acceder a unas
secciones o otras. En estas aplicaciones será necesario ir comprobando los
permisos de usuario y para ello usamos un elemento en PHP denominado
"sesiones".
Una sesión se inicia cuando
un usuario entra en la aplicación web y finaliza cuando el usuario abandona la
aplicación (mas adelante comprenderemos lo de "abandonar
aplicación").
Durante todo ese tiempo
podemos manipular una serie de variables que se inician al iniciar la sesión y
mantener un tipo de información común entre todas las páginas (en el caso de el
usuario registrado seria los privilegios que posee).
Para mantener esta
información constante es necesario que los datos se guarden en un fichero ya
sea en el cliente (cookies) o en el servidor (en caso de que tenga desactivado
las cookies).
Para el problema que
consiste en diferenciar los diferentes usuarios existe una solución muy básica
que consiste en un identificador de sesión diferente en cada caso.
Este identificador de sesión
debe ser enviado de una pagina a otra para mantener la sesión activa(a menos
que en la configuración del servidor tengamos activada la opción
session_trans_id) y también es necesario pasar el identificador de sesión en
los formularios como un campo HIDDEN.
Funciones
de gestión de sesiones
Función
session_start();
Si es la
primera solicitud genera un identificador de sesión aleatorio cuyo nombre será
sess_IDsesión; si es otra solicitud continua la sesión iniciada anteriormente.
session_destroy();
Elimina todos
los datos asociados con una sesión, borra el archivo en el servidor pero no
borra la cookie.
session_register(nombre);
Recibe como
parámetro una serie de nombres de variable globales y los registra como
variables de sesión en el fichero del servidor.
session_unregister(nombre);
Eliminamos la
variable global introducida y se elimina el contenido de esta variable en el
fichero del servidor. Sin pasar el parámetro nombre eliminaremos todas las
variables de la sesión.
session_is_registered(nombre);
Devuelve true
en caso de que en la sesión se encuentre registrada una variable con dicho
nombre.
session_unset();
Dejamos sin
ningún valor asignado a todas las variables de la sesión.
session_id([nombre]);
Si no le
proporcionamos ningún parámetro nos da el identificador de sesión; si le
proporcionamos el parámetro nombre cambia el valor del identificador por el
parámetro nombre.
session_name([nombre]);
Si se invoca
sin parámetro devuelve el nombre de la variable interna que tiene el id de
sesiones; si se pasa parámetro cambia el nombre de la sesión.
session_get_cookie_params();
Permite definir
nuevos valores para los parámetros de configuración de las cookies. Para que el
cambio sea permanente hay que invocar el cambio en todos los documentos.
session_cache_limiter([cache_limiter]);
Si se le
proporciona valor modifica el valor por defecto en cambio sino se muestra el
caché que tiene por defecto.
session_encode();
Devuelve una
cadena con la información de una sesión, después de usar esta función la
información de la sesión queda actualizada.
session_decode(cadena);
Descodifica la
cadena que recibe como parámetro y que contiene la info de sesión, después de
usar esta función se actualiza la info de sesión.
session_save_path([path]);
Devuelve el
camino al directorio donde se guardan los ficheros asociados a la sesión. El
efecto solo dura en el script actual.
session_module_name([modulo]);
Devuelve el
nombre del modulo que se usa para realizar la gestión de sesiones. Cuando se
invoca un parámetro se usa como nuevo gestor de sesiones.
session_set_save_handler(open,close,read,write,destroy,gc);
Permite definir
su propio manejador para almacenar la información asociada con una sesión. De
esta forma los datos pueden ser metidos en una BD en vez de en un fichero.
Tenemos que pasarle como parámetro toda la información necesaria para crear y
destruir sesiones.
¿Qué
es MVC?
MVC viene de Model, View, Controller, o
bien: Modelo, Vista y Controlador. Es un patrón de diseño que empecé a utilizar
hace algún tiempo y la verdad es que me dio muy buenos resultados en los
sistemas donde lo pude aplicar. La idea básica de éste patrón es separar nuestros
sistemas en 3 capas, El Modelo, La Vista y el Controlador.
El Modelo se encarga de todo
lo que tiene que ver con la persistencia de datos. Guarda y recupera la
información del medio persistente que utilicemos, ya sea una base de datos,
ficheros de texto, XML, etc.
La Vista presenta la
información obtenida con el modelo de manera que el usuario la pueda
visualizar.
El Controlador, dependiendo
de la acción solicitada por el usuario, es el que pide al modelo la información
necesaria e invoca a la plantilla(de la vista) que corresponda para que la
información sea presentada.
Un
pequeño ejemplo
Marcos entra a nuestro sitio
mediante la URL www.example.com/items/listar.
Se carga el Controlador
Items para ejecutar la acción de Listar.
El controlador solicita al
modelo que le entregue un arreglo con todos los items que hay almacenados en la
base de datos.
Una vez que posee dicha
información le indica a la vista que va a utilizar la plantilla correspondiente
al listado de items y le provee el arreglo con todos los usuarios.
La vista, por su parte, toma
el arreglo de items y los muestra uno a uno en la plantilla que le indico el
controlador.
Finalmente Marcos recibe el
listado de items; lo observa un instante y decide que quiere agregar un nuevo
item por lo que hace click en un enlace que lo lleva a la URL
www.example.com/items/agregar.
Se repite el proceso desde el
paso 1 pero con la nueva URL
Vamos
al codigo
Para ir de a poco tomaré un
ejemplo sencillo similar a los que utilice cuando hable de PHP Data Objects y
lo iré separando en capas paso a paso. El ejemplo que voy a utilizar es el
siguiente:
< ?php
require 'conexion.php';
$db = new PDO('mysql:host=' . $servidor . ';dbname=' . $bd,
$usuario, $contrasenia);
$consulta = $db->prepare('SELECT * FROM items WHERE id_item = ?
OR id_item = ?');
$consulta->execute(array(2, 4));
$items = $consulta->fetchAll();
$db = null;
?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en" lang="en">
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=utf-8"/>
<title>PDO -
Jourmoly</title>
</head>
<body>
<table>
<tr>
<th>ID
</th><th>Item
</th></tr>
< ?php
foreach($items as
$item)
{
?>
<tr>
<td><
?php echo $item['id_item']?></td>
<td><
?php echo $item['item']?></td>
</tr>
< ?php
}
?>
</table>
<a href="index.php">Menú</a>
</body>
</html>
¿Cual
es el modelo en este ejemplo?
Como mencione mas arriba, el
modelo es el que se ocupa, básicamente, de todo lo que tiene que ver con el
acceso a la información. Sin dudarlo, en este ejemplo PDO es quien cumple el
papel de Modelo.
modelo.php
< ?php
$db = new PDO('mysql:host=' . $servidor . ';dbname=' . $bd,
$usuario, $contrasenia);
$consulta = $db->prepare('SELECT * FROM items');
$consulta->execute();
$items = $consulta->fetchAll();
?>
¿Y
cual es la vista?
La vista es quien representa
la información para que el usuario la pueda entender, en este caso, el HTML, la
tabla y todo lo usado para mostrar la información forma parte de la vista.
vista.php
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en" lang="en">
<head>
<meta
http-equiv="Content-Type" content="text/html;
charset=utf-8"/>
<title>PDO -
Jourmoly</title>
</head>
<body>
<table>
<tr>
<th>ID
</th><th>Item
</th></tr>
< ?php
foreach($items as
$item)
{
?>
<tr>
<td><
?php echo $item['id_item']?></td>
<td><
?php echo $item['item']?></td>
</tr>
< ?php
}
?>
</table>
</body>
</html>
¿Y
el controlador?
El controlador es el que
permite que todo funcione.
controlador.php
< ?php
//Se incluye el modelo
require 'modelo.php';
//En $items tenemos un arreglo con todos los items gracias al modelo
//Ahora la vista recibe dicho arreglo para mostrarlo por pantalla
require 'vista.php';
?>
Por último, tendremos un
fichero mas index.php que lo único que hará es incluir algunas variables de
configuración y nuestro controlador. Es decir, para ver el resultado del script
entraremos por index.php
Afinando
nuestro ejemplo
El ejemplo anterior esta bien para un
primer acercamiento, pero cuando trabajamos a diario las cosas no son tan
sencillas como en este caso, una sola sección o elemento(items), una sola
acción(listar), etc. Lo mas normal es que necesitemos de varios controladores y
que cada controlador tenga varias acciones. A su vez, cada controlador puede
utilizar uno o mas modelos como así también plantillas. Para lograr todo esto,
es necesario que automaticemos un poco el primer ejemplo para que admita, en
principio, varios controladores y acciones.
Como primera medida vamos a
crear una estructura de ficheros para que que todo quede mas o menos ordenado,
sencillo:
controladores/
.....itemsControlador.php
modelos/
.....itemsModelo.php
vistas/
.....listar.php
index.php
Donde listar.php equivale a
vista.php de nuestro primer ejemplo. itemsModelo.php equivale a modelo.php con
algunos cambios:
itemsModelo.php
< ?php
global $servidor, $bd, $usuario, $contrasenia;
$db = new PDO('mysql:host=' . $servidor . ';dbname=' . $bd,
$usuario, $contrasenia);
function buscarTodosLosItems($db)
{
$consulta =
$db->prepare('SELECT * FROM items');
$consulta->execute();
return
$consulta->fetchAll();
}
?>
e itemsControlador.php
equivale a controlador.php también con algunos cambios:
itemsControlador.php
< ?php
function listar()
{
//Incluye el modelo
que corresponde
require
'modelos/itemsModelo.php';
//Le pide al modelo
todos los items
$items =
buscarTodosLosItems($db);
//Pasa a la vista
toda la información que se desea representar
require
'vistas/listar.php';
}
?>
Como verán los únicos
cambios han sido armar los scripts con funciones, de modo que cada fichero
pueda tener mas de una de ellas y puedan ser llamadas en cualquier momento e
independientemente.
De ahora en mas, nuestro
fichero index.php será quien se encargue de averiguar cual es el controlador y
acción que busca el usuario, incluirá los archivos que sean necesarios y
ejecutara la acción solicitada. Todos los accesos a nuestro sistema serán por
medio de index.php y las URL serán similares a las siguientes:
www.example.com/index.php?controlador=items&accion=listar
www.example.com/index.php?controlador=items&accion=agregar
www.example.com/index.php?controlador=items&accion=eliminar
www.example.com/index.php?controlador=usuarios&accion=listar
Ahora solo nos queda hacer
un pequeño script que interprete nuestra URL y llame al controlador y la acción
que corresponda.
index.php
< ?php
//Primero algunas variables de configuracion
require 'conexion.php';
//La carpeta donde buscaremos los controladores
$carpetaControladores = "controladores/";
//Si no se indica un controlador, este es el controlador que se
usará
$controladorPredefinido = "items";
//Si no se indica una accion, esta accion es la que se usará
$accionPredefinida = "listar";
if(! empty($_GET['controlador']))
$controlador =
$_GET['controlador'];
else
$controlador =
$controladorPredefinido;
if(! empty($_GET['accion']))
$accion =
$_GET['accion'];
else
$accion =
$accionPredefinida;
//Ya tenemos el controlador y la accion
//Formamos el nombre del fichero que contiene nuestro controlador
$controlador = $carpetaControladores . $controlador .
'Controlador.php';
//Incluimos el controlador o detenemos todo si no existe
if(is_file($controlador))
require_once
$controlador;
else
die('El controlador no
existe - 404 not found');
//Llamamos la accion o detenemos todo si no existe
if(is_callable($accion))
$accion();
else
die('La accion no existe
- 404 not found');
?>
Y ya lo podemos probar:
index.php?controlador=items&accion=listar
¿Y
si ahora quiero insertar items?
Es muy sencillo, solo
debemos agregar la acción de agregar a nuestro controlador.
itemsControlador.php
function listar()
{
//Incluye el modelo
que corresponde
require
'modelos/itemsModelo.php';
//Le pide al modelo
todos los items
$items =
buscarTodosLosItems($db);
//Pasa a la vista
toda la información que se desea representar
require
'vistas/listar.php';
}
function agregar()
{
echo 'Aqui incluiremos
nuestro formulario para insertar items';
require
'modelos/itemsModelo.php';
if($_POST)
{
insertar();
}
require
'vistas/agregar.php';
No hay comentarios:
Publicar un comentario