╬JGSISTEM_ONLINE╬

╬Menu I╬

╬ JG_Online╬

Usuarios ONLINE

╬Sistemas╬

╬Sistemas╬

Cristalab vs The Web #19: El orgullo de mis padres

Listado con paginación en jsp con AJAX y SQL SERVER

Hola a todos, hoy traigo un tutorial básico de un listado de registros de una Base de Datos en SQL Server 2008 utilizando jsp, jquery y css3. El listado se hace mediante procedimientos almacenados, así que veremos en primer lugar como podemos conectarnos a sql server 2008 desde jsp y como invocar a un procedimiento almacenado con parámetros desde jsp, y mostraremos los resultados utilizando la tecnología AJAX ( Jquery) y modificaremos el estilo para darle una mejor apariencia utilizando css3… así que manos a la obra.



Crear una Base de Datos en sql Server


En primer lugar lo que vamos a hacer es crear nuestra base de datos en sql server 2008, preferiblemente utilizando autenticación sql Server; así que escribimos en el analizador de consultas lo siguiente:

Código :
create database tutorial
go
use tutorial
go


Creamos la tabla CategoriaProductos:

Código :
create table CategoriaProductos
(
CodigoCategoriaProductos int not null identity(1,1),
DescripcionCategoriaProductos varchar(50) not null,
EstadoCategoriaProductos int

constraint clavecategoria primary key (CodigoCategoriaProductos)

)
go


Creamos la tabla Productos con referencia a la tabla CategoriaProductos:

Código :
create table Productos
(
CodigoProductos int not null identity(1,1),
CodigoCategoriaProductos int ,
DescripcionProductos varchar(50) not null,
PrecioProductos decimal(9,2),
SotckProductos int,
EstadoCProductos int

constraint claveproductos primary key (CodigoProductos),
constraint claveforaneaproductos foreign key (CodigoCategoriaProductos)
references CategoriaProductos(CodigoCategoriaProductos)
)
go


Y debería quedarnos de esta manera:



Una vez que hemos creado nuestras tablas, procedemos a llenarlas de algunos registros. Insertamos algunos registros en la tabla CategoriaProductos:

Código :
insert into CategoriaProductos values(‘Bebidas’,1)
insert into CategoriaProductos values(‘Lacteos’,1)
insert into CategoriaProductos values(‘Cereales’,1)


Para ver los registros que acabamos de insertar en la tabla CategoriaProductos:

Código :
select * from CategoriaProductos
go




Ahora insertamos algunos registros en la tabla Productos:

Código :
insert into Productos values(1, ‘Inka Kola 2 Lts’,3.5, 200,1)
insert into Productos values(1, ‘Pepsi 1 Lt.’,3, 100,1)
insert into Productos values(2, ‘Leche Pura Vida’,2.5, 400,1)
insert into Productos values(2, ‘Leche Anchor’,2, 200,1)
insert into Productos values(2, ‘Leche Gloria deslactozada’,3, 100,1)
insert into Productos values(3, ‘Arroz Paisana 1 Kg.’,3.5, 50,1)
insert into Productos values(3, ‘Arroz Costeño 1Kg.’,3, 50,1)
insert into Productos values(3, ‘Cereales Angel 1Kg.’,4, 50,1)


Ahora vemos los registros que acabamos de ingresar:
select * from Productos



Ahora pasamos a crear el procedimiento almacenado que me lista los Productos:

Código :
create procedure sp_gen_s_productos
@RegistrosAMostrar int,
@RegistrosAEmpezar int
as

SELECT TOP (@RegistrosAMostrar)* FROM
(
select p.CodigoProductos as codigo, p.DescripcionProductos as descripcion,cp.DescripcionCategoriaProductos as categoria,
p.PrecioProductos as precio,p.SotckProductos as stock,
ROW_NUMBER() OVER (ORDER BY p.CodigoProductos ) AS num

from Productos p
inner join CategoriaProductos cp on p.CodigoCategoriaProductos=cp.CodigoCategoriaProductos

)
AS a
WHERE num > @RegistrosAEmpezar


Para probar lo ejecutamos:

Código :
exec sp_gen_s_productos 3,0


Nos debe salir lo siguiente:




Crear un proyecto jsp


Como entonces ya creamos nuestra base de datos con las tablas correspondientes para el ejemplo, ahora procedemos a crear un proyecto jsp en la IDE que utilizaremos para este ejemplo , que es Net Beans. Ustedes pueden utilizar la que gusten pero el proyecto tendrá la siguiente estructura:



Los resaltados con amarillo, son los directorios y archivos que debemos crear, como sabemos en netbeans , el resto de archivos se crea por defecto, así que para crear el proyecto en Net Beans nos vamos a la ficha archivo, click en Proyecto nuevo, en categorías seleccionamos Java Web y Proyectos seleccionamos Web Application, click en siguiente y colocamos un nombre a nuestro proyecto y lo guardamos en la ruta que deseemos, click en siguiente y luego en terminar.

Para empezar a crear nuestros directorios damos click derecho sobre la carpeta Web Pages, luego click ennuevo y luego en carpeta y así vamos creando las carpetas hasta tener la estructura de la imagen anterior, luego en la carpeta CSS hacemos click derecho y elegimos la opción nuevo y luego elegimos Hoja de estilo en cascada (CSS) y le ponemos de nombre estilo.

Una vez que hemos hecho esto, el siguiente paso es descargarnos el archivo de jquery aquí, ojo, si descargan una versión distinta a la que yo utilicé, sólo tienen que cambiar la referencia en el index por la versión que ustedes hayan descargado. Hasta hoy la última versión es jquery-1.7.2.min.js, entonces ese archivo lo descargamos y copiamos a la carpeta js de nuestro proyecto. Asimismo también damos click derecho en la carpeta js y elegimos nuevo, luego elegimos archivos de Java Script y lo llamamos funciones. Para tener toda la estructura lista y empezar con el proceso, descargamos la siguiente imagen y la copiamos en la carpeta images.

Una vez que hemos hecho todo lo anterior procedemos a descargar el proyecto que necesitamos para conectarnos y donde están los métodos de consulta a la Base de datos, así como también el driver necesario para conectarme a SQL SERVER 2008. Podemos descargarlo aquí, descargamos y descomprimimos las dos carpetas en la carpeta raíz de nuestro proyecto.

En el explorador de windows copiamos las dos carpetas driver sql y jdbc y debe ver así:



Ahora en el Net Beans nos vamos a abrir proyecto y seleccionamos el archivo jdbc de la carpeta de nuestro proyecto:



…y hacemos click en abrir proyecto. Doble click en el archivo ConectaDB.java del proyecto jdbc y cambiamos los parámetros necesarios para conectarnos: el primer parámetro driver, es la regla del driver que utilizaremos para conectarnos que lo agregaremos después, el segundo la cadena de conexión que para este caso será mediante un dsn que crearemos luego de nombre dsnProductos, lo siguiente es el usuario de sql y luego su contraseña.

Una vez que hemos modificado estos valores hacemos click derecho en el proyecto jdbc y elegimos limpiar y construir:

Ahora vamos a crear el dsn de usuario que nos permitirá conectarnos a la base de datos, para esto nos vamos a panel de control:



En el panel de control donde dice ver por, seleccionamos iconos pequeños y luego elegimos la opción Herramientas Administrativas.



Luego elegimos la opción Origenes de Datos ODBC.


Y se abre la siguiente pantalla:



damos click en agregar:


seleccionamos sql server y click en finalizar


Escribimos en nombre del dsn, una descripción y el servidor , para este caso local y click en siguiente:


Escribimos nuestro usuario de sql server y la contraseña y click en siguiente:


Seleccionamos la db a la cual nos queremos conectar y click en siguiente:


Click en finalizar.


Click en probar origen de datos.


Si todo estuvo bien sale esta imagen, click en aceptar.


Como vemos nuestro DSN de usuario(dsnProductos) ha sido creado.

Lo siguiente que vamos a hacer es agregar el proyecto jdbc y la librería para conectarnos a sql server a nuestro proyecto turorialJSP, entonces click derecho en el nombre del proyecto y elegimos propiedades.


Click en libraries.


Click en add project para agregar el proyecto jdbc.


Seleccionamos el proyecto jdbc que hicimos las modificación de conexión y que está dentro de nuestro proyecto tutorialJSP y le damos click en Agregar al proyecto archivos JAR.


Aquí ya aparece el proyecto jdbc agregado ahora hacemos click en add library.


Click en crear.


Le ponemos en nombre mssql_conect y hacemos click en aceptar.


Click en agregar archivo JAR/Carpeta.


Buscamos el archivo sqljdbc4 que está dentro de la carpeta driver sql en la carpeta raíz de nuestro proyecto tutorialJSP y le damos click en Agregar archivo JAR/Carpeta.


Click en Aceptar.


Como se creo la librería de nombre mssql_conect, ahora hacemos click en añadir biblioteca.


Click en aceptar.


Si desplegamos la carpeta libraries de nuestro proyecto vemos las librerías que acabamos de agregar.

Ahora que ya tenemos nuestras librerías necesarias ya agregadas, procedemos a programar cada uno de los archivos, empezaremos programando el archivo estilo.css de la carpeta css que nos va a permitir mejorar la apariencia de nuestra página:

estilo.css

Código :
body {
background-color:#F2F2F2;
font-family: verdana,arial;
font-size: 14px;
}

a{
color:#DF7401;
text-decoration: none;
}
a:hover{
color:#FFFF00;
}

#bienvenida
{
background-color: #F5F6CE;
border: 1px solid #FFBF00;
border-radius:5px;
color:#FF8000;
margin: 0px auto;
padding:10px 0 0 0;
text-align: center;

}

#menu{
background: #00BFFF;
border:1px solid #01A9DB;
border-radius: 5px;
border-bottom-right-radius: 100px;
border-bottom-left-radius: 100px;
height: 50px;
margin:0 auto;
width:50%;
-webkit-border-radius: 5px;
-webkit-border-bottom-right-radius: 100px;
-webkit-border-bottom-left-radius: 100px;
-moz-border-radius: 5px;
-moz-border-radius-bottomright: 100px;
-moz-border-radius-bottomleft: 100px;

}

li{
color:#fff;
cursor:pointer;
font-size:15px;
float:left;
list-style: none;
margin-left: 40px;

}
li:hover {
color:#F4FA58;
font-weight: bold;

}
#contenedor{
background-color:#fff;
border:1px solid #BDBDBD;
margin: 20px auto;
min-height: 300px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
width: 70%;

text-align: center;

}
.paginadoractivo{
padding:5px 10px 5px 10px;
font-family: “Trebuchet MS”, Arial, Helvetica, sans-serif;
font-size:14px;
background-color:#F5DAA0;
color:#000000;
border:0.5px solid #000000;
cursor:pointer;
}
.paginador{
padding:5px 10px 5px 10px;
font-family: “Trebuchet MS”, Arial, Helvetica, sans-serif;
font-size:14px;
background-color: #E7F7FF;
color:#000000;
border:0.5px solid #333333;
cursor:pointer;

}
.paginador:hover{
padding:5px 10px 5px 10px;
font-family: “Trebuchet MS”, Arial, Helvetica, sans-serif;
font-size:14px;
background-color:#73ADD6;
color: white ;
border:0.5px solid #333333;
cursor:pointer;
}
.tablita
{
font-size: 12px;
width:90%;
text-align: left;
margin:0 auto;
border: 1px solid #E6E6E6;
border-collapse: collapse;
font-family: “Trebuchet MS”, Arial, sans-serif;
color: #ffffff;
}
.tablita caption
{
font-size: 16px;
font-weight: normal;
padding: 5px;
/* background: #73ADD6 url(‘../images/fon_perfil.gif’) repeat-x;*/
border-right: 1px dotted #06C ;
background: #084B8A;
color: #FFFFFF;
-webkit-border-top-left-radius: 10px;
-webkit-border-top-right-radius: 10px;
-moz-border-radius-topleft: 10px;
-moz-border-radius-topright: 10px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
.tablita th
{
font-size: 13px;
font-weight: normal;
padding: 5px;
/* background: #73ADD6 url(‘../images/fon_perfil.gif’) repeat-x;*/
border-right: 1px dotted #06C ;
background: #084B8A;
color: #FFFFFF;
}
.tablita td
{
padding: 4px;
color: #086A87;

}
.tablita tfoot tr td
{
font-size: 12px;
color: #ffffff;
}
.tablita tbody tr:hover td
{
/* background: #FCFDFE; */
color:saddlebrown;
background: #E0F8F7;
}


Ahora procederemos a codificar nuestro archivo Index:

index.jsp
Código :
<%@page contentType=”text/html” pageEncoding=”UTF-8″%>








JSP Page


Bienvenidos a este tutorial JSP- MSSQL SERVER 2008 – JQUERY -CSS

  • Inicio
  • Listado
  • Registro

Aqui se mostrara el listado de productos




Ahora procedemos a codificar el código de la función listarProductos en el archivo funciones.js que se encuentra en la carpeta js de nuestro proyecto:

funciones.js
Código :
function listaproductos(pagina){
var rnd = Math.random()*11;

$.post(“lib/listado.jsp”,{
rnd:rnd,
pagina:pagina
},function(data){
$(“#contenedor”).html(data);
});
}

Por último codificamos el archivo jsp que nos realiza el listado y el que recibe la variable pagina por el método post en jquery, este archivo se encuentra en la carpeta lib de nuestro proyecto:

listado.jsp

Código :
<%–

Document : listado
Created on : 31/03/2012, 02:28:29 PM
Author : Jose Garcia
–%>

<%@ page import=”java.util.Vector, jdbc.*” %>
<%@page contentType=”text/html” pageEncoding=”UTF-8″%>
<%

out.println(“

”);

out.println(“”);
out.println(“”);
out.println(“”);
out.println(“”);
out.println(“”);
out.println(“”);
out.println(“”);
out.println(“”);

out.println(“”);
out.println(“”);
int RegistrosAMostrar=4;
int PaginasIntervalo=3;
int RegistrosAEmpezar=0;
int PagAct = 1;
String pag = request.getParameter(“pagina”);
if (pag==null || pag==”"){
RegistrosAEmpezar=0;
PagAct=1;
}else{
RegistrosAEmpezar=(Integer.valueOf(pag).intValue()-1)* RegistrosAMostrar;
PagAct=Integer.valueOf(pag).intValue();
}
%>
<%
Vector productos = Sql.consulta(“exec [sp_gen_s_productos] @RegistrosAMostrar=’”+RegistrosAMostrar+”‘,@RegistrosAEmpezar=’”+RegistrosAEmpezar+”‘”);//nos permite ejecutar un sp con parametros para la paginacion
for (int fils = 1; fils < productos.size(); ++fils) { //recorre el vector productos con los resultados del metodo Sql.consulta
String[] unaFila = (String[]) productos.get(fils);
%>


<%

} %>
<%
String NroRegistros = Sql.getCampo(“select count(*) from Productos p “
+ ” inner join CategoriaProductos cp on p.CodigoCategoriaProductos=cp.CodigoCategoriaProductos”);// obtengo la cantidad de registros actuales
int PagAnt=PagAct-1;
int PagSig=PagAct+1;

double PagUlt=Integer.valueOf(NroRegistros).intValue()/RegistrosAMostrar; //calculo cuantas paginas tendra mi paginacion
int Res=Integer.valueOf(NroRegistros).intValue()%RegistrosAMostrar;
if(Res>0){
PagUlt=Math.floor(PagUlt)+1;
}

out.println(“”);
out.println(“
LISTADO DE PRODUCTOS
CodigoProductoCategoriaPrecioStock
<%=unaFila[0]%> <%=unaFila[1]%> <%=unaFila[2]%> <%=unaFila[3]%> <%=unaFila[4]%>
”); //principio del paginador out.println(“
”); if(PagAct>(PaginasIntervalo+1)) { out.println(“<< Primero”); out.println(“ ”); } for ( int i = (PagAct-PaginasIntervalo) ; i <= (PagAct-1) ; i ++) { if(i>=1) { out.println(“”+i+””); out.println(“ ”); } } out.println(“”+PagAct+””); out.println(“ ”); for ( int i = (PagAct+1) ; i <= (PagAct+PaginasIntervalo) ; i ++) { if(i<=PagUlt) { out.println(“”+i+””); out.println(“ ”); } } if(PagAct<(PagUlt-PaginasIntervalo)) { out.println(“Ultimo >>”); } out.println(“
”); //fin del paginador %>


Si hemos hecho todo bien cuando hacemos click en listado de la pagina index.jsp nos aparecerá el listado en el div contenedor con su respectiva paginación y nos mostrará 4 registros por página cuando hacemos click en los números de páginas (si queremos que nos muestre más registros por página cambiamos el valor de la variable RegistrosAMostrar en la pagina listado.jsp) y se mostrará de la siguiente manera:

Primera página del paginador:


Segunda y última pagina del paginador


Espero que este tutorial les haya sido de gran ayuda

Gracias por la atención brindada ..hasta otra oportunidad
Category: 0 comentarios

Curso de programación de apps iPhone y Android en Bogotá y México

Este fin de semana será el Curso de desarrollo de apps para iPhone y Android en Bogotá y el 11 y 12 de mayo, este mismo curso estará en Ciudad de México. 

Un curso donde aprenderás las tecnologías con las que se crean aplicaciones móviles compatibles con iPhone, Android y iPad (Y hasta Blackberry si te interesa lo retro). Apps como Wikipedia, Machinarium y hasta Angry Birds para Facebook han sido creadas con los lenguajes que verás en el curso. 



¿Qué necesito para ir a estos cursos?


Saber programar y querer crear apps para poder vender (o regalar) en la App Store de Apple o en el Google Play Store de Android. No necesitas más que los conocimientos básicos de programación. Obviamente, si tienes teléfonos o tablets, lleva todo el hardware que quieras para probar. 

El curso de Bogotá es este fin de semana, 20 y 21 de abril. Con un valor de $440.000 pesos. 
El curso de México DF es el 11 y 12 de mayo. Con un valor de $2.900 pesos. 


Ambos cursos pueden pagarse con tarjeta de crédito, Paypal o deposito bancario. Y hay descuentos si vas en grupo, llamando al teléfono de cada curso. 

Si tienes más de 100 clabLevel en Cristalab, puedes ir gratis llevando a alguien más. Sólo mandas un mail a cursos@cristalab.com y tendrás tu entrada.
Category: 0 comentarios

Ruta estática por defecto en Redes

En este videotutorial, repasaremos el formato y la teoría que conforman la aplicacion de la conocida ruta estática por defecto ( Quad Zero ) y cómo nos servirá de apoyo en multitud de configuraciones de nuestras topologías de Red, haciendo la función de puerta de salida, para todos los paquetes sobre los que el dispositivo desconozca su red de destino y en la reducción de configuraciones y tamaño de las tablas de rutas, debido a la simplificación de su ID, máscara de red y el ámbito sobre el que se aplica.

Ventana externa 
Category: 0 comentarios

Pasar HTML a plantilla base en PHP usando Include

Muchos de nosotros hemos utilizado los Templates de Dreamweaver con la esperanza de facilitarnos, a futuro, la tarea de hacer cambios en partes de nuestras webs. Así, por ejemplo, si necesitamos agregar un botón al menú de un sitio de 40 páginas, hacemos dicha modificación en el template, para no tener que cambiarlo en todas las páginas, lo que nos demandaría un rato muy largo.

Sin embargo, las templates de Dreamweaver pueden no ser siempre la mejor solución ni la más fácil de administrar. Es por eso que resulta mejor maquetar nuestras plantillas en un solo archivo y luego dividirlo en partes: encabezado, menu, sidebar, footer, etc., como hace Wordpress. Esto nos permite un mayor control sobre los elementos que componen nuestras páginas. 

Vamos a ello:

Supongamos que creamos un archivo index.html, que contiene lo siguiente:

Código :


   
   Titulo de la pagina





  • Inicio
  • Quiénes somos
  • Contacto

Aquí va el título de la página

Aquí va algún texto y más abajo irían imágenes


Bien, esto es lo básico, si quisiéramos crear una segunda página, digamos quienes_somos.html, simplemente grabaríamos como y, conservando la misma estructura, cambiaríamos los contenidos, principalmente el del div principal (wrapper).

Pero, si el día de mañana tuviéramos que cambiar los datos del sidebar, el pie, el menú, etc., deberíamos cambiarlos en cada página. Para facilitar las cosas -y de paso no usar plantillas Dreamweaver- vamos a dividir las partes de la página en varios archivos y luego llamarlos con la sentencia include() de PHP.

Lo primero será renombrar nuestro index.html a index.php. Luego, podríamos copiar, por ejemplo, el menú del sitio a un archivo llamado menu.php, que contendría sólo lo siguiente:

Código :

  • Inicio
  • Quiénes somos
  • Contacto


Luego, volviendo a nuestro index.php, borraríamos el código que acabamos de copiar y, en su lugar, pondríamos:

Código :


Con esto tan simple, aparece el menú como si lo tuviéramos en la misma página.

Luego, haríamos lo mismo con todas las otras partes, creando los archivos respectivos a cada sección del diseño que se repite en cada página:
  • encabezado.php
  • sidebar.php
  • footer.php


Y reemplazaríamos el código en index.php, quienes_somos.php, contacto.php, etc., por su respectiva llamada
Código :




Así, cuando necesitáramos agregar un botón en el menú, una publicidad en el sidebar o cambiar los datos de contacto en el footer, simplemente acudiríamos a los archivos específicos, con lo cual estos cambios se mostrarían en todas las páginas.

Si alguien no desea utilizar la extensión php en los archivos de sus sitio web, puede simplemente renombrarlos mediante un archivo .htaccess.
Category: 0 comentarios

La nueva guerra de navegadores del 2012 y los prefijos de CSS3


Érase una vez en la web, un campo de batalla


Con la nueva era de HTML5, la web móvil y todas las nuevas tecnologías, mucha gente ha olvidado o simplemente nunca vivió la "Guerra de Navegadores", una época oscura en internet donde todos peleaban contra todos, todos se odiaban entre si, ningun navegador implementaba algo que otro ya lo tenía, y sentía la necesidad de tener su propia versión de dicha característica.

Era como "Game of Thrones", pero en internet.




Ésta página está optimizada para Internet Explorer 5.5 con resoluciones de 800x600


Es esa fecha en la que "Esta página web está diseñada para correr en tu viejo Internet Explorer 5.5 en resoluciones 1024x768 y tu que usas Netscape con 800x600 no me importas" era practicamente ley, y el resto de gente que usaba Netscape u Opera sufría en el olvido.

Señores, esto está ocurriendo otra vez, les presento la nueva guerra de navegadores del 2012 en la era móvil y el pésimo uso de los prefijos de CSS.


Los prefijos de los navegadores en CSS3


Código :
#logo {
   -webkit-animation: annoying_blink_effect 0.150s infinite;
   -webkit-transform: rotate(-15deg);
   -webkit-transition: all 10s linear;
}

Safari, el navegador por defecto del iPhone y iPad, con su motor de rendereado WebKit introdujo muchas caracteristicas que han sido un boom a nivel gráfico para la web, incluyendo a las transiciones, animaciones, transformaciones, y muy pronto Adobe esta implementará los shaders para CSS, que ahora se volvieron parte del estandar de CSS3 - estas nuevas caracteristicas nos han brindado muchas nuevas posibilidades en la web; nuestras apps son mas rapidas, mas bonitas y hasta a veces su interfaz se puede comparar a la de una aplicacion nativa.

Pero esto trajo un nuevo problema, al ser los pioneros, mucha gente empezó a usar estas propiedades sin importarle el resto de navegadores, cada vez vemos menos websites siendo probadas con otros navegadores que usen la última versión de WebKit, y esta resultando en websites muy pobres que solo fueron "Diseñadas para correr en iPhone 4S", olvidando al 3GS o a los Android, ni hablar de los Window Phone, y Opera Mobile...alguien se acuerda de Opera?


Opera en el vacío: "ya nadie me quiere ;__;"




Opera, Microsoft y Mozilla se hartaron, se cansaron que aunque sus navegadores soporten muchas de estas opciones de CSS3, los "diseñadores web" solo estan diseñando, maquetando y programando para WebKit.

Es entonces cuando Opera mandó a los estándares al diablo e implementó los prefijos -webkit- a su navegador en versión "experimental", echando la culpa de todo esto a nosotros, los que trabajan en la web. ¿Y saben qué? Creo que es cierto, muchos de nosotros usan -o, -ms, -moz además de -webkit, y por último muy pocos usan la propiedad SIN los prefijos en su código.




¿Oh, no, y ahora qué podemos hacer?


No mucho, solo rezar que Opera nunca pase esto a su versión estable, esperar a que algún día todos los navegadores decidan dejar de usar prefijos (muy improbable), y aprender a escribir buen CSS.

El estándar indica que uno debe escribirlo su código asi.
Código :
#logo {
   animation: annoying_blink_effect 0.150s infinite;
   transform: rotate(-15deg);
   transition: all 10s linear;
}

Pero esta es la web, los navegadores nunca quieren hacerte la vida fácil, entoncestienes que incluir todos los prefijos de los como se debe, además de la propiedad por defecto.
Código :
#logo {
   -o-animation: annoying_blink_effect 0.150s infinite;
   -ms-animation: annoying_blink_effect 0.150s infinite;
   -moz-animation: annoying_blink_effect 0.150s infinite;
   -webkit-animation: annoying_blink_effect 0.150s infinite;
   animation: annoying_blink_effect 0.150s infinite;

   -o-transform: rotate(-15deg);
   -ms-transform: rotate(-15deg);
   -moz-transform: rotate(-15deg);
   -webkit-transform: rotate(-15deg);
   transform: rotate(-15deg);
   
   -o-transition: all 10s linear;
   -ms-transition: all 10s linear;
   -moz-transition: all 10s linear;
   -webkit-transition: all 10s linear;
   transition: all 10s linear;
}



Pero los prefijos son horribles, arruinan mi código y los odio



Entonces, haz como los pros, aprende a usar pre-procesadores como Stylus, Less o Sass.

Y si por nada del mundo puedes usar uno de ellos, arruina la velocidad de carga de tu web usando prefix free.

Siempre usen los prefijos, no dejen que las empresas detras de los navegadores nos usen de excusa para hacernos la vida imposible.
Category: 0 comentarios

Carga de archivos con Uploadify en PHP y MYSQL

Hola a todos, en esta oportunidad traigo un tutorial sencillo, de cómo subir archivos a mi servidor, guardar el nombre y una descripción del archivo en una base de datos de mysql y luego mostrar en un listado los registros que voy ingresando, todo esto hecho con UPLOADIFY v2.1.4.

Antes que nada quiero decir que lo hice con esta versión porque es con la cual he trabajado hasta ahora, las últimas versiones no las probé aún, sé que hay algunos cambios , pero con esta versión funciona perfectamente. Pueden descargala de aquí y lo copiamos en el proyecto que crearemos más adelante. Bueno, ahora manos a la obra.



En primer lugar pues, hay que tener instalado un emulador de servidor Web local, ya sea xampp, wamp o app server, el que sea de su agrado. Para este ejemplo yo tengo instalado el xampp 1.7.2 (uds pueden descargarse el xampp la última versión o anteriores aquí )y obviamente ejecutando los servicios de Apache y de MySQL.


Una vez que tenemos nuestros servicios ejecutándose, procedemos a crear la base de datos en la cual vamos a guardar el nombre de la imagen concatenado con un número aleatorio de PHP, para que no guarde archivos con el mismo nombre, y una descripción de la imagen y un estado, para luego mostrar sólo las imágenes que estén activas, es decir que su estado sea 1; para eso en el navegador en la barra de direcciones escribimos localhosto 127.0.0.1 y nos aparece la interfaz de xampp. Nos vamos a herramientas y elegimos phpMyAdmin. Una vez dentro creamos la base de datos “tutorial”.


Luego una tabla llamada imágenes con la siguiente estructura:


Una vez que ya hemos creado nuestra tabla, ahora procedemos a realizar un proyecto PHP con la IDE que más les agrade, ya sea eclipse, netbeans u otra, para este caso yo lo he trabajado en netbeans 6.9.1, pero eso sí, debemos tener la siguiente estructura:(podemos descargarnos la ultima versión de jquery desde aquí) y la copiamos en la carpeta js.


Una vez que tenemos la estructura anterior procedemos a programar cada uno de los archivos. El código es el siguiente:

Carpeta estilos


Archivo estilo.css
Código :
body {
background:#fff;
}

.cajas{
background:#F7F8E0;
border:1px solid #00BFFF;
height: 30px;
border-radius:5px;
}

#contenedor{
background-color:#A9E2F3;
width:100%;
border-radius:10px;
margin:50px auto;
}

#nuevaimagen{
background-color:#A9E2F3;
float:left;
}

#listadoimagenes{
margin-left: 50px;
float:left;
}

#mensajevacio{
background: #084B8A url(../images/warning_32x32.png)no-repeat;
padding:10px;
color:#fff;
text-align: center;
width:300px;
border-radius:5px;
}

.botones{
background: #084B8A;
color:#fff;
padding:5px;
border: 1px solid #fff;
border-radius:5px;
cursor:pointer;
}

.botones:hover{
background: #0174DF;
}

#cabecera{
background: #084B8A ;
padding:10px;
color:#fff;
text-align: center;
font-size:14px;
border-radius:5px;
}

.formulario-title{
background: #0B0719;
color:#fff;
padding:5px;
text-align: center;
}

.demoTable {
border-spacing:1px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:10px;
background-color:#C3E6FF;
color: #b7b7b7;
width:100%;
margin:auto;
}

.demoTable td, .demoTable tr, .demoTable th{
border-collapse: separate;
border-collapse: collapse;
border-spacing: 0;
}

.demoTable caption {
font-weight: bold;
background: #50ADEA url(../images/corner.gif) no-repeat right top;
border-bottom:2px solid #1975d7;
color: #FFF;
text-transform:uppercase;
padding:10px;
margin:auto;
}

.demoTable td, .demoTable th {
padding: 4px;
}

.demoTable thead th {
text-align: center;
background: #C3E6FF;
color: #0B173B;
border: 1px solid #C3E6FF;
text-transform:uppercase;
}

.demoTable tr:hover{
background:#C3E6FF;
}

.demoTable tbody tr {
background-color:#C3E6FF;
color: #0B173B;
text-align:left;
}

.demoTable tbody tr th {
background-color:#C3E6FF;
color: #2E2E2E;
text-align:left;
}

.demoTable tbody tr.odd {
background: #f9f9f9;
border-top:1px solid #FFF;
}

/*.demoTable tbody tr:hover {
background: red;
border-top:1px solid #FFF;
}*/

.demoTable tbody tr:hover{
background: #fff;
color:#000;
}

.demoTable tbody tr {
height:50px;
background: #FAFAFA;
border: 1px solid #FFF;
}

.demoTable tbody tr.odd td{
background: #f9f9f9;
border-top:1px solid #FFF;
}

.demoTable td a:link, .demoTable td a:visited {
color: #0B3861;
text-decoration: none;
}

.demoTable td a:hover {
color: #0B3861;
border-bottom:2px solid #8FD5FF;
text-decoration: none ;
}

.demoTable tfoot th, .demoTable tfoot td {
background-color:#fff; padding:10px;
text-align:center;
font-family:Georgia, “Times New Roman”, Times, serif;
font-size:22px; font-weight:bold; font-style:italic;
border-bottom:3px solid #CCC;
border-top:1px solid #DFDFDF;
}

Carpeta images


Para la carpeta images nos descargamos las siguientes imágenes:




Carpeta js


Archivo funciones.js
Código :
$(document).ready(function(){
verformularionuevaimagen();
verlistadoimagenes();
})

function verformularionuevaimagen()
{
var randomnumber=Math.random()*11;
$.post(‘nuevaimagen.php’, {
randomnumber:randomnumber
}, function(data){

$(“#nuevaimagen”).html(data).slideDown(‘slow’);
});
}
function verlistadoimagenes()
{
var randomnumber=Math.random()*11;
$.post(‘libs/listadoImagenes.php’, {
randomnumber:randomnumber
}, function(data){

$(“#listadoimagenes”).html(data).slideDown(‘slow’);
});
}


Archivo nuevaimagen.js
Es aquí donde configuramos nuestro uploadify y le especificamos la carpeta donde queremos que nos guarde el archivo.
Código :
$(document).ready(function() {
$(“#file_upload”).fileUpload({
‘uploader’: ‘uploadify/uploader.swf’,//ruta del boton para subir el archivo
‘cancelImg’: ‘uploadify/cancel.png’,//boton para cacelar la carga del archivo
‘script’: ‘libs/subirarchivo.php’, //archivo que realiza la accion de subir el archivo al servidor y guardar en la bd

‘folder’: ‘uploads’, //directorio en el cual queremos que se guarde el archivo
‘buttonText’: ‘examinar’, //texto que contiene el boton
‘checkScript’: ‘uploadify/check.php’, //archivo que hace la verificacion de la subida de la imagen y si hay archivos con el mismo nombre
‘fileDesc’: ‘archivos imagen’,
‘auto’:false,//la subida no es atuomatica sino cuando nosotros hacemos clic en guardar imagen
‘fileExt’: ‘*.jpg;*.jpeg;*.gif;*.png’, //tipos de archivo a seleccionar , para este caso imagenes

‘multi’: false,//solo un archivo a la vez puedo subir
‘displayData’: ‘percentage’,//el avance de la subida al servidor se muestra en porcentajes
onComplete: function (){
verlistadoimagenes(); //una vez que guarda el archivo me ejecuta la funcion que lista los registros de la tabla imagenes
$(“#txtdes”).val(”);//limpia el textarea
}

});
$(‘#txtdes’).bind(‘change’, function(){
$(‘#file_upload’).fileUploadSettings(‘scriptData’,'&des=’+$(this).val());//capturo el valor del textarea y lo envio para poder insertarlo al archivo subirarchivo.php
});

})

function startUpload(id, conditional) //funcion que me realiza la carga teniendo como requisito obligatorio ingresar algo en la descripcion(recibe el id del file y el id del textarea)
{ if(conditional.value.length != 0) {
$(‘#’+id).fileUploadStart();
} else
alert(“ingrese un descripción para la imagen”);
}

Carpeta Libs


Archivo conexion.php
Código :


Archivo listadoimagenes.php
Código :
0)
{
echo””;
echo””;
echo””;
echo””;
echo””;
echo””;
echo””;
while($imagen=(mysql_fetch_array($listar)))
{
echo””;
if($imagen['ImagenEstado']==1){
echo””;
}
else
{
echo””;
}
echo””;

echo””;

echo””;
}
echo”
LISTADO DE IMAGENES
EstadoDescripcionMiniatura
”.$imagen['ImagenDescripcion'].”
”; }else { echo”
no existen imagenes registradas
”; } ?>


Archivo subirarchivo.php
Código :

Carpeta Raíz


Archivo index.php
Código :














TUTORIAL SUBIR ARCHIVOS AL SERVIDOR Y GUARDAR NOMBRE EN BD CON LISTADO

REGISTRAR IMAGENES
Breve descripcion Agregar Imagen


El siguiente paso es descomprimir el archivo uploadify y copiar la carpeta uploadify que descargamos en el link que les pase al principio en nuestra carpeta raíz de nuestro proyecto.

Ahora, si hemos hecho todo bien, ejecutamos nuestro proyecto y debería de verse así


Hacemos clic en examinar y seleccionamos la imagen que queremos subir:


Ahora, si queremos guardar la imagen sin haber ingresado una descripción, nos muestra el siguiente mensaje:


Ingresamos una descripción:


Hacemos clic en Guardar Imagen y automáticamente nos muestra el listado con el registro ingresado y la imagen:


Ahora verificamos si realmente subió el archivo de imagen a la carpeta uploads de mi proyecto:


Por ultimo verficamos en la BD que se haya insertado el registro, aunque con solo ver que aparece el listado se verifica, pero de todas maneras…


Como vemos funciona perfectamente…. eso es todo por ahora… gracias por la atención brindada; comentarios, críticas constructivas o sugerencias serán bien recibidas.

Hasta otra oportunidad.
Category: 0 comentarios

Icono de reproductor de vinilo en Illustrator

Usaremos las herramientas que nos ofrece illustrator, en conjunción con los efectos adicionales usados para crear sombreados y resplandores, para dar vida a esta ilustración de un clásico reproductor de disco de vinilo, que nos servirá como elemento para nuestros diseños.

El resultado final será el siguiente:



Ventana externa 

Saludos.
Category: 0 comentarios