jueves, 18 de julio de 2013

Evento .toggle(), .toggleClass()

El evento toggle() toma dos argumentos, cada uno de los cuales es una función . El primer clicc hace que se ejecute la primera funcion y el segundo click hace que se ejecute la segunda función.

$(document).ready(function() {
   $('#switcher h3').toggle(function() {
     $('#switcher .button').addClass('hidden');
   }, function() {
    $('#switcher .button').removeClass('hidden');
   });



El   metodo .toggleClass() comprueba si existe la clase antes de aplicarla.

 $(document).ready(function() {
   $('#switcher h3').click(function() {
     $('#switcher .button').toggleClass('hidden');
   });
 });


El metodo .hover() toma dos argumentos de función la primera se ejecuta en el over  y la segunada al salir.

 $(document).ready(function() {
   $('#switcher .button').hover(function() {
     $(this).addClass('hover');
   }, function() {
     $(this).removeClass('hover');
   });
 });



Eventos

El metodo bind  nos permite especificar cualquier evento javascript y anexarle un comportamiento.


 $(document).ready(function() {
   $('#switcher-large').bind('click', function() {
     $('body').addClass('large');
   });

 });


body.large .chapter {
  font-size: 1.5em;
}




      <div id="switcher">
        <h3>Estilo del switch</h3>
        <div class="button selected" id="switcher-default">
          Normal
        </div>
        <div class="button" id="switcher-narrow">
          Narrow Column
        </div>
        <div class="button" id="switcher-large">
          Large Print
        </div>
      </div>

Métodos transversales DOM

.filter()
.next()
.nextALL()
.prev()
.prevAll
.Simblings

  $('a').filter(function() {
    return this.hostname && this.hostname != location.hostname;
  }).addClass('external');
});
 $('td:contains(Henry)').nextAll().andSelf().addClass('highlight');



Selectores de formularios

Le toca el turno a los selectores de formulario. Este tipo de selectores se utilizan para acceder a una gran variedad de elementos de formulario dependiendo del tipo.
Como son una gran cantidad no voy a seguir el formato empleado en los otros selectores. Vamos a ver un resumen de la función de cada selector y si acaso algunos ejemplos. De todas formas la mayoría son autodescriptivos.

Form Selector

  • :input Selector : Selecciona todos los elementos de formulario(<input> de todos los tipos, <select>, <textarea> y <button>).
  • :text Selector : Selecciona todos los inputs de tipo texto(<input type=”text”>).
  • :password Selector : Selecciona todos los inputs de tipo password(<input type=”password”>).
  • :radio Selector : Selecciona todos los inputs de tipo radio(<input type=”radio”>).
  • :checkbox Selector : Selecciona todos los inputs de tipo checkbox(<input type=”checkbox”>).
  • :submit Selector : Selecciona todos los inputs de tipo submit y los botones (<input type=”submit”>, <button>).
  • :image Selector : Selecciona todos los inputs de tipo image(<input type=”image”>).
  • :reset Selector : Selecciona todos los botones de reset(<input type=”reset”>).
  • :button Selector : Selecciona todos los botones e inputs de tipo button(<button>, <input type=”button”>).
  • :file Selector : Selecciona todos los inputs de subida de archivos(<input type=”file”>).
  • :enabled Selector : Selecciona todos los elementos de formulario que están habilitados, es decir, aquellos que no tienen el atributo disabled.
  • :disabled Selector: Selecciona todos los elementos de formulario que están deshabilitados, es decir, aquellos que tienen el atributo disabled.
  • :checked Selector: Selecciona todos los elementos del formulario que están checkeados, es decir, los botones de checkbox y radio seleccionados.
  • :selected Selector: Selecciona todos los elementos de formulario que están seleccionados, es decir, los elementos <option> seleccionados en un <select>.
Como la mayoría de selectores de formularios son autodescriptivos no veo la necesidad de ejemplos. Se utilizan mucho para la validación de formularios o incluso para dar estilos en general a todo un formulario.
Como con otros selectores, los selectores de formulario se pueden combinar con mayor especificidad. Podemos, por ejemplo seleccionar todos los botones de tipo radio seleccionados pero no los de tipo checkbox mediante la combinación de los selectores $(‘:radio:checked’) o seleccionar todos los inputs de tipo text deshabilitados mediante la combinación de selectores $(‘:text:disabled’).

Selectores personalizados

esta funcion busca todos 

$(document).ready(function() {
  // $('tr:odd').addClass('alt');
  $('tr:nth-child(even)').addClass('alt');

le aplica a todos los tr impares el estilo alt



.alt {
  background-color: #ccc;
}

<table>
  <tr>
      <td>As You Like It</td>
      <td>Comedy</td>
      <td></td>
  </tr>
  <tr>
      <td>All's Well that Ends Well</td>
      <td>Comedy</td>
      <td>1601</td>
  </tr>
  <tr>
      <td>Hamlet</td>
      <td>Tragedy</td>
      <td>1604</td>
  </tr>
  <tr>
      <td>Macbeth</td>
      <td>Tragedy</td>
      <td>1606</td>
  </tr>
  <tr>
      <td>Romeo and Juliet</td>
      <td>Tragedy</td>
      <td>1595</td>
  </tr>
  <tr>
      <td>Henry IV, Part I</td>
      <td>History</td>
      <td>1596</td>
  </tr>
  <tr>
      <td>Henry V</td>
      <td>History</td>
      <td>1599</td>
  </tr>
</table>

Selector contains()

$(document).ready(function() {
  // $('tr:odd').addClass('alt');
  $('tr:nth-child(even)').addClass('alt');

  $('td:contains(Henry)').nextAll().andSelf().addClass('highlight');//.siblings()
  $('th').parent().addClass('table-heading');
});






















Selectores de atributo

Nos permite buscar dentro de los atributos de una etiqueta.

$(document).ready(function() {
  $('a[href^=mailto:]').addClass('mailto');  // busca en el atributo donde el principio se = mailito
  $('a[href$=.pdf]').addClass('pdflink'); // busca en el atributo donde el final sea = pdf
  $('a[href*=henry][href!=mailto:henryiv@king.co.uk]').addClass('henrylink');

// busca en el atributo donde el final sea = * cualquer cosa y signo de exclamacion para cosas negativas, los atributos se pueden combinar

a.mailto {
  background: url(images/email.png) no-repeat 100% 2px;
  padding-right: 18px;
}
a.pdflink {
  background: url(images/pdf.png) no-repeat 100% 0;
  padding-right: 18px;
}
a.henrylink {
  background-color: #fff;
  padding: 2px;
  border: 1px solid #000;

<li><a href="/asyoulikeit/">As You Like It</a></li>
<li><a href="hamlet.pdf">Hamlet</a></li>
<li>Henry IV (<a href="mailto:henryiv@king.co.uk">email</a>)
<li><a href="http://www.shakespeare.co.uk/henryv.htm">Henry V</a></li>

Selectores

Son tres tipos de selectores que podemos utilizar

$('p') selecciona cualquier etiqueta html
$('#ud-id')  selecciona los ids de la etiquetas o divs
$('.clase') Selecciona todos los elementos que tengan la clase

Se genera un bucle automatico que busca los elemtos que se pasan como parametro, es decir nos ahorramos el for.


Ejemplo: Esto se lee asi buscas los hijos  li de id  selected-plays y le aplica el estilo horizontal
 y las que no sean hijos directos de  selected-plays  que son li y no se le aplico  el estilo horizonal le aplicias el estilo 'sub-level'

$(document).ready(function() {
  $('#selected-plays > li').addClass('horizontal');
  $('#selected-plays li:not(.horizontal)').addClass('sub-level');
 });

.horizontal {
  float: left;
  list-style: none;
  margin: 10px;
}


<ul id="selected-plays" class="clear-after">
  <li>Comedies
    <ul>
        <li><a href="/asyoulikeit/">As You Like It</a></li>
        <li>All's Well That Ends Well</li>
        <li>A Midsummer Night's Dream</li>
        <li>Twelfth Night</li>
    </ul>
  </li>
  <li>Tragedies
    <ul>
        <li><a href="hamlet.pdf">Hamlet</a></li>
        <li>Macbeth</li>
        <li>Romeo and Juliet</li>
    </ul>
  </li>
  <li>Histories
    <ul>
        <li>Henry IV (<a href="mailto:henryiv@king.co.uk">email</a>)
        <ul>
          <li>Part I</li>
          <li>Part II</li>
              </ul>
            </li> 
            <li><a href="http://www.shakespeare.co.uk/henryv.htm">Henry V</a></li>
            <li>Richard II</li>
    </ul>
  </li>
</ul>


Forma de llamar un jquery

Esta es la sintaxis para llamar a jquery  donde se va ejecutar cuando se carga todo el html  y mediante una funcion  anonima.



$(document).ready(function() {
  $('.poem-stanza').addClass('highlight');
});

En jQuery, el signo de  $ es simplemente un alias para jquery. Puden surgir conflictos si se usan mas de estas librerias, para evitar estos conflictos remplazamos el signo de $  con jQuery y listo.

al ejecutar  el archivo le agrea el estilo al la clase


.highlight {
  font-style: italic;
  border: 1px solid #888;
  padding: 0.5em;
  margin: 0.5em 0;
  background-color: #ffc;
}


 <div class="poem-stanza">
          <div>sevot yhtils eht dna ,gillirb sawT'</div>
          <div>;ebaw eht ni elbmig dna eryg diD</div>
          <div>,sevogorob eht erew ysmim llA</div>
          <div>.ebargtuo shtar emom eht dnA</div>
        </div>




martes, 16 de julio de 2013

Backups MySQL con mysqldump


Mysqldump, como la mayoría sabéis, es una herramienta de mysql que sirve para realizar copias de seguridad de bases de datos. Es esencial conocer el uso básico de esta herramienta, como es esencial tener un sistema de backups adecuado para cualquier dato almacenado con un mínimo de importancia.
Os voy a poner los ejemplos más básicos y comunes para realizar backups desde línea de comandos con mysqldump.
Realizar backup de una única base de datos:
mysqldump -u root -p nombre_base_de_datos > fichero.sql
De este modo, realizará el backup de la base de datos, solicitando la clave del usuario root mysql, si queréis también se puede especificar pegado a la letra “p” -pclave.
Y si quisieramos restaurar esa base de datos, haríamos lo siguiente:
mysql -u root -p  nombre_base_de_datos < fichero.sql
Lo mismo ocurre con la clave del usuario root, la podemos especificar o esperar a que la pregunte.
Si quisieramos realizar un backup de todas las bases de datos:
mysqldump -u root -p --all-databases > fichero.sql
Y si solo quisieramos hacer backup de un par de bases de datos:
mysqldump -u root -p --databases base_datos1 base_datos2 > fichero.sql
Para hacer backup de una sola tabla, dentro de una base de datos:
mysqldump -u root -p base_datos tabla > fichero.sql
Esto es, a grandes rasgos, lo más básico de la herramienta mysqldump, en la propia ayuda de la herramienta encontraréis mucha más información:
mysqldump --help

martes, 2 de julio de 2013

Conectar mysql de manera remota

Cuando tratamos de conectar a un servidor MySQL y obtenemos el ERROR 1130 (HY000): Host ‘x.x.x.x’ is not allowed to connect to this MySQL server imaginamos que algo habrá que configurar en el server MySQL para permitir el acceso remoto a un cliente MySQL, exactamente eso, a nuestro servidor MySQL tenemos que decirle como, desde donde y quien puede acceder a que bases de datos configuradas en el servidor MySQL. Para los novatos como yo, este es el error de conexión que obtenemos si tratamos de conectar de forma remota a nuestro server MyQSL sin configurar:


hnoguera@cliente:~$ mysql -h 10.0.0.143 -u cliente -p
Enter password: 
ERROR 1130 (HY000): Host '10.0.0.15' is not allowed to connect to this MySQL server

Nota: si tratamos de acceder incluso desde el propio server MySQL a la consola de MySQL usando como destino de conexión la IP de cualquiera de las interfaces de red de servidor la respuesta será la misma. Con la configuración por defecto del servidor MySQL solo podremos acceder en modo local y apuntando a localhost o 127.0.0.1.

Estos son los pasos para habilitar la conexión remota desde un cliente determinado:

  1. Entramos como root en el server MySQL, damos de alta un nuevo usuario con el nombre que queramos usar con el cliente remoto al que le damos acceso a una o varias de las bases de datos que haya creadas en el servidor MySQL, desde una IP de cliente determinada y con un password definido para el usuario a crear:

    hnoguera@cliente:~$ mysql -h localhost -u root -p
    Enter password: 
    mysql> GRANT SELECT, INSERT ON bdd.* TO 'nuevo_usuario'@'10.0.0.15' IDENTIFIED BY 'pass' ;
    Query OK, 0 rows affected (0.00 sec)

    Nota: Acabamos de crear el usuario llamado “nuevo_usuario” y le hemos dado permisos de selección e inserción (SELECT, INSERT) a todas las tablas de la base de datos llamada “bdd” (bdd.*) desde la IP remota “10.0.0.15″ y con el password “pass”. En cuanto a los privilegios dados al usuario podemos elegir los que necesitemos -> tabla de privilegios que provee MySQL

    Con el comando anterior se hacen todos los pasos a la vez, se crea el usuario con el password especificado, se le dan permisos de acceso y se especifica una IP desde la que ese usuario se podrá conectar de forma remota, pero esto no es todo para poder acceder de forma remota al server MySQL.

  2. Lo siguiente es cambiar la configuración del archivo de configuración mysql que está en /etc/mysql/my.cnf, y en la línea 47 tenemos:

    bind-address = 127.0.0.1

    En este parámetro se configura la IP de la interfaz local de escucha del servidor MySQL, por defecto la escucha se hace solo como localhost así que para que podamos acceder desde cualquier IP que tenga el servidor configurada necesitaremos cambiar la línea anterior por:

    bind-address = 0.0.0.0

    Nota: no es posible poner más de una IP como dirección de escucha así que no podemos configurar por ejemplo solo 2 de las 3 interfaces de red de nuestro server, serán o todas o solo una de ellas.

  3. Ahora solo el servidor MySQL:

    root@LAMP-squeeze:~# /etc/init.d/mysql restart
    Stopping MySQL database server: mysqld.
    Starting MySQL database server: mysqld.

  4. Y probar que todo funciona correctamente desde el cliente habilitado:

    hnoguera@cliente:~# mysql -h 10.0.0.143 -u nuevo_usuario -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 36
    Server version: 5.1.49-3 (Debian)
    
    Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
    This software comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to modify and redistribute it under the GPL v2 license
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>