Módulo de pago TPV Caja Rural osCommerce

Bueno pués me ha tocado realizar una adaptación de un módulo para osCommerce y lo comparto.

==========================================================================
==========================================================================
Release Author: RobiHm
http://www.indomita.org

Cambios respecto al original:
*El modo de generación de firma digital se genera con sha1 en vez de con una .dll.
Así se evita el tener que compilar ni instalar ningún archivo que no sea imprescindible.

Released under the GNU General Public License

==========================================================================
==========================================================================

Descargar Módulo

Plantilla para dibujar un dragón, adaptable a demonio, lobo …

Bueno, haciendo limpieza del discco externo me he topado con un manual de como hacer la cabeza de un dragón. En su día me sorprendió su simpleza y hoy lo comparto.

El auto del tutorial no lo recuerdo pero estaba en la página www.cemzoo.com.

Instrucciones del autor:
Este «formato» lo utilizo para dibujar dragones, lobos, aves, serpientes, gatos y demonios.

Puede deformarse y volverse algo totalmente nuevo, de hecho, yo lo hice «deformando» las caras de los sayayins de Dragon Ball. (para que se hagan una idea de cuanto puede cambiar)

—————-

Vamos a dibujar un dragón bastante simple.

  • Empezamos dibujando el ojo, si el dibujo va a ser grande y detallado, ponle lagrimales al ojo, brillo y una pupila como de serpiente.
  • Luego la ceja (¿ven cómo se parece a la de Goku cuando se transformaba en el de pelo largo? xD)
  • Luego la otra ceja… en esta pose solo se ve la parte superior, no intenten hacer el ojo, a menos de que giren la cabeza.
  • Pasamos al cráneo y la nariz, esta puede deformarse para hacer un pico de águila, o un demonio narizón. La boca termina siempre detrás del ojo (le da un aire de listo y malvado)
  • Si hacen la boca cerrada es más fácil y le da al dragón un aire más tranquilo. Y menos salvaje, solo junten la boca con la nariz.
  • Con los dientes, pueden ser de muchas maneras, afilados, redondeados, muy afilados y super afilados. A la parte de abajo pueden resaltarle las encias para que parezca más agresivo.
  • Una vez terminada la boca. Pueden contener muchos detalles. Hasta barbas para que el dragón parezca anciano. Hacer un apunte, algunos reptiles poseen un «músculo marcado» al principio de la boca (como el de los cocodrilos) si no lo hacen puede verse como una serpiente y tampoco queda mal.
  • Encima de ese músculo va el oído, pueden hacer solo ese orificio o ponerle membranas.
  • Luego los cuernos y el cuello.
  • Bajo la boca, se le puede hacer un pliego, como el que tienen las iguanas.

——–

El tutorial es bastante simple, el dragón apenas posee detalles, pero se le pueden añadir, ya sean escamas, pelo, cuernos, espinas, membranas y hasta berrugas.

Para hacer demonios o lobos, solo hay que cambiarles ciertos detallitos, por ejemplo para cambiar la cabeza de un dragón a un lobo, simplemente quitarle los cuernos y ponerle orejas picudas.
Parte la boca en dos (como en los perros) en lugar del pico.
Y en lugar de las dos fosas nasales haz la punta de la nariz pentagonal (un pentágono invertido) del lobo.
Y en lugar de un cuello largo se pone una melena y detallitos como pelos.

Plantilla para dibujar un lobo
Plantilla para dibujar un lobo 2
Plantilla para dibujar un dragón simple
Plantilla para dibujar un dragón
Plantilla para dibujar un dragón con cuernos
Plantilla para dibujar un gato

Funcioncita para evitar datos de la caché en Ajax

Partiendo de que internet explorer guarda en caché las peticiones Ajax, es preferible añadir a cada petición un valor aleatorio. De este modo lograremos obtener un valor siempre válido y no proveniente de la cache.

ejemplo de función (min y max indica el intervalo de valores)

function semilla(min,max){
  num = max - min;
 aleat = Math.random() * num;
 aleat = Math.floor(aleat);

 return parseInt(min) + aleat;
}

ahora simplemente en las llamadas pedimos una semilla aleatoria

$("#prueba1").load("peticion_ajax.php?precio=chistorra&semilla="+semilla(1,1000));

Es un detalle que jode bastante puesto que te puedes volver loco buscando el porque en un navegador te da valores válidos y en otro no da valores actualizados xD

Quitándome el miedo con Ajax

Bueno hasta el no había necesitado utilizar Ajax(Asynchronous JavaScript And XML) para nada. Tenía una especie de sensación que me recorría todo el cuerpo cada vez que pensaba en ponerme con ello y siempre acababa dejándolo para otro día.

Hoy por fin, por mis santos co***** me ha apetecido y me he puesto al lío.

He comenzado buscando información acerca de su estructura y funcionamiento, algo que ya me había mirado con anterioridad.
Y he generado un código, por lo que he visto, bastante estandar.

Vamos a validar un nick de usuario, que no se encuentre repetido.
El ejemplo es bastante simple, consta de un formulario con un campo de texto que pide un nick y un botón que al pulsarlo comprueba si se encuentra en uso.

Comenzamos creando el objeto necesario para tal menester.
Para ello vamos a desarrollar una función.

/* función constructora del objeto request */
function createXMLHttpRequest() {
if (window.ActiveXObject) {
/* si es interné explóre  */
return new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
/* si no es interné explóre  */
return new XMLHttpRequest();
}else{
/* mal comenzamos si no permite crear el objeto */
alert('No existe la posibilidad de AJAX');
}
}

/* generamos la variable por eso de tenerla global */
var xmlHttp;

/* creamos la función que coprobará si el nick ya existe o no */
function comprueba_nick(){
/* generamosla dirección a la que vamos a enviar los datos a validar, en este caso es la página validar.php en la que deberemos tener un código que nos devuelva si es un nick que se encuentra en uso o no. Por ejemplo: 'Nick Disponible' / 'Nick en Uso' */
var nick=document.getElementById("nick").value;
var url = "validar.php?nick="+ escape(nick);
/* creamos el objeto desde nuestra función constructora */
xmlHttp = createXMLHttpRequest();
/* enviamos una llamada a la dirección y le especificamos que queremos la respuesta por GET, también admite por POST y PUT */
xmlHttp.open("GET", url);
/* comprobamos que nos llegan los datos para ello, hemos creado una función llamada Completado */
xmlHttp.onreadystatechange = Completado;
/* ya hemos terminado, cerramos el chiringuito */
xmlHttp.send(null);
}

/* la función Completado nos informa cuando el estado de la petición se ha completado. Existen cinco estados posibles: 0 (sin iniciar), 1 (cargando), 2 (cargado), 3 (en proceso), 4 (completado)</span>
function Completado() {
if (xmlHttp.readyState == 4) {
/* se ha completado, ahora vamos a informar de que el nick es correcto, cargamos un div mismamente con la respuesta, o podemos sustituir el código por un     alert(xmlHttp.responseText); */
document.getElementById("cnick").innerHTML=xmlHttp.responseText;
}
}

El formulario html sería algo así:

Validando un Nick con AJAX:

<input id="nick" name="nick" type="text">
<div name="cnick"</div>;

<input id="manolete" value="Comprobar" onclick="comprueba_nick();" type="button">

El archivo PHP, no lo pongo, pero debería de tener una estructura, para este caso, similar a esto:
1º – comprobamos que piden datos
2º – conectamos a la base de datos
3º – buscamos un nick que sea igual
4º – si lo encontramos respondemos con un echo mismamente ‘Nick en Uso’
5º – si no lo encontramos respondemos ‘Nick Disponible’

Resumiendo quedaría algo así :

<script language="JavaScript" type="text/javascript">
function createXMLHttpRequest() {
if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
return new XMLHttpRequest();
}else{
alert('No existe la posibilidad de AJAX');
}
}

var xmlHttp;

function comprueba_nick(){
var nick=document.getElementById("nick").value;
var url = "validar.php?nick="+ escape(nick);

xmlHttp = createXMLHttpRequest();

xmlHttp.open("GET", url);

xmlHttp.onreadystatechange = Completado;
xmlHttp.send(null);
}

function Completado() {
if (xmlHttp.readyState == 4) {
document.getElementById("cnick").innerHTML=xmlHttp.responseText;
}
}
</script>

Validando un Nick con AJAX:

<input id="nick" name="nick" type="text">
<div name="cnick"</div>

<input id="manolete" value="Comprobar" onclick="comprueba_nick();" type="button">

Ahora que sabes todo esto intenta crear una llamada en ajax para insertar el usuario sin recargar la página 😀

Bueno, tras aprender los conceptos básicos del tema (aprendo muy deprisa), me he metido con una librería enfocada a multitud de tareas con javascript, la librería se llama Jquery y no tiene mala pinta. También he oído que existe un tal Prototype, pero de momento me quedo con esta.
Tras leer la Documentación Ajax Jquery he creado un código bastante simple para la parráfada anterior, mejor que lo comprobéis con vuestros propios ojos … xD
Si no tienes mucha idea hay que tomarse el asunto con mucha calma.

/* te descargas la librería, la posicionas donde te salga, yo la he puesto en la misma ubicación del documento. Para incorporala a la página con la siguiente instrucción es más que suficiente (recuerda adaptar la ruta a donde la posiciones) */
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
/* no voy a explicar gran cosa ya que en la documentación viene bastante clarito, lástima del inglés xD
El símbolo "$" indica la creación de eventos y demás para dicha librería. La nomenclatura utilizada es muy parecida a la de CSS. El método ".bind" nos permite crear un evento al objeto al que hacemos mención, en este caso, al botón "manolete". Indicamos en que tipo de evento va a saltar, "Click" y que queremos hacer, yo he creado la función directamente ahí :D
lo que hace esa función/bloque_de_acciones es cargar mediante el evento ".load" una página, la librería se encarga de crear el objeto y recibir los datos ... etc ... etc ... Por lo que cuando se clicke en el botón html tendremos el mismo resultado que antes, se cargará en la capa cnick la respuesta obtenida*/

$("#manolete").bind('click', function(){ $("#cnick").load("validar.php?nick="+$("#nick").attr("value"))});
</script>

En fin quedaría algo así, fíjate bien ya que he quitado el onClick del botón «manolete», puesto que lo hacemos desde Jquery.

//Validar un usuario con Ajax#
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$("#manolete").bind('click', function(){ $("#cnick").load("validar.php?nick="+$("#nick").attr("value"))});
</script>

Validando un Nick con AJAX:

<input id="nick" name="nick" type="text">
<div name="cnick">

<input id="manolete" value="Comprobar" type="button">
</div>