Contenido

Filtra tus artículo por el campos meta

29 abr

+ 5

WordPress es muy conocido por ser altamente personalizable. Ya vimos hace unos meses lo fácil que era personalizar los posts que queríamos mostrar mediante la función query_posts().

Mediante query_posts(), además nos es posible personalizar nuestros artículos por algún campo meta personalizado. Para ello únicamente hemos de aprovechar los parámetros destinados para ello:

  • meta_key: Buscamos por la clave
  • meta_value:Buscamos por el value
  • meta_compare: Permite ordenar usar operadores para filtrar la búsqueda (>, <, =, >=, <=)

Es importante destacar que meta_key y meta_value se han de usar conjuntamente como si de un AND en el SQL se tratara.

query_posts('meta_key=color&meta_value=blue');

Instala TODAS las versiones de Internet Explorer en tu PC

29 abr

+ 41

Esperemos que estas herramientas desaparezcan de una vez por todas, por que además de aberrante es muy molesto. Imagina, tener todas las versiones de Internet Explorer instaladas en tu máquina. Si esta no se cuelga voluntariamente y decide darte la posibilidad de probar el Internet Explorer 1.5 e ir viendo la evolución de las diferentes versiones verás que tus aplicaciones no se verán igual en ninguna de ellas.

iecollection_setup_02_components1
(Ver Imagen)

Con Internet Explorer Collection podrás instalar:

  • Internet Explorer 1.0 (4.40.308)
  • Internet Explorer 1.5 (0.1.0.10)
  • Internet Explorer 2.01 (2.01.046)
  • Internet Explorer 3.0 (3.0.1152)
  • Internet Explorer 4.01 (4.72.3110.0)
  • Internet Explorer 5.01 (5.00.3314.2100)
  • Internet Explorer 5.5 (5.51.4807.2300)
  • Internet Explorer 6.0 (6.00.2800.1106)
  • Internet Explorer 6.0 (6.00.2900.2180)
  • Internet Explorer 7.0 (7.00.5730.13)
  • Internet Explorer 8.0 (8.00.6001.18702)
  • Internet Explorer Developer Toolbar 1.00.2188.0

Y se el más guay de tu clase, además podrás desarrollar para todos ellos si aún lo sigues haciendo. Realmente imprescindible para todos aquellos puristas que desean que sus aplicaciones lleguen a todos, sin excepción :D

Descargar (55,4MB)

7 diferencias Javascript entre Firefox e Internet Explorer

29 abr

+ 9

Leyendo el título del artículo debes pensar “¿Solo 7?”. Y es que Internet Explorer y Firefox se parecen en que los dos son navegadores y … poco más :D

En ImpressiveWeb hacen esta corta recopilación de 7 diferencias Javascript que debemos tener presentes para nuestros scripts.

1) La propiedad “float” de CSS

Generalmente cuando accedemos a una propiedad relacionada al estilo de un elemento solemos usar element.style.propiedad, pero para la propiedad float usar el sistema element.style.float no nos va a ser posible.

// IE
document.getElementById("elem").style.styleFloat = "left"; // right

// FF
document.getElementById("elem").style.cssFloat = "left"; // right

2) Estilos computados de un elemento

Si queremos acceder a los estilos procesados ya por el navegador nos encontramos con una diferencia significante en el sintaxis para ambos navegadores.

// IE
var myObject = document.getElementById("header");
var myStyle = myObject.currentStyle.backgroundColor;

// FF
var myObject = document.getElementById("header");
var myComputedStyle = document.defaultView.getComputedStyle(myObject, null);
var myStyle = myComputedStyle.backgroundColor;  

// MIX
var myObject = document.getElementById("header");
var myStyle = myObject.currentStyle ?
		myObject.currentStyle.backgroundColor :
   	        document.defaultView.getComputedStyle(myObject, null).backgroundColor;

3) Accediendo al “class” de un elemento

Debido a la especificación de Internet Explorer, cuando queremos acceder al class de un elemento usando getAttribute() debemos modificar el nombre que solicitamos.

// IE
var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("className");  

// FF
var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("class");

4) Accediendo al atributo “for” de las etiquetas <label />

Exactamente lo mismo ocurre con el atributo for de las etiquetas <label /> que en Internet Explorer para solicitar esta información, debemos reemplazar el nombre que pedimos.

// IE
var myObject = document.getElementById("myLabel");
var myAttribute = myObject.getAttribute("htmlFor");  

// FF
var myObject = document.getElementById("myLabel");
var myAttribute = myObject.getAttribute("for");

5) Obtener la posición del puntero del ratón

Otra diferencia y que mucho nos hace agrandar nuestro código es la localización del puntero.

// IE
var myCursorPosition = [0, 0];
myCursorPosition[0] = event.clientX;
myCursorPosition[1] = event.clientY;  

// FF
var myCursorPosition = [0, 0];
myCursorPosition[0] = event.page;
myCursorPosition[1] = event.pageY;   

// MIX
var myCursorPosition = [0, 0];
myCursorPosition[0] = event.clientX || event.page;
myCursorPosition[1] = event.clientY ||event.pageY;

6) Obtener el tamaño del navegador o del área visible

Al obtener el tamaño de la pantalla y del area visible nos encontramos con el mismo problema. Parece que no se ponen de acuerdo en que nombre ponerle a las propiedades comunes.

// IE
var myBrowserSize = [0, 0];
myBrowserSize[0] = document.documentElement.clientWidth;
myBrowserSize[1] = document.documentElement.clientHeight;  

// FF
var myBrowserSize = [0, 0];
myBrowserSize[0] = window.innerWidth;
myBrowserSize[1] = window.innerHeight;

Joseanpg nos amplia el motivo de dicha diferencia en el comentario #1 y en este enlace

7) Transparencias

Si las transparencias en CSS ya eran un desastre donde nos veíamos obligados a usar hacks dependiendo del navegador en javascript, nos encontramos el mismo problema.

// CSS
#myElement {
   filter: alpha(opacity=50);  // IE
   opacity: 0.5;  // FF
}  

// IE
var myObject = document.getElementById("myElement");
myObject.style.filter = "alpha(opacity=80)";  

// FF
var myObject = document.getElementById("myElement");
myObject.style.opacity = "0.5";

getCommentsFromPingbacks(), trae los comentarios de tus pingbacks

28 abr

+ 7

La proliferación de blogs ha hecho que le contenido esté muy distribuido por Internet y de un artículo pueden llegar a salir miles de links (pingbacks) en los que puede haber debate sobre el mismo contenido inicial.

Imagina que pueda estar vinculado con todos los blogs (WordPress) que han hecho un ping a tus artículo, y que en tu blog puedas mostrar los comentarios de estos blogs (siempre y cuando estos lo permitan).

getCommentsFromPingbacks() es una función que he montado que permite mostrar de los pingbacks encontrados por cada post, un listado de comentarios sobre esa anotación en cada uno de los anteriores pingbacks.

El código

<?php
include_once(ABSPATH . WPINC . '/rss.php');
function getCommentsFromPingbacks($postID = 0, $limit = 5, $propios = false){
  global $wpdb;
  // Obtenemos la dirección de nuestro blog
  $localhost = '';
  if ($propios)
  	$localhost = "AND comment_author_url NOT LIKE '".get_option("siteurl")."%";

  // Lanzamos petición
  $urls = $wpdb->get_results("SELECT comment_author, comment_author_url FROM $wpdb->comments WHERE comment_post_ID = ".intval($postID)."  $localhost AND comment_type = 'pingback' AND comment_agent LIKE '%WordPress%' LIMIT ".intval($limit));

  // Sinó hay pingbacks, salimos
	if (!$urls) return;

	// Recorremos los pingbacks
	foreach($urls as $url) {
		// Parátro RSS de comentarios
		if (strpos($url->comment_author_url,'?') === false) $actual = $url->comment_author_url.'?feed=comments-rss2';
		else $actual = $url->comment_author_url.'&feed=comments-rss2';

   // Leemos comentarios
    $rss = fetch_rss($actual);

    // Si no hay $rss o items seguimos con el siguiente.
    if (!$rss || !$rss->items) continue; 

	$items = array_reverse($rss->items);

	echo '<h3>'.$url->comment_author.'</h3><ul class="external_comments">';
	for($id = count($items); $id>0; $id--){
        $item = false;
        // Datos basicos
        $item->comment_author = $items[$id]['dc']['creator'];
        $item->comment_author_url = $items[$id]['link'];
        $item->comment_date = $items[$id]['pubdate'];
        $item->comment_content = $items[$id]['content']['encoded'];

        // comment_ID
        $item->comment_ID = 'external-'.$id;
        $item->comment_type = 'external';

	// Pintamos el comentario
        createComments($item);
    }
    echo '</ul>';
  }
}
/*
   Pintamos el comentario
*/
function createComments($com) {
	echo '<li>
		<h4>'.$com->comment_author.'</h4>
		<small>'.$com->comment_date.'</small>
		<div class="comment_content">
			'.$com->comment_content.'
		</div>
	</li>';
}

// Solicitamos los comentarios del post
getCommentsFromPingbacks($post->ID);
?>

El código, se encarga de buscar pingbacks en el post indicado como parámetro. Además podemos indicar un límite de sitios que comprobar, por defecto le he puesto 5 (hay que tener en cuenta el tiempo de carga de la página) y despues como tercer parámetro podemos indicar si queremos que aparezcan los comentarios enlazados de nuestro propio blog.

Una vez localizadas las url’s de los pingbacks, procedemos a solicitar los comentarios, para ello usamos el parámetro de WordPress feed=comments_rss2, que nos devolverá un RSS con los comentarios del post. Esto implica una limitación de tamaño (sinó recuerdo mal, no he podido probarlo) y que el blog externo debe tenerlo activo. Mediante el uso de fetch_rss() podremos realizar la petición y además recibir el comentario como un objeto fácil de iterar y procesar.

El código está pensado para usarse en el sistema de comentarios de WordPress 2.7, creando un comentario virtual con los datos necesarios para que el callback de wp_lists_comments() pueda procesarlo como un comentario.

Por defecto, indicará el atributo class de cada comentario, como “external”, esto es debido al comment_type que lo informamos en la función.

Para el ejemplo, he montado createComments() que recibe un parémtro $com, que es el comentario con los datos necesarios.

¿Donde iría este código?

Pues este código solo necesita que se cumpla una premisa y es que el ID del comentario esté informado. Realmente puede ir cualquier parte de WordPress siempre y cuando se pase el ID de un artículo de nuestro WordPress. Si usamos el ejemplo tal cual, debería estar dentro del Loop y más concretamente en el fichero comments.php de nuestro theme, pero lo mejor es ir probando y ubicarlo en el sitio que creamos más acertado.

¿Que os parece?

Opiniones, impresiones, se agredecen.

MooTools 1.2.2

28 abr

+ 2

MooTools anuncia la versión 1.2.2 de su framework JS. Esta revisión solventa problemas con la generación de Clases y algunos problemas menores.

BaseJS, un framework JS exclusivo para el iPhone

27 abr

+ 0

Paul Armstrong, ha desarrollado BaseJS. Un framework Javascript especializado en los nuevos dispositivos móviles, concretamente los que usan WebKit como navegador web.

new io('/results.json', {
    format: 'json',
    method: 'post',
    params: { mustache: true },
    onSuccess: function(response) { 
        alert(response); // response == data returned from server
    }, 
    onFailure: function() { 
        alert('There was an error getting the data');
    }
});

Una de las curiosidades de este framework es que usa Sizzle como selector CSS3, lo que nos permite obtener todas las posibilidades establecidas por el estandar CSS3 con la que seleccionar elementos de nuestro DOM, sin tener en cuenta la velocidad del mismo. Todo esto siempre y cuando el navegador no tenga incorporado querySelector(), en caso contrario el se encargará de generar la llamada ha Sizzle para que dispongamos de el selector.

En tan solo 8kb, no podemos hacer maravillas, pero nos dará más de lo que necesitamos para hacer aplicaciones robustas y completamente compatibles con estos dispositivos.

El framework se encarga de extender los objetos nativos del lenguaje y elementos del DOM, algo diferente a lo que hace jQuery, que extiende elementos ondemand. De esta forma una vez cargada la página, todos los elementos disponen de las nuevas funcionalidades.

Tambien se aprovecha de la curiosa “caché” del iphone para almacenar datos. Y es que esta caché, por llamarla de alguna manera, no es una caché en si mismo, sinó un sistema de ficheros menores a 25kb que mediante la modificación de cabeceras “Expires” y “Cache-control” nos permite almacenar 19 ficheros de 25kb lo que es igual a 475kb de caché :D (Aunque se borrará al reinciar el dispositivo)

Podeis ver el código y la documentación o si directametne quereis descargarlo y poneros a trabajar con él desde aqui mismo.

Desarrollando para android con NetBeans

27 abr

+ 1

Xisco Bibiloni de BibiGeek.com, no cuenta como instalar el plugin de Android para Netbeans, para poder desarrollar para el sistema operativo de Google. En 7 pasos muy sencillos y sobretodo muy bien explicados no tendremos excusas para ampliar el número de aplicaciones disponibles para este Sistema Operativo. Ideal para los nuevos dispositivos que van saliendo.

Internet Explorer 8, ahora disponible en 43 idiomas

25 abr

+ 3

La gente de IEBlog anuncia que la última versión de Internet Explorer, la 8.0, está, desde este momento, disponible en 43 idiomas.

Polaris, Google Analytics en tu escritorio

24 abr

+ 6

Polaris es una aplicación desarrollada en Air que nos permite interactuar con Google Analytics directamente desde nuestro escritorio.

polarisanieto2k
(Ver Imagen)

Si diseño, muy cuidad y dinámico, nos permite visualizar todos los datos que Google Analitics nos ofrece en la aplicación.

Continua —>

Minimalist jQuery: 11 plugins de jQuery que no superan los 4kb de peso

24 abr

+ 5

Estos 11 plugins de jQuery no son solo interesantes por su funcionalidad sinó por el peso de los mismos. En menos de 4kb es posible tener un plugin funcional y listo para integrar en nuestras aplicaciones.