Snippets - Webeame Snippets


Añadir snippet

Últimos snippets



Clearfix CSS Hack

  1. /* slightly enhanced, universal clearfix hack */
  2. .clearfix:after {
  3. visibility: hidden;
  4. display: block;
  5. font-size: 0;
  6. content: " ";
  7. clear: both;
  8. height: 0;
  9. }
  10.  
  11. .clearfix {
  12. display: inline-block;
  13. }
  14.  
  15. /* start commented backslash hack */
  16. * html .clearfix {
  17. height: 1%;
  18. }
  19. .clearfix {
  20. display: block;
  21. }
  22. /* close commented backslash hack */
Más info en http://perishablepress.com/press/2008/02/05/lessons-learned-concerning-the-clearfix-css-hack/

En CSS hack float clear por alberto hace on 17/2/08 | Comentarios



Selects de fechas

Esta funcion se utiliza para generar tres selects (día, mes y año) en el cuál aparecerá seleccionada la fecha pasada por $default
  1. /**
  2. * Generar selects de fecha.
  3. *
  4. * Genera selects de fecha agrupados por el mismo nombre más su posición en la fecha hora
  5. * (Ej: $nombre = 'fecha_nacimiento' =>
  6. * <select name="fecha_nacimiento_dia">,
  7. * <select name="fecha_nacimiento_mes">,
  8. * <select name="fecha_nacimiento_ano"> )
  9. * @param texto $nombre El nombre de los selects
  10. * @param date $default La fecha que debe aparecer seleccionada
  11. * @param $atributos Un array con los atributos para cada select (pej, array('class="dia"' ,'class="mes"', 'class="año"')
  12. */
  13. function html_select_fecha($nombre, $default, $atributos=array(),$fecha_minima='2000-01-01',$fecha_maxima=false){
  14. if (ereg("[[a-z0-9_]]$",$nombre)){
  15. $start=strrpos($nombre,"[");
  16. $post=substr($nombre,$start);
  17. $nombre=substr($nombre,0,$start);
  18. }else{
  19. $post='';
  20. }
  21.  
  22. if (!$default){ $default=mktime(); }
  23.  
  24. if (!$fecha_minima){$fecha_minima='0-0-0';}
  25. if (!$fecha_maxima){$fecha_maxima='0-0-0';}
  26.  
  27. list($min_ano,$min_mes,$min_dia)=explode('-',$fecha_minima);
  28. list($max_ano,$max_mes,$max_dia)=explode('-',$fecha_maxima);
  29. if (strpos($default,'-')){
  30. if (strpos($default,' ')){
  31. list($default)=explode(' ',$default,2);
  32. }
  33. list($ano,$mes,$dia)=explode('-',$default);
  34. }else{
  35. $ano=date('Y',$default);
  36. $dia=date('j',$default);
  37. $mes=date('n',$default);
  38. }
  39. foreach(range(1,31) as $t_dia){
  40. if ($min_dia <= $t_dia && ((!$max_dia) || $max_dia >= $t_dia)){
  41. $dias[$t_dia]=str_pad($t_dia,2,'0',STR_PAD_LEFT);
  42. }
  43. }
  44. foreach(range(1,12) as $t_mes){
  45. if ($min_mes <= $t_mes && ((!$max_mes) || $max_mes >= $t_mes)){
  46. $meses[$t_mes]=ucwords(strftime("%b",mktime(1,1,1,$t_mes,1,2000)));
  47. }
  48. }
  49. foreach(range($min_ano,date('Y')+1) as $t_ano){
  50. if ($min_ano <= $t_ano && ((!$max_ano) || $max_ano >= $t_ano)){
  51. $anos[$t_ano]=$t_ano;
  52. }
  53. }
  54.  
  55. ?>
  56. <select name='<?=$nombre?>_dia<?=$post?>' <? if(isset($atributos[0])){print $atributos[0];} ?> >
  57. <? select_options($dias,$dia) ?>
  58. </select>
  59. <select name='<?=$nombre?>_mes<?=$post?>' <? if(isset($atributos[1])){print $atributos[1];} ?> >
  60. <? select_options($meses,$mes) ?>
  61. </select>
  62. <select name='<?=$nombre?>_ano<?=$post?>' <? if(isset($atributos[2])){print $atributos[2];} ?> >
  63. <? select_options($anos,$ano) ?>
  64. </select>
  65.  
  66. <?
  67.  
  68. }
Para capturar en un solo paso el POST generado por estos selects, utilizamos la siguiente función, a la que hay que pasarle: El nombre base del POST(Ej: "fecha_nacimiento"), opcionalmente el método por el que se pasó y, si es un array de POST, la clave que se quiere transformar
  1. /**
  2. * Transforma 3 variables pasadas por post a una string fecha.
  3. *
  4. * Obtiene los valores de los posts generados en la función html_select_fecha
  5. */
  6. function agrupar_fecha($nombre, $origen = "",$key=''){ //se le pasa el nombre con el que fue generado el select fecha
  7. if(!$origen)$origen=$_REQUEST;
  8. if (isset($origen[$nombre."_ano"])){
  9. if (is_array($origen[$nombre."_ano"])){
  10. $ano=$origen[$nombre."_ano"][$key];
  11. }else{
  12. $ano=$origen[$nombre."_ano"];
  13. }
  14. }else{
  15. $ano='0000';
  16. }
  17. if (isset($origen[$nombre."_mes"])){
  18. if (is_array($origen[$nombre."_mes"])){
  19. $mes=$origen[$nombre."_mes"][$key];
  20. }else{
  21. $mes=sprintf("%02d",$origen[$nombre."_mes"]);
  22. }
  23. }else{
  24. $mes='00';
  25. }
  26. if (isset($origen[$nombre."_dia"])){
  27. if (is_array($origen[$nombre."_dia"])){
  28. $dia=$origen[$nombre."_dia"][$key];
  29. }else{
  30. $dia=$origen[$nombre."_dia"];
  31. }
  32. }else{
  33. $dia='00';
  34. }
  35.  
  36. $fecha=$ano."-".$mes."-".$dia;
  37. return $fecha;
  38. }
El resultado de aplicar la funcion "agrupar_fecha" a un POST armado por "html_select_fecha" sería: 1972-05-04 (Listo para ser guardado en un campo DATE)

En PHP selects fecha html por haboc hace on 10/2/08 | Comentarios



Lista de opciones para select o list

Crea y devuelve como cadena la lista de opciones (elementos) para una lista <select> o <list> a partir de un arreglo.
  1. // string get_select_options(array $q, string $selected="", bool $nk=false)
  2. // $q Array de origen
  3. // $selected Clave del elemento seleccionado. Puede ser un arreglo.
  4. // $nk Si es true se utilizará como valor de las opciones el valor del elemento del arreglo y no las claves.
  5. function get_select_options($q,$selected="",$nk=false) {
  6. $res = "";
  7. $sarr=is_array($selected);
  8. foreach($q as $k=>$v) {
  9. $k=$nk?$v:$k;
  10. $e="";
  11. if($sarr) {
  12. $e=in_array($k,$selected)?" selected=\"selected\"":"";
  13. } else {
  14. $e=($selected==$k)?" selected=\"selected\"":"";
  15. }
  16. $res.="<option value=\"$k\"$e>$v</option> n";
  17. }
  18. return $res;
  19. }
  20.  
  21. /* Ejemplo:
  22. $elems = array(1=>"Enero",2=>"Febrero",3=>"Marzo",4=>"Abril",5=>"Mayo",6=>"Junio",7=>"Julio",8=>"Agosto",9=>"Septiembre",10=>"Octubre",11=>"Noviembre",12=>"Diciembre");
  23. $options = get_select_options($elems);
  24. echo "Mes de cumpleaños: <select name=\"mes\">$options</select>";
  25.  
  26. Otro ejemplo:
  27. $elems = array();
  28. $dia = 5;
  29. for($i=1;$i<=31;$i++) $elems[]=$i;
  30. $options = get_select_options($elems,$dia,true);
  31. echo "Dia de cumpleaños: <select name=\"dia\">$options</select>";
  32. */
  33.  
  34. // http://www.cqsoft.com.ar

En PHP select list option lista opciones array arreglo por geq hace on 8/2/08 | Comentarios



min&#45;height también en IE6

Código css para emular el comportamiento de la propiedad css min-height en aquellos navegadores que no la soportan
  1. #elemento {
  2. height: auto !important;
  3. height: XXXpx;
  4. min-height: XXXpx;
  5. }

En CSS css min&#45;height por brainet hace on 7/2/08 | Comentarios



Calcular distancia entre 2 puntos

Calculamos la distancia entro 2 puntos con las coordenadas de google maps
  1. function getDistance($lat1, $long1, $lat2, $long2)
  2. {
  3. $earth = 6371; //km
  4. //$earth = 3960; //millas
  5.  
  6. //Punto 1 coordenadas
  7. $lat1 = deg2rad($lat1);
  8. $long1= deg2rad($long1);
  9.  
  10. //Punto 2 coordenadas
  11. $lat2 = deg2rad($lat2);
  12. $long2= deg2rad($long2);
  13.  
  14. $dlong=$long2-$long1;
  15. $dlat=$lat2-$lat1;
  16.  
  17. $sinlat=sin($dlat/2);
  18. $sinlong=sin($dlong/2);
  19.  
  20. $a=($sinlat*$sinlat)+cos($lat1)*cos($lat2)*($sinlong*$sinlong);
  21.  
  22. $c=2*asin(min(1,sqrt($a)));
  23.  
  24. $d=($earth*$c);
  25.  
  26. return $d;
  27. }

En PHP calcular distancias coordenadas google maps por javito hace on 5/2/08 | Comentarios



Comprobación de página inexistente

Como complemento a la función getHeaders, esta función permite revisar si una dirección web devuelve un 404 de inexistente.
  1. /**
  2. * function valida_enlace (string $url, boolean $formato = true)
  3. *
  4. * Comprueba si un enlace no devuelve un 404
  5. *
  6. * return boolean
  7. */
  8. function valida_enlace ($url, $formato = true) {
  9. $head = getHeaders($url, $formato);
  10.  
  11. return (is_array($head) && strlen($head[0]) && !stristr($head[0], '404'))?$head:false;
  12. }

En PHP 404 página inexistente por Lito hace on 4/2/08 | Comentarios



Obtener encabezados de una dirección web

Devuelve las cabeceras de una dirección web
  1. /**
  2. * function getHeaders (string $url, boolean $formato = true)
  3. *
  4. * Devuelve las cabeceras de una dirección web
  5. * Solo acepta HTTP como metodo
  6. *
  7. * Si $formato es true devuelve un array asociativo,
  8. * de lo contrario, un array de claves simples
  9. *
  10. * return array
  11. */
  12. function getHeaders ($url, $formato = true) {
  13. if (function_exists('get_headers')) {
  14. return @get_headers($url, $formato);
  15. }
  16.  
  17. $partes = @parse_url($url);
  18.  
  19. if (empty($partes['host'])) {
  20. return false;
  21. }
  22.  
  23. if (empty($partes['path'])) {
  24. $path = '/';
  25. } else {
  26. $path = $partes['path'];
  27. }
  28.  
  29. if (!empty($partes['query'])) {
  30. $path .= '?'.$partes['query'];
  31. }
  32.  
  33. $partes['port'] = isset($partes['port'])?$partes['port']:80;
  34.  
  35. $socket = fsockopen($partes['host'], $partes['port'], $errno, $errstr, 30);
  36.  
  37. if (!$socket) {
  38. return false;
  39. }
  40.  
  41. $header = 'HEAD '.$path.' HTTP/1.1'."\r\n"
  42. .'Host: '.$partes['host'].(empty($partes['port'])?'':(':'.$partes['port']))."\r\n"
  43. .'Connection: Close'."\r\n\r\n";
  44.  
  45. fwrite($socket, $header);
  46.  
  47. $datos = array();
  48. $fin = false;
  49.  
  50. while (!feof($socket) or ($fin == true)) {
  51. if ($header = fgets($socket, 1024)) {
  52. if ($header == "\r\n") {
  53. $fin = true;
  54. break;
  55. } else {
  56. $header = trim($header);
  57. }
  58.  
  59. if ($formato == 1) {
  60. $key = explode(':', $header);
  61. $key = array_shift($key);
  62.  
  63. if ($key == $header) {
  64. $datos[] = $header;
  65. } else {
  66. $datos[$key] = substr($header,strlen($key)+2);
  67. }
  68.  
  69. unset($key);
  70. } else {
  71. $datos[] = $header;
  72. }
  73. }
  74. }
  75.  
  76. fclose($socket);
  77.  
  78. return $datos;
  79. }

En PHP encabezados cabeceras url por Lito hace on 4/2/08 | Comentarios



Enviar un formulario desde PHP

Permite enviar un formulario directamente desde un array de datos en PHP.
  1. /**
  2. * function enviaPOST (string $host, string $url, array $datos, boolean $error = false)
  3. *
  4. * Envia un formulario a una url remota y obtiene el resultado
  5. *
  6. * @$host: Servidor de destino
  7. * @$url: Url del fichero que recibirá el formulario
  8. * @$datos: Datos que se enviarán, en formato $datos['clave'] = 'valor';
  9. * @$error: Enseñar el error en caso de problemas en el envío
  10. *
  11. * return string
  12. */
  13.  
  14. function enviaPOST ($host, $url, $datos, $error = false) {
  15. $da = fsockopen($host, 80, $errno, $errstr);
  16. $postdata = '';
  17.  
  18. if (!$da) {
  19. return false;
  20. }
  21.  
  22. if (is_array($datos) && (count($datos) > 0)) {
  23. foreach ($datos as $k => $v) {
  24. $postdata .= rawurlencode($k).'='.rawurlencode($v).'&';
  25. }
  26.  
  27. $postdata = substr($postdata, 0, -1);
  28. }
  29.  
  30. $respuesta = '';
  31. $salida = 'POST '.$url.' HTTP/1.1'
  32. ."\r\n".'Host: '.$host
  33. ."\r\n".'User-Agent: PHP Script'
  34. ."\r\n".'Content-Type: application/x-www-form-urlencoded'
  35. ."\r\n".'Content-Length: '.strlen($postdata)
  36. ."\r\n".'Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66'
  37. ."\r\n".'Connection: close'
  38. ."\r\n\r\n".$postdata;
  39.  
  40. fwrite($da, $salida);
  41.  
  42. while (!feof($da)) {
  43. $respuesta .= fgets($da, 1024);
  44. }
  45.  
  46. fclose($da);
  47.  
  48. $respuesta = explode("\r\n\r\n", $respuesta);
  49. $header = array_shift($respuesta);
  50. $contenido = implode('', $respuesta);
  51.  
  52. if (($error == true) || (strstr($header, 'Transfer-Encoding: chunked') == false)) {
  53. return trim($contenido);
  54. }
  55.  
  56. return false;
  57. }

En PHP post enviar formulario por Lito hace on 4/2/08 | Comentarios



Crear directorios de manera recursiva

Genera un arbol de directorios de manera recursiva.
  1. /**
  2. * function dir_recursivo (string $destino)
  3. *
  4. * Crea un arbol de directorios de manera recursiva
  5. *
  6. * return boolean
  7. */
  8. function dir_recursivo ($destino) {
  9. if (is_dir($destino)) {
  10. return true;
  11. }
  12.  
  13. $dirs = explode('/', $destino);
  14. $dir = '';
  15.  
  16. foreach ($dirs as $part) {
  17. if (empty($part) || ($part == '.')) {
  18. continue;
  19. }
  20.  
  21. $dir .= '/'.$part;
  22.  
  23. if ($part == '..') {
  24. continue;
  25. }
  26.  
  27. if (!is_dir($dir)) {
  28. $ok = @mkdir($dir, 0755);
  29.  
  30. if (!$ok) {
  31. return false;
  32. }
  33. }
  34. }
  35.  
  36.  
  37. return is_dir($destino);
  38. }

En PHP directorios recursivo por Lito hace on 4/2/08 | Comentarios



Texto simple para URL

Cambia todo tipo de carácteres extraños por letras o símbolos equivalentes para poder usarlo como complemento en las URL's
  1. /**
  2. * function palabra_simple (string $texto, boolean $min, boolean $html = false)
  3. *
  4. * Cambia las letras con tildes, eñes o caracteres raros por su concordancia natural.
  5. * En caso de que min sea true devolvera el texto en minúsculas.
  6. *
  7. * @$min: true/false para devolver el resultado en minúsculas
  8. * @$html: true/false si la cadena de texto que recibe está formateada con htmlentities
  9. *
  10. * return string
  11. */
  12. function palabra_simple ($texto, $min = true, $html = false) {
  13. if (!$html) {
  14. $texto = htmlentities($texto, ENT_QUOTES, 'ISO-8859-1');
  15. }
  16.  
  17. $texto = preg_replace('/&([a-zA-Z])(uml|acute|grave|circ|tilde);/i', '$1', $texto);
  18. $texto = html_entity_decode($texto, ENT_QUOTES, 'ISO-8859-1');
  19.  
  20. $texto = preg_replace(array('/[^a-z0-9_-]/i', '/-+/', '/^-/', '/-$/',), array('-', '-', '', ''), $texto);
  21.  
  22. return $min?strtolower($texto):$texto;
  23. }

En PHP url texto simple por Lito hace on 4/2/08 | Comentarios