Estado de Joomla 1.6 beta 1

Joomla

David | 30/08/2009

logo de Joomla

Hannes Papenberg, desarrollador del equipo de Joomla, ha escrito sobre el estado de la primera beta de Joomla en el grupo de google Joomla CMS delevelopment. Supuestamente esta beta debería de haber salido 6 semanas después de la Alpha de Joomla, pero debido a algunos problemas se retrasó unas semanas más.

Hay que tener en cuenta que una vez sacada la beta 1 se paraliza la adición de nuevas características y solo se trabajará en en el perfeccionamiento de lo ya implementado.
Los cambios realizados sobre com_content serán mínimos, y no será hasta Joomla 1.7 cuando se incluirán grandes cambios, como taxonomias/tags, contenido multilenguaje, versionado, etc..

Hay una lista de características para Joomla 1.6 actualizada donde te puedes mantener al tanto de que características se van a implementar y en que estado se encuentran. (Componente de ejemplo con las nuevas características del framework de Joomla)

Por último, Hannes Papenberg indica que de aquí a 2 o 3 semanas saldrá la beta 1 de Joomla 1.6, así que habrá que estar al tanto.


Superfish, plugin de jQuery para implementar cualquier tipo de menú desplegable

Hoy he descubierto Superfish, un plugin para jQuery con el que se pueden crear todo tipo de menús desplegables. Superfish pone el comportamiento del menú, luego tu aplicas el CSS que quieras. El resultado es muy bueno.
Por : David           comentarios 1

Como crear un widget de Twitter con Javascript y el API AJAX de Google para feeds

APIs, Javascript

David | 26/08/2009

Hoy he necesitado cargar un RSS externo desde una web, y había que hacerlo con Javascript. El problema es que desde Javascript solo se puede hacer peticiones asíncronas a URL’s de tu propio dominio, debido a restricciones de seguridad.

El otro día estuve viendo cómo cargar los frameworks más famosos y las API’s de Google desde el CDN de Google. Google también permite cargar sus API’s AJAX mediante este método, y entre estas API’s se encuentra el API AJAX de Google para feeds, que permite cargar cualquier RSS de cualquier dominio haciendo uso solamente de Javascript, eliminando la necesidad de crear un proxy en el servidor, ya que Google lo crea por ti. Las ventajas están bastante claras:

  1. Menos lógica en el servidor.
  2. Menos sobrecarga en el servidor
  3. Las ventajas de usar un CDN externo para cargarJavascript.

La dirección del feed RSS que voy a utilizar es la de mi cuenta de Twitter. Para obtener la dirección solamente hay que abrir el enlace que proporciona Twitter en su página web.

Obtener la URL del feed de twitter

Usando el objeto FeedControl

El objeto FeedControl, permite añadir todos los feeds que quieras mediante le método addFeed y luego, mediante el método draw, inyecta el contenido de estos en el elemento DOM especificado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
	google.load("jquery", "1.3.2");
	google.load("feeds", "1");
 
	function inicio() {
		var feedControl = new google.feeds.FeedControl();
                feedControl.addFeed("http://twitter.com/statuses/user_timeline/29672915.rss", "Twitter");
                feedControl.draw(document.getElementById("contenedor"));
	}
	google.setOnLoadCallback(inicio);
 
 
</script>

El código HTML se muestra a continuación:

1
2
3
   <body>
         <div id="contenedor" > </div>
   </body>

En el div identificado con la palabra “contenedor” se cargará automáticamente el contenido del Feed. En la imagen se puede observar el resultado.

widget de twitter con API AJAX de Google

Luego, viendo el código HTML generado mediante un inspector HTML como Firebug o el que trae IE 8, se puede crear un código CSS para cambiarle la apariencia. Este método es muy cómodo, pero si se necesita más control sobre el código generado se puede utilizar el objeto Feed, que proporciona más control.

Usando el objeto Feed

El objeto Feed permite cargar el documento XML que compone el Feed y tratarlo como un objeto JSON (comportamiento por defecto). Después se itera sobre el objeto JSON y se inyecta directamente sobre el DOM de la página.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("feeds", "1");
 
function inicio() {
        var feed = new google.feeds.Feed("http://twitter.com/statuses/user_timeline/29672915.rss");
	feed.setNumEntries(3); //Por defecto son 4
		feed.load(function(result) {
			if (!result.error) {
				var contenedor = document.getElementById("contenedor");
				var tmpStr = "";
				tmpStr += "<h2> <a href='"+result.feed.link+"'> " + result.feed.title + "</a></h2>";
				contenedor.innerHTML +=  tmpStr;
 
				for (var i = 0; i < result.feed.entries.length; i++) {
					var entry = result.feed.entries[i];
					var tmpStr = "";
					tmpStr += "<div class='entrada'> ";
					tmpStr += "<img src='twitter.png' alt='Icono de Twitter' class='icono' /> ";
					tmpStr += "<div class='contenido'><a href='"+entry.link+"'>"+ entry.contentSnippet + "</a></div>";
					var fecha = entry.publishedDate.split(" ");
					tmpStr += "<div class='fecha'> " + fecha[1]+ " " +fecha[2]+" " + fecha[3]+ " "+ fecha[4]+"</div>";
					tmpStr += "</div> ";
					contenedor.innerHTML +=  tmpStr;
				}
 
			}
		});
}
 
google.setOnLoadCallback(inicio);
 
</script>

Breve explicación del código:

  1. En el constructor del objeto Feed se pasa como parámetro la URL del feed RSS.
  2. El método setNumEntries establece el número de items descargados del feed.
  3. El método load carga el feed en la variable result.
  4. result.feed.entries es un array de objetos con la información de cada item del feed. Se itera sobre este array y se va inyectando la información de los feed en el DOM.

El código HTML es el mismo que el usado en el primer ejemplo. Luego con un poco de CSS se le da un poco de apariencia al widget.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
*{
margin:0;
padding:0;
}
#contenedor{
	width:280px;
	padding-left:15px;;
}
#contenedor h2 a{
	color:#FF4D07;
	font-size:20px;
	font-family:"Trebuchet MS";
	text-decoration:none;
}
div.entrada{
	margin:10px;
 
}
div.entrada img.icono{
	float:left;
	margin-right:15px;
}
div.contenido a{
	color:#09399F;
	text-decoration:none;
}
div.fecha{
	font-family:"Trebuchet MS";
	font-size:12px;
	color: #7F7F7F;
}

El resultado final es este:

widget de twitter creado con el API de Google para feeds

Conclusión

La potencia de esta API está bastante clara, nos proporciona una forma rápida y cómoda de acceder a los feeds RSS de cualquier parte. Teniendo en cuenta que ahora hay muchos servicios como redes sociales, etc… que proporcionan esta información mediante RSS, nos abre un abanico de posibilidades a la hora de mejorar nuestros diseños añadiendo información en tiempo real sobre, por ejemplo, nuestros últimos tweets.

Enlaces relevantes


Como cargar tu framework Javascript más rápido usando el CDN de Google

APIs, Javascript

David | 21/08/2009

API de bibliotecas AJAx de Google

El API de bibliotecas AJAX de Google es una red de distribución de contenidos (CDN) creada por Google, que ofrece un servicio para que los desarrolladores web puedan cargar los frameworks Javascript más populares desde ella, evitando así la necesidad de alojar los ficheros Javascript en el servidor de la aplicación.

Últimamente he hecho bastante uso de este CDN de Google, por lo que me he decidido a escribir este post donde expongo las ventajas que he encontrado de usar este servicio de Google y también las posibles desventajas.

Ventajas

  • Velocidad de transmisión. Google tiene montada una infraestructura descomunal y seguramente tenga mayor velocidad de transmisión en sus conexiones que tu servidor.
  • Latencia. Google aloja las librerías en varios servidores distribuidos por todo el mundo, por lo tanto, cada usuario descargará la librería desde el sitio más cercano posible, disminuyendo así la latencia introducida por los routers en cada salto. Tu seguramente solo tengas un servidor, por lo tanto si un usuario de Argentina quiere bajarse el fichero desde España, la latencia aumentará.
  • Paralelismo. Al alojarse el fichero en otro dominio, el navegador web puede descargarlo paralelamente junto con los ficheros de tu aplicación (hojas de estilo etc..). Normalmente los navegadores tienen un número máximo de descargas paralelas para un mismo dominio, y una vez llegado al tope hay que esperar. Este hecho ralentiza la descarga de la página. Usando el CDN de Google, se evita aumentar la cola de descargas para el dominio de tu aplicación.
  • Caché. Este CDN es usado por muchas aplicaciones online, por tanto es muy probable que un usuario que llegué a tu sitio web ya tenga el framework Javascript alojado en la caché si previamente a usado otra aplicación que implemente el API de bibliotecas AJAX de Google. De esta forma la velocidad se incrementa drásticamente por que ni siquiera hay necesidad de bajarse el fichero.
  • Comodidad. Aunque parezca una tontería, a mi me resulta mucho más cómodo añadir una línea de código y disponer del framework en cuestión, que tener que bajarmelo del sitio oficial, moverlo al directorio de scripts (o subirlo al servidor por FTP) y referenciarlo. (Soy un poco vago, lo sé)

Desventajas

Para implementarlo se pueden usar dos métodos:

  1. Cargar el framework Javascript usando el método load del API de bibliotecas AJAX
  2. Cargar el framework directamente desde la URL proporcionada por Google

Cargar el framework usando el API de bibliotecas AJAX

Este método es más potente por que permite cargar el framework en el momento necesario, ya que es posible que no siempre sea necesario cargar todo un framework Javascript al inicio de la página. Su ventaja principal es que se puede cargar el framework programáticamente.

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
 /*
Se puede especificar solamente la rama, por ejemplo:
  google.load("jquery", "1.3");
cargaría la última versión de la rama 1.3, es decir, la 1.3.2
y 
   google.load("jquery", "1");
cargaría la última versión de la rama 1, es decir la 1.3.2
 
*/
  google.load("jquery", "1.3.2");
 
  google.setOnLoadCallback(function() {
       // Utilizar este método en lugar del metodo ready del framework
  });
</script>

Cargar el framework desde la URL de Google

Este método es más sencillo, aunque menos potente. De esta forma se carga siempre el framework al inicio.

1
2
3
4
5
6
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
        // Utilizar el método ready del framework cargado
  });
</script>

Si se va a hacer uso obligatorio del framework en cuestión, yo utilizaría el segundo método, ya que evita descargarse el fichero “jsapi” y quita complejidad.

Conclusión

El API de bibliotecas AJAX de Google es otro gran servicio ofrecido por Google, que permite cargar Frameworks de Javascript de una manera más rápida, cómoda y eficiente. Las ventajas superan con creces las desventajas (si es que las tiene), por lo tanto, recomiendo totalmente su uso, tanto en desarrollo como en producción.

Enlaces relevantes


Inspiración: 10 diseños para Joomla elegantes y de alta calidad

En speckyboy han realizado una recopilación de diseños para themes de Joomla. Se trata de themes elegantes y de alta calidad, que pueden servirnos como fuente de inspiración. Lectura recomendable sobre todo para los que dicen que los themes de Joomla son feos y de baja calidad.
Por : David           comentarios 9

AnythingSlider: otro plugin de jQuery para crear sliders

Javascript, Recursos

David | 18/08/2009

jquery-slide-plugin

Ultimamente me estoy planteando incorporar un slider al blog, por lo que estoy viendo las diferentes opciones disponibles. Hoy he descubierto Anythingslider que es un plugin de jQuery para crear sliders elaborado por CSS-Tricks. Puede presentar cualquier tipo de contenido HTML en el contenedor de cada slide.

Modo de empleo

$('.anythingSlider').anythingSlider({
        easing: "swing",                // Anything other than "linear" or "swing" requires the easing plugin
        autoPlay: true,                 // This turns off the entire FUNCTIONALY, not just if it starts running or not
        startStopped: false,            // If autoPlay is on, this can force it to start stopped
        delay: 3000,                    // How long between slide transitions in AutoPlay mode
        animationTime: 600,             // How long the slide transition takes
        hashTags: true,                 // Should links change the hashtag in the URL?
        buildNavigation: true,          // If true, builds and list of anchor links to link to each slide
        pauseOnHover: true,             // If true, and autoPlay is enabled, the show will pause on hover
        startText: "Start",             // Start text
        stopText: "Stop",               // Stop text
        navigationFormatter: null       // Details at the top of the file on this use (advanced use)
});

Puede verse una demo en CSS-Tricks y también descargarse los ficheros de ejemplo.


Lectura recomendada: 10 trucos para escribir mejor código en jQuery

Vía twitter de Jesús Conde, descubro este artículo realmente útil con 10 trucos para escribir mejor código en jQuery. Lectura recomendada sin duda.
Por : David           Comentarios desactivados

Taller de Fernando Tellado de AyudaWordPress en la CampusParty

Wordpress

David | 7/08/2009

Estos días se ha realizado en Valencia, como todos los años, la CampusParty. Una de las Partys más grandes del mundo y que más gente reúne. En ella se han realizado numerosos talleres relacionados con el mundo de la informática y los ordenadores, entre ellos me han llamado la atención el taller de seguridad y redes, el de diseño de una plantilla en WordPress, el de  desarrollo web con PHP y el taller AfterEffects CS4.

Concretamente la ponencia/taller de Fernando Tellado, de ayudawordpres.com,  me ha servido mucho, por que da una idea de cuáles son los plugins que hay ahora mismo pegando en Worpress y como los puedo usar en una instalación limpia. Gracias al video me he instalado el BackWPup, que no lo conocía y ahora tengo respaldos diarios de mi blog, :)

Muy buena presentación Fernando, os dejo con el video.