Psicocanis Servicio de etología clínica veterinaria

Author: Adrià Cidre  |  Category: PHP

Recientemente he lanzado Psicocanis.com una web/blog sobre etología clínica veterinaria, que intenta posicionarse como sitio de referencia en este sector.

Psicocanis - Servicio de etología clinica canina

Psicocanis - Servicio de etología clinica veterinaria

Espero que os guste

PHP: Array 2 JSON

Author: Adrià Cidre  |  Category: PHP

Genial función en PHP que transforma un array PHP en una salida tipo Json. Genial para PHP4 que no integraba esta funcionalidad de serie.


function array2json($arr) {
  if(function_exists('json_encode')) return json_encode($arr); //Lastest versions of PHP already has this functionality.
  $parts = array();
  $is_list = false; 

  //Find out if the given array is a numerical array
  $keys = array_keys($arr);
  $max_length = count($arr)-1;
  if(($keys[0] == 0) and ($keys[$max_length] == $max_length)) {//See if the first key is 0 and last key is length - 1
      $is_list = true;
      for($i=0; $i$value) {
      if(is_array($value)) { //Custom handling for arrays
          if($is_list) $parts[] = array2json($value); /* :RECURSION: */
          else $parts[] = '"' . $key . '":' . array2json($value); /* :RECURSION: */
      } else {
          $str = '';
          if(!$is_list) $str = '"' . $key . '":'; 

          //Custom handling for multiple data types
          if(is_numeric($value)) $str .= $value; //Numbers
          elseif($value === false) $str .= 'false'; //The booleans
          elseif($value === true) $str .= 'true';
          else $str .= '"' . addslashes($value) . '"'; //All other things
          // :TODO: Is there any more datatype we should be in the lookout for? (Object?) 

          $parts[] = $str;
      }
  }
  $json = implode(',',$parts); 

  if($is_list) return '[' . $json . ']';//Return numerical JSON
  return '{' . $json . '}';//Return associative JSON
}

TextMate: Sintaxis en ficheros ctp (CakePHP)

Author: Adrià Cidre  |  Category: CakePHP, TextMate

Para resaltar la sintaxis de los ficheros ctp, es tan sencillo como seguir los siguientes pasos.

Abre la consola y escribe

$ cd ~/Library/Application\ Support/TextMate/Bundles

A continuación

$ svn co http://macromates.com/svn/Bundles/trunk/Review/Bundles/PHP\ Cake.tmbundle

Ahora solo tienes que abrir los ficheros con extensión ctp y listo

PHP: Contraseña aleatoria

Author: Adrià Cidre  |  Category: MiniCodes, PHP

Cuando damos de alta usuarios de forma automática a menudo necesitamos poner una contraseña por defecto. Este script PHP nos devuelve una contraseña aleatoria de la longitud en caracteres que le pasemos


function getRandomPWD($length = 10){
  $password = "";
  $possible = "0123456789bcdfghjkmnpqrstvwxyz";
  $i = 0; 

  while ($i < $length) {
    $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);

    if (!strstr($password, $char)) {
      $password .= $char;
      $i++;
    }
  }
  return $password;
}

Código original

PHP – Diferencia entre dos fechas

Author: Adrià Cidre  |  Category: MiniCodes, PHP

Bueno pues igual que en javascript, aquí tenéis la función PHP para calcular los días/noches de diferencia entre dos fechas.


function dateDifference($d1, $d2){
	$v1 = explode("-", $d1);
  $date1 = mktime(0, 0, 0, intval($v1[1]), intval($v1[0]), intval($v1[2]));

	$v2 = explode("-", $d2);
  $date2 = mktime(0, 0, 0, intval($v2[1]), intval($v2[0]), intval($v2[2]));

  $dateDiff = $date2 - $date1;

  return floor($dateDiff/(60*60*24));
}

Javascript – Diferencia entre dos fechas

Author: Adrià Cidre  |  Category: Java Script, MiniCodes

Ahora mismo estoy desarrollando una aplicación para un hotel en la que el usuario tiene que seleccionar dos fechas, y hay que calcular la diferencia entre las dos para obtener el número de noches que se va a alojar.

Solo tenéis que utilizar esta función javascript, que os devolverá un entero con el numero de noches.

function getNumeroDeNits(){
	var d1 = $('#datepicker1').val().split("-");
	var dat1 = new Date(d1[2], parseFloat(d1[1])-1, parseFloat(d1[0]));
	var d2 = $('#datepicker2').val().split("-");
	var dat2 = new Date(d2[2], parseFloat(d2[1])-1, parseFloat(d2[0]));

	var fin = dat2.getTime() - dat1.getTime();
	var dias = Math.floor(fin / (1000 * 60 * 60 * 24))  

	return dias;
}

Esta claro que en html deberíais tener dos campos llamados datepicker1 y datepicker2, con el formato de fecha dd-mm-aaaa.

JQUERY – Scroll top

Author: Adrià Cidre  |  Category: Java Script, MiniCodes

Bueno después de un tiempo sin publicar a ver si nos ponemos las pilas de nuevo :-) .

Cuando desarrollas webs de una sola pagina en las que muestras un contenido u otro en javascript, a menudo queda un poco tosca la transición entre un contenido y otro, lo mejor es hacer un scroll hasta arriba de la pagina y no hay manera más estética de hacerlo que mediante este trozo de código en jquery.

$('html, body').animate({scrollTop:0}, 'slow')

Espero que os guste y os sirva.

Javascript: Subir Imagenes con AJAX

Author: Adrià Cidre  |  Category: PHP

Mirando en the Bakery de CakePHP he encontrado una librería genial tanto para JQuery como para prototype, para cargar imagenes con AJAX.

Es francamente sencilla de utilizar, y además podemos conseguir unos acabados muy al estilo de web 2.0. eliminando de una vez por todas el input.file de toda la vida que a mi parecer es horroroso.

Podéis encontrar el articulo original aquí.

PHP: Enviar post a Twitter

Author: Adrià Cidre  |  Category: PHP

Os dejo una función para enviar mensajes a Twitter desde PHP.


function tweet($message, $username, $password)
{
  $context = stream_context_create(array(
    'http' => array(
      'method'  => 'POST',
      'header'  => sprintf("Authorization: Basic %s\r\n", base64_encode($username.':'.$password)).
                   "Content-type: application/x-www-form-urlencoded\r\n",
      'content' => http_build_query(array('status' => $message)),
      'timeout' => 5,
    ),
  ));
  $ret = file_get_contents('http://twitter.com/statuses/update.xml', false, $context);

  return false !== $ret;
}

JQuery – Reset de un formulario

Author: Adrià Cidre  |  Category: Java Script, MiniCodes

A continuación se muestra como extender el núcleo de JQuery para poder hacer uso de la función reset() de un formulario en JQuery

	$.fn.extend({
		reset: function() {
	   	return this.each(function() {
				$(this).is('form') && this.reset();
	   	});
		}
	});