Artículos de la categoría PHP

Liberado SMF 2.0 RC3

Desde que se liberó la segunda versión candidata de SMF 2.0, poco se ha oído de este gestor de foros, pero hoy se ha vuelto a hacer oir liberando la tercera versión candidata de SMF 2.0, que viene con casi 350 cambios respecto a la anterior versión candidata. Entre estos destacan:

  • Múltiples arreglos de fallos de seguridad
  • Mejor compatibilidad con idiomas RTL (que se leen de derecha a izquierda)
  • Añadidas cabecezas curvas a diversas tablas que anteriormente no las tenían así
  • Mejoras en los mensajes privados
  • Diversas mejoras al editor WYSIWYG
  • Se ha rediseñado el centro de estadísticas de cada perfil
  • Se ha actualizado la sección de ayuda

Podéis descargar la nueva versión en desde la página de descargas de SMF.

No hay comentarios

WP Carousel 0.4.0.10

Este fin de semana he estado trabajando en una actualización de WP Carousel. Esta nueva versión arregla un bug que impedía el correcto funcionamiento del carrusel en Internet Explorer 7 y anteriores (que al final ha resultado ser un error de CSS), además de corregir un fallo en las redirecciones del Panel de Administración.

También añade la posibilidad de limitar el número de artículos que se mostrará en cada categoría, de modo que es posible mostrar 5 artículos de una categoría y 3 de otra. Es recomendable limitar a un número de artículos menor de los que hay en la categoría, ya que si no se pueden producir comportamientos anómalos (añadir artículos de otras categorías para llegar al límite, por ejemplo).

Por último, también permite seleccionar el orden de los artículos: se pueden ordenar de más recientes a más antiguos o al revés.

No es mucha novedad y por eso esta nueva versión sigue siendo de la rama 0.4.0.x.

Podéis actualizar a esta versión desde el Panel de Administración de WordPress o descargando el plugin desde aquí.

2 Comentarios

Diseñando nuestra web para el iPhone – Parte 1

El iPhone y el iPod Touch disponen de un navegador realmente bueno para tratarse de dispositivos móviles. Mobile Safari muestra las páginas web prácticamente igual que lo haría su versión de escritorio, lo que hace que en muchos casos no sea necesario hacer un diseño específico de nuestra web para estos dispositivos.

Sin embargo, el tamaño de la pantalla del iPhone y del iPod Touch (a partir de ahora hablaremos sólo de iPhone para abreviar) hace que se nos haga incómodo navegar, teniendo que hacer zoom en múltiples ocasiones, lo que entorpece bastante la navegación. Afortunadamente, adaptar nuestra página web al iPhone es una tarea relativamente sencilla y gracias a Mobile Safari podemos lograr hacer que nuestra web tenga el aspecto de una aplicación nativa del iPhone.

Como podréis adivinar por el título, el tutorial está dividido en partes (que iré redactando poco a poco y publicando una vez las haya acabado de escribir). Esta primera parte la dedicaré a explicar cómo preparar nuestro entorno de desarrollo.

Servidor local

Antes de ponernos a diseñar necesitaremos instalar un servidor en nuestro equipo. Hay muchas opciones, sin embargo yo me quedaría con Apache + MySQL + PHP (conocido como WAMP, MAMP o LAMP, dependiendo de si se utiliza Windows, Mac o Linux).

En Windows solía usar WampServer, una aplicación gratuita y fácil de instalar y administrar, y ahora en Mac utilizo la versión gratuita de Mamp. Como hace tiempo que no toco Linux, lo dejaré de lado en este tutorial. De todos modos, más adelante veréis que algunas de las herramientas útiles para comprobar nuestro diseño no están disponibles para Linux (algunas ni siquiera para Windows).

Una vez instalado el servidor, basta con que accedamos a localhost, 127.0.0.1 o nuestra dirección IP. Los tres métodos deberían mostrarnos exactamente lo mismo.

Mobile Safari

Configurando Safari

Configurando Safari

Ya tenemos el servidor local, con lo que podemos trabajar con MySQL y PHP y si nuestro CMS está escrito en PHP, podremos instalarlo en nuestro servidor local y diseñar directamente para él (yo, por ejemplo, suelo diseñar directamente para WordPress). Ahora necesitamos un navegador que funcione de forma similar a Mobile Safari para comprobar nuestro trabajo, y para ello tenemos 3 opciones diferentes.

Si disponemos de un iPhone lo tenemos muy fácil. En la barra de direcciones basta con introducir la IP de nuestro equipo servidor y listo. Recordad que ambos dispositivos deben estar en la misma red.

En caso de que no dispongamos de un iPhone pero sí de un Mac, tenemos la opción de hacernos desarrolladores para el iPhone, con lo cual tendremos acceso al iPhone Simulator, un simulador del iPhone que, adivinad… tiene Mobile Safari, con lo que podremos probar nuestros diseños en una simulación del iPhone. No es una opción demasiado interesante si no somos desarrolladores, pero si ya lo somos, siempre tenemos la posibilidad de usar el simulador para probar páginas web en lugar de aplicaciones.

Por último, tenemos la opción de usar Safari cambiando el agente de usuario por el del iPhone. Esto es algo que se puede hacer también en otros navegadores, sin embargo como Safari y Mobile Safari parten del mismo motor de renderizado, es más conveniente usar estos, ya que así nos aseguramos de que lo que vemos durante las pruebas es lo más parecido al resultado final.

Un diseño sólo para iPhone

Bien, ahora ya podemos comenzar a diseñar para el iPhone y lo primero que deberíamos hacer es asegurarnos de que nuestro diseño especial sólo se use en el iPhone. Para ello recurriremos al tutorial que publiqué la semana pasada sobre cómo detectar navegadores mediante PHP. De momento nuestro diseño podría comenzar así:

function is_browser($name, $version='') {
	$user_agent = $_SERVER['HTTP_USER_AGENT']; // Cargamos el UserAgent en una variable
	$wtr = false; // Esta variable es la que indica si se ha accedido con el navegador que buscamos o no. Por defecto es false, sólo cambia si se accede con el navegador buscado
	$wtmb = ''; // Esta variable almacena el navegador del dispositivo móvil (sólo si buscamos un navegador de dispositivo móvil, esto no incluye ni Android ni iPod ni iPhone)
	// Primero veamos a quién buscamos y luego comprobemos si es él
	switch ($name) {
		// Caso Internet Explorer
		case 'IE':
			if (strrpos($user_agent, "MSIE") === false) {} else {
				if ($version != '') {
					if (strrpos($user_agent, 'MSIE '.$version) === false) {} else { $wtr = true; }
				} else {
					$wtr = true;
				}
			}
			break;
		// Caso Firefox
		case 'FF': if (strrpos($user_agent, "Firefox") === false) {} else { $wtr = true; } break;
		// Caso Opera
		case 'OP': if (strrpos($user_agent, "Opera") === false) {} else { $wtr = true; } break;
		// Caso Konqueror
		case 'KQ': if (strrpos($user_agent, "Konqueror") === false) {} else { $wtr = true; } break;
		// Caso Chrome
		case 'CH': if (strrpos($user_agent, "Chrome") === false) {} else { $wtr = true; } break;
		// Caso Safari
		case 'SF': if (strrpos($user_agent, "Safari") === false) {} else { $wtr = true; } break;
		// Caso iPod
		case 'IPD': if (strrpos($user_agent, "iPod") === false) {} else { $wtr = true; } break;
		// Caso iPhone
		case 'IPH': if (strrpos($user_agent, "iPhone") === false) {} else { $wtr = true; } break;
		// Caso iPod o iPhone
		case 'IPO':
			if (strrpos($user_agent, "iPod") === false) {} else { $wtr = true; }
			if (strrpos($user_agent, "iPhone") === false) {} else { $wtr = true; }
			break;
		// Caso Android
		case 'AD': if (strrpos($user_agent, "Android") === false) {} else { $wtr = true; } break;
		// Caso navegador móvil
		case 'MB':
			$mua = array(
				'PIE4' => 'compatible; MSIE 4.01; Windows CE; PPC; 240x320',
				'PIE4_Smartphone' => 'compatible; MSIE 4.01; Windows CE; Smartphone;',
				'PIE6' => 'compatible; MSIE 6.0; Windows CE;',
				'Minimo' => 'Minimo',
				'OperaMini' => 'Minimo',
				'AvantGo' => 'AvantGo',
				'Plucker' => 'Plucker',
				'NetFront' => 'NetFront',
				'SonyEricsson' => 'SonyEricsson',
				'Nokia' => 'Nokia',
				'Motorola' => 'mot-',
				'BlackBerry' => 'BlackBerry',
				'WindowsMobile' => 'Windows CE',
				'PPC' => 'PPC',
				'PDA' => 'PDA',
				'Smartphone' => 'Smartphone',
				'Palm' => 'Palm'
			);
			foreach($mua as $nav => $ua){ if(strstr($user_agent, $ua) != false) { $wtmb = $nav; } }
			if ($wtmb != '') { $wtr = true; }
			break;
		// Caso genérico
		default: $wtr = false; break;
	}
	return $wtr;
}

if (is_browser('IPO')) {
/* Diseño especial para el iPhone / iPod Touch */
} else {
/* Diseño general para el resto de navegadores */
}

Y esto es todo de momento.

Más adelante…

En las próximas partes comenzaremos a diseñar para el iPhone. Explicaré desde cómo aprovechar las posibilidades de Mobile Safari para ahorrarnos trabajo (por ejemplo, creando degradados con CSS en lugar de con imágenes) hasta qué medidas usar, cómo detectar rotaciones del dispositivo (si está en vertical u horizontal)… en resumen, cómo simular la interfaz de una aplicación.

Eso sí, habrá unas cuantas partes más. En principio no tengo decidido cuántas habrá en total (ya he comentado al principio que no las tengo escritas), así que podéis pedir en los comentarios que me centre en alguna cosa en especial.

Un comentario

Conocer la versión que se usa del CMS de un sitio web es algo muy útil para los hackers, ya que sabiendo este dato pueden revisar los cambios que hay entre dicha versión y las siguientes, con lo que pueden saber las vulnerabilidades que presenta la página en pocos minutos.

Por defecto WordPress muestra este número en varios sitios, y en AyudaWordPress han publicado un pequeño código que lo oculta de cualquier lugar donde aparezca. El código es bastante simple, y aplica un filtro a la función que muestra el número de la versión, no devolviendo nada en lugar de devolver el contenido filtrado.

Añadiendo este código al archivo functions.php de nuestro theme, ocultaremos el número de la versión y haremos nuestro blog más seguro. Desde luego, la solución es increíblemente senzilla e inteligente :) .

//Elimina referencias a la version de WordPress
function quitar_version_wp() {
return '';
}
add_filter('the_generator', 'quitar_version_wp');
No hay comentarios

Liberado phpBB 3.0.7

Ya está disponible la versión 3.0.7 de phpBB, que principalmente soluciona problemas detectados en las anteriores versiones. Esta versión aporta muy poco en cuanto a nuevas funciones (hay que tener en cuenta que la versión 3.0.6 estuvo repleta de novedades, así que es normal que esta versión no tenga tantas como su predecesora).

En cuanto a aportes de esta versión, los bugs parcheados en esta versión ascienden a más de 30, siendo 85 los cambios entre esta versión y la anterior., Por tanto, es más que recomendable actualizar a esta nueva versión lo antes posibles.

Más información y enlaces de descarga.

2 Comentarios

Detectando navegadores con PHP

Saber el navegador con el que se accede a nuestras páginas web es algo muy útil. Lo podemos utilizar para cargar algo de CSS / Javascript específico para un navegador (como por ejemplo, para evitar errores con IE6), también lo podemos usar para cargar una página completamente distinta en navegadores antiguos y, ¿por qué no? para mostrar una página específica para móviles.

Ya he comentado este tema en otras ocasiones, pero esta vez ampliaré el rango de navegadores a detectar, concretamente nos centraremos en Internet ExplorerFirefox, SafariOpera, Konqueror, Chrome, iPod Touch, iPhone, Android (vale, estos tres no son navegadores, pero en estos casos me refiero a detectar el sistema operativo) o cualquier tipo de navegador para móvil.

En esta ocasión crearemos una función que acepte dos parámetros: el navegador que queremos buscar y la versión específica que buscamos (si es que buscamos alguna versión en especial). Para el primer parámetro, usaremos una serie de identificadores:

Identificador Navegador
IE Internet Explorer
FF Firefox
SF Safari
OP Opera
KQ Konqueror
CH Chrome
IPD iPod
IPH iPhone
IPO iPod / iPhone
AD Android
MB Navegador de móvil

Sobre la versión del navegador, sólo nos centraremos en las versiones de Internet Explorer.

La función seguirá la siguiente estructura:

  1. Cargamos en una variable el agente de usuario del visitante.
  2. Mediante un bucle foreach determinamos en qué navegador buscamos.
  3. Mediante la función strrpos comprobamos si el agente de usuario se corresponde con el del navegador que buscamos.
  4. Sólo si buscamos Internet Explorer: Detectamos si se ha accedido con la versión que hemos establecido (si es que hemos establecido alguna versión).
  5. Sólo si buscamos un navegador móvil: Buscamos alguno de los diversos agentes de usuario que tienen los diferentes navegadores para móviles.
  6. Devolvemos el valor true si se ha detectado el navegador en cuestión y false si no se ha detectado, a través de una variable que tiene por defecto el valor false y sólo cambia a true al detectarse el navegador.

Finalmente todo esto traducido a PHP quedaría así:

	function is_browser($name, $version='') {
		$user_agent = $_SERVER['HTTP_USER_AGENT']; // Cargamos el UserAgent en una variable
		$wtr = false; // Esta variable es la que indica si se ha accedido con el navegador que buscamos o no. Por defecto es false, sólo cambia si se accede con el navegador buscado
		$wtmb = ''; // Esta variable almacena el navegador del dispositivo móvil (sólo si buscamos un navegador de dispositivo móvil, esto no incluye ni Android ni iPod ni iPhone)
		// Primero veamos a quién buscamos y luego comprobemos si es él
		switch ($name) {
			// Caso Internet Explorer
			case 'IE':
				if (strrpos($user_agent, "MSIE") === false) {} else {
					if ($version != '') {
						if (strrpos($user_agent, 'MSIE '.$version) === false) {} else { $wtr = true; }
					} else {
						$wtr = true;
					}
				}
				break;
			// Caso Firefox
			case 'FF': if (strrpos($user_agent, "Firefox") === false) {} else { $wtr = true; } break;
			// Caso Opera
			case 'OP': if (strrpos($user_agent, "Opera") === false) {} else { $wtr = true; } break;
			// Caso Konqueror
			case 'KQ': if (strrpos($user_agent, "Konqueror") === false) {} else { $wtr = true; } break;
			// Caso Chrome
			case 'CH': if (strrpos($user_agent, "Chrome") === false) {} else { $wtr = true; } break;
			// Caso Safari
			case 'SF': if (strrpos($user_agent, "Safari") === false) {} else { $wtr = true; } break;
			// Caso iPod
			case 'IPD': if (strrpos($user_agent, "iPod") === false) {} else { $wtr = true; } break;
			// Caso iPhone
			case 'IPH': if (strrpos($user_agent, "iPhone") === false) {} else { $wtr = true; } break;
			// Caso iPod o iPhone
			case 'IPO':
				if (strrpos($user_agent, "iPod") === false) {} else { $wtr = true; }
				if (strrpos($user_agent, "iPhone") === false) {} else { $wtr = true; }
				break;
			// Caso Android
			case 'AD': if (strrpos($user_agent, "Android") === false) {} else { $wtr = true; } break;
			// Caso navegador móvil
			case 'MB':
				$mua = array(
					'PIE4' => 'compatible; MSIE 4.01; Windows CE; PPC; 240x320',
					'PIE4_Smartphone' => 'compatible; MSIE 4.01; Windows CE; Smartphone;',
					'PIE6' => 'compatible; MSIE 6.0; Windows CE;',
					'Minimo' => 'Minimo',
					'OperaMini' => 'Minimo',
					'AvantGo' => 'AvantGo',
					'Plucker' => 'Plucker',
					'NetFront' => 'NetFront',
					'SonyEricsson' => 'SonyEricsson',
					'Nokia' => 'Nokia',
					'Motorola' => 'mot-',
					'BlackBerry' => 'BlackBerry',
					'WindowsMobile' => 'Windows CE',
					'PPC' => 'PPC',
					'PDA' => 'PDA',
					'Smartphone' => 'Smartphone',
					'Palm' => 'Palm'
				);
				foreach($mua as $nav => $ua){ if(strstr($user_agent, $ua) != false) { $wtmb = $nav; } }
				if ($wtmb != '') { $wtr = true; }
				break;
			// Caso genérico
			default: $wtr = false; break;
		}
		return $wtr;
	}

Finalmente el uso es muy sencillo, basta con verificar el valor que devuelve la función, de modo que si buscamos, por ejemplo, a Opera, usaríamos el siguiente código:

if (is_browser('OP')) {
/* Código específico para Opera */
} else {
/* Código para el resto de navegadores */
}
2 Comentarios

Ocultando artículos y categorías del loop de WordPress

Nota: Para entender este tutorial son necesarios unos conocimientos básicos de PHP (sobretodo de matrices) y de WordPress (para saber las IDs del contenido y el lugar donde poner el código).

Hay veces en las que queremos ocultar ciertos artículos o categorías del loop de WordPress (el bucle principal que se encarga de mostrar el contenido de la página). En estos casos podemos recurrir a diversos métodos, como comprobar dentro del propio bucle si el artículo está en cierta categoría o tiene una ID determinada. Sin embargo, estos métodos no se pueden aplicar a plugins porque estos no pueden modificar código del bucle, así que debemos buscar un método diferente.

Mostrando $wp_query

Mostrando $wp_query

Durante el desarrollo de la versión 0.4 de WP Carousel me topé con este problema, y decidido a superarlo, tomé la vía probablemente más radical: modificar la variable $wp_query. Esta variable almacena toda la información referente a las consultas a la Base de Datos, incluyendo el contenido consultado, los filtros aplicados, el orden. De hecho, si imprimimos esta variable, obtendremos un resultado enorme, que podéis ver en parte en la imagen de la izquierda.

Alterando el contenido de esta variable se pueden hacer multitud de cosas, sin embargo nos centraremos en ocultar contenido del bucle.

Si nos fijamos en la variable, veremos que es una matriz. Los índices que nos interesan son los siguientes: category__not_in, tag__not_in y post__not_in. Son unos índices con unos nombres realmente descriptivos, ¿verdad? El primero nos permite eliminar categorías del bucle, el segundo nos permite eliminar etiquetas y el último nos permite eliminar artículos individuales.

El contenido de estos índices debe ser una matriz, la cual almacenará en todos los casos las IDs del contenido a ocultar. Veamos de forma práctica cómo ocultaríamos las categorías 3, 19 y 62 del bucle:


$wp_query->query_vars['category__not_in'] = array(3, 19, 62);

$wp_query->query($wp_query->query_vars);

La primera línea está clara, pero, ¿y la segunda? Se trata de una llamada a la función query(), que vuelve a realizar la consulta y elimina el contenido previamente guardado. Antes he comentado que esta variable almacena resultados de las consultas, así que es necesario limpiar la variable de resultados antiguos y rellenarla de nuevos, de otro modo no siempre funcionaría el código.

Este código no funciona en cualquier lugar de WordPress. Si pensamos con un poco de lógica, llegaremos a la conclusión de que debemos poner el código antes del bucle (porque si lo ponemos después, ya se habrá mostrado el contenido y no habrá nada que filtrar). Pero, ¿en qué lugar añadirlo? Bien, realmente se puede añadir en cualquier lugar antes del bucle. En el archivo functions.php del theme, en un plugin por separado (como ocurre con WP Carousel) o incluso justo antes del bucle. Eso sí, dependiendo de en qué lugar ponemos el código, la segunda línea (que actualiza los resultados) será necesaria u opcional. Por comodidad, podéis dejarla siempre, aumentará el número de consultas a la Base de Datos, pero cómo se hará uso de esta función en determinadas ocasiones, no es demasiado preocupante.

Pasemos a otro ejemplo: ocultemos los artículos con la etiqueta con ID 54.


$wp_query->query_vars['tag__not_in'] = array(54);

$wp_query->query($wp_query->query_vars);

Otro ejemplo bastante claro. Por último sólo nos quedaría ocultar artículos. Estoy seguro de que ya adivináis cómo se ocultarían los artículos con IDs 1, 7 y 42:


$wp_query->query_vars['post__not_in'] = array(1, 7, 42);

$wp_query->query($wp_query->query_vars);

Realmente no tiene mucha complicación, pero antes de acabar el tutorial debeís tener en cuenta un par de cosas:

  1. La variable $wp_query almacena contenido importante, y es recomendable hacer una copia de la variable para poder restaurarla más adelante, algo como:
    $wp_query_old = $wp_query;

    Así en caso de detectar un error en las modificaciones realizadas a la matriz, el script puede recuperar el contenido original.

  2. Modificar la consulta en ciertas páginas puede dañar el resultado, sobretodo cuando se visualiza una página individual o un artículo en solitario. Es recomendable modificar la matriz sólo cuando estamos en el index del blog (donde nos interesa ocultar o mostrar artículos).
  3. Este método sólo es adecuado para plugins. Si quisiéramos modificar nuestro theme, tenemos a nuestra disposición métodos aún más fáciles y menos intrusivos que éste.
  4. ¡No ocultemos contenido sin avisar antes al usuario! Todos estos cambios son invisibles para el usuario medio, y más de uno se llevaría una desagradable sorpresa al ver desaparecer sus artículos misteriosamente del índice de su blog.

Dicho esto, ahora es cosa vuestra experimentar. Tenéis más información sobre los índices que podéis modificar en esta página (aunque habla de una función diferente, muchos de los parámetros son equivalentes a los índices de la matriz).

Si tenéis problemas o dudas, preguntad en los comentarios.

2 Comentarios

phpBB 3.1 requerirá PHP 5.2

Así es: a partir de la rama 3.1 de phpBB, todas las siguientes versiones requerirán, como mínimo, PHP 5.2 para poder funcionar, según han anunciado los desarrolladores en el foro oficial.

Esto hará que parte del código pueda ser reescrito para aprovechar las funciones introducidas en esta versión de PHP, que se liberó el 2 de noviembre de 2006. Lamentablemente, y a pesar de que ya han pasado más de tres años desde que se liberó, la versión 5.2 de PHP no está presente en todos los servidores, por lo que algunos usuarios de este sistema de foros tendrán que actualizar la versión de PHP de sus servidores si quieren actualizar a esta rama (y a las que están por venir).

No hay comentarios

Integrando WP Carousel en cualquier theme

Theme por defecto de WP Carousel 0.4

Theme por defecto de WP Carousel 0.4

Nota: Este tutorial está destinado a los diseñadores de themes de WordPress y para poder entenderlo del todo son necesarios conocimientos básicos de PHP.

Desde la versión 0.4 de WP Carousel, los carruseles admiten themes, y claro, esto da mucho juego a los diseñadores, que con un poco de ingenio y creatividad, pueden hacer maravillas. También permite darle al carrusel un toque más acorde con el diseño de nuestros blogs, aunque claro, es posible que al distribuir nuestro theme con soporte de WP Carousel muchos usuarios se pierdan a la hora de instalar un segundo theme para WP Carousel.

Sin embargo, en la versión 0.4.0.1 añadí un parámetro muy útil a la función wp_carousel() (encargada de mostrar el carrusel): el parámetro $mode. Este parámetro acepta tres valores: show, get y array. El primero es que se toma por defecto y muestra el carrusel. El segundo devuelve el código HTML generado por el theme, mientras que el tercero devuelve una matriz con el contenido y la configuración del carrusel. Entonces disponemos de dos métodos diferentes para integrar WP Carousel en nuestro theme: llamándolo estableciendo el parámetro $mode en get (y reemplazando código) o llamándolo estableciendo el parámetro $mode en array, para más adelante crear un theme muy similar a los normales de WP Carousel, sólo que almacenado en la carpeta de nuestro theme e inseleccionable desde la página de opciones de WP Carousel.

Veamos cómo hacerlo.

Lo primero que haremos será crear una variable que almacene la matriz que devuelve wp_carousel() con el parámetro $mode establecido en array. Podemos crearla dentro de una función, en el archivo functions.php o directamente en el archivo correspondiente de nuestro theme (header.php, index.php, etc).

A continuación cargamos en nuevas variables la configuración del carrusel y sus elementos. La matriz que hemos obtenido antes tiene 3 índices: CONFIG, que almacena la configuración, ITEMS, que almacena los elementos e ID, que almacena la ID del carrusel (aunque ésta debemos definirla nosotros, así que no es de mucha utilidad).

He creado la variable $c_id para que el mismo código de un theme normal de WP Carousel sirva en nuestro theme especial y he tomado el valor del índice ID de la matriz del primer paso para hacer uso de éste, aunque podríamos haberlo tomado del valor que usamos como primer parámetro de la función wp_carousel().

A continuación utilizo la función eval() para crear la función encargada de cargar el código Javascript necesario para iniciar el carrusel. La siguiente línea tan sólo carga la función en el pie de página del theme.

Por último, cargamos el archivo wp-carousel-theme.php, que es el que contiene el theme en mi ejemplo. El código que podéis ver a continuación es el que utilizo para integrar WP Carousel en Portal Colorido 2.0.

$carousel_array = wp_carousel(ID_DEL_CARRUSEL, 'array');
$carousel_config = $carousel_array['CONFIG'];
$carousel_items = $carousel_array['ITEMS'];
$c_id = $carousel_array['ID'];
eval('if (!function_exists("wp_carousel_load_carousel_'.$c_id.'_js_code")) { function wp_carousel_load_carousel_'.$c_id.'_js_code() { wp_carousel_load_carousel_js('.$c_id.'); } }');
add_action('wp_footer', 'wp_carousel_load_carousel_'.$c_id.'_js_code');
require_once('wp-carousel-theme.php');

El archivo wp-carousel-theme.php contiene un theme normal de WP Carousel, la única diferencia es que la matriz $config en este caso es $carousel_config, al igual que la matriz $items es $carousel_items. Podéis seguir este tutorial para crear el theme de WP Carousel.

Como veis, no tiene demasiada complicación y no difiere demasiado del sistema general de creación de themes de WP Carousel.

Un comentario

WP Carousel 0.4.0.1

¡Ya comenzamos con los arreglos de fallos de WP Carousel 0.4! Y es que aunque parezca mentira, unas pocas horas después de liberar la versión 0.4, tengo que liberar la versión 0.4.0.1, que arregla un par de bugs que he encontrado en la versión anterior, añade una nueva función y evita problemas con los archivos.

Pero vayamos punto por punto. El bug que arregla esta versión aún no ha sido reportado, así que creo que nadie lo ha tenido aún. Consiste en que si creamos X carruseles y no los mostramos todos, es posible que varios fallen. El motivo del bug es algo relativamente simple. El código que inicia los carruseles se carga siempre, de modo que es posible que se muestre el carrusel con ID 5, con ID 1 y con ID 0, pero no el que tiene ID 4, ni el 3 ni el 2, de modo el script, al tratar de ejecutarse, conseguirá hacer funcionar los carruseles con ID 0 y 1, pero al llegar al que tiene por ID 2, no podrá continuar, ya que no se muestra, por tanto llegará a un error y dejará de ejecutarse correctamente, haciendo fallar al carrusel con ID 5, que sí se muestra en este ejemplo.

Este bug lo he detectado al eliminar el Widget de la sidebar de mi blog de pruebas, que tenía por ID, 0, y ha sido entonces cuando he visto el error.

El segundo error que he visto es muy estúpido, había traducido mal una frase al español, en lugar de poner volver, he puesto volever. Es posible que lo hayáis visto y no os hayáis dado cuenta del error, pero ya está solucionado.

La función nueva que se añade es que ahora la función wp_carousel es capaz de devolver el código HTML generado, y no sólo mostrarlo. El principal motivo para añadir esto es que en próximas versiones se podría añadir una etiqueta del estilo de [WP_CAROUSEL:ID] que se reemplace automáticamente por el carrusel en cuestión, de modo que no sería necesario ni editar el theme: se podría mostrar el carrusel en artículos y páginas.

Pero el verdadero motivo por el que publico tan pronto la versión 0.4.0.1 es muy diferente. Resulta que al subir los archivos al servidor de WordPress, estaba usando la vista como árbol de svnX. Yo añadí las carpetas principales (img, css, js, themes…) pensando que el sistema era recursivo, es decir, que él sólo añadiría automáticamente los archivos que contenían esas carpetas, pero no, no es así, de modo que durante aproximadamente una hora ha estado en el servidor de WordPress una versión de WP Carousel 0.4 inoperativa, ya que no incluía, por ejemplo, el código JS que inicia el carrusel ni los themes ni las imágenes… ni nada. Para evitar tener que avisar a todos aquellos que han descargado esta versión (que de hecho no sé ni quiénes son), subo ya la versión 0.4.0.1 y cuando actualicen a esta versión, ya tendrán todos los archivos necesarios para el buen funcionamiento del plugin.

No hay comentarios