Ulzurrun de Asanza i Sàez

Category: CMS

Posts about scripts and CMS which power websites, forums, blogs, image boards…

WP Carousel 1.1

Un carrusel de WP Carousel con Nivo SliderEn principio pensaba liberar WP Carousel 1.1 cuando se liberase WordPress 3.3, pero hace unos días recibí un email del repositorio de plugins de  WordPress.org donde se me pedía que retirara el script StepCarousel por tener una licencia incompatible con GPL (todos los plugins del repositorio deben estar liberados bajo la licencia GPL). Para que no retirasen WP Carousel del repositorio oficial y así facilitar su instalación y actualización con un sólo click, he decidido adelantar el lanzamiento.

Como ha sido algo apresurado, no he tenido tiempo de actualizar la documentación, cosa que haré lo antes posible.

Estos son los principales cambios de WP Carousel 1.1:

  1. Se ha eliminado StepCarousel, a partir de ahora por defecto se usará jCarousel.
  2. Se ha actualizado la pestaña de ayuda con más información y compatible con el nuevo sistema de ayuda de WordPress 3.3.
  3. Se ha resuelto el error que aparecía al usarse un theme que no existía. Ahora se muestra un mensaje de error pero la ejecución de la página prosigue.
  4. Se ha añadido un archivo de configuración para poder mantener la configuración interna de WP Carousel (nombres de las tablas, prioridades de carga, etc) al actualizar WP Carousel. El uso de este archivo está en la pestaña de ayuda.
  5. Se ha añadido una nueva opción interna para mostrar la lista de los últimos artículos en lugar del campo para introducir la ID del artículo cuando se supera el límite de artículos para la lista de artículos de la página de opciones del carrusel.
  6. Se ha eliminado la matriz $log del código, reduciendo consumo de memoria.
  7. Se ha añadido Nivo Slidercomo motor de carruseles. Los themes compatibles con Nivo Slider son diferentes los themes compatibles con jCarousel, y están claramente identificados en el selector de themes: sus nombres comienzan por “Nivo -“.

Podéis actualizar WP Carousel desde el Panel de Administración de WordPress.


WordPress 3.0.1 ya disponible

Desde anteayer está disponible la versión 3.0.1 de WordPress, que corrige 51 bugs no demasiado críticos. La única novedad más interesante para los desarrollares es que se ha añadido la función unregister_nav_menu(), que como su nombre indica, permite desregistrar un menú.

Podéis actualizar directamente desde el Panel de Administración o descargar la nueva versión.


Ya se puede publicar llamando por teléfono voz en WordPress.com

Vía AyudaWordPress descubro que se ha añadido la posiblidad de publicar artículos en los blogs de WordPress.com llamando por teléfono (algo que curiosamente ya existía hacía tiempo en LifeJournal). Las llamadas durarán un máximo de 1 hora (aunque automáticamente se cortarán si hay 10 segundos de silencio) y se cobrarán aplicando los precios normales de llamada. Finalmente se publica en el blog la grabación de voz, no una transcripción ni nada similar.

La verdad es que a mí esta novedad me deja más o menos igual (no suelo grabar vídeos para los artículos, y tampoco tenía en mente comenzar a publicar artículos narrados en lugar de escritos), aunque seguramente a más de uno le encantará esta novedad.

Integrar Simple Machines Forum con cualquier script PHP

A la hora de montar una comunidad una de las cosas más importantes es hacer que todo el contenido quede bien relacionado, de modo que a pesar de usar diferentes scripts para el foro y el portal, el usuario tenga la sensación de que todo está perfectamente unido y sincronizado. Cosas como mostrar en el portal la lista de último temas del foro o los cumpleaños del día contribuyen a la cohesión de la comunidad.

Trasteando esta semana con Simple Machines Forum, me dio por curiosear el funcionamiento del archivo SSI.php, que según los desarrolladores de SMF nos permite enlazar el foro con el resto de la página web y vaya, no exageran, de hecho permite mucho más que enlazar: permite crear el foro entero en cualquier otro lugar de la página.

Pero vayamos paso a paso. Lo básico antes de comenzar es hacer un require al archivo SSI.php del foro para poder tener acceso a todas las funciones y variables que necesitamos.

[php]
require("ruta/al/foro/SSI.php");
[/php]

Con esto tendremos acceso a variables como $context (la matriz principal de SMF, que almacena cosas como los links del menú, el navegador desde el que se accede, información acerca del usuario actual, etc. También tenemos acceso a funciones más que interesantes, como la de mostrar el formulario de inicio de sesión o de búsqueda, la última encuesta, los mensajes más recientes, los foros con más popularidad, el usuario con más mensajes publicados, el último usuario registrado, los usuarios online, los cumpleaños del día, etc.

[php]
// Para mostrar los últimos temas
ssi_recentTopics($num_recent = 8, $exclude_boards = null, $include_boards = null, $output_method = ‘echo’);

// Para mostrar los últimos mensajes
ssi_recentPosts();

// Para mostrar la última encuesta
ssi_recentPoll();

// Para mostrar los foros con más mensajes
ssi_topBoards();

// Para mostrar los mensajes más vistos
ssi_topTopicsViews();

// Para mostrar la encuesta con más votos
ssi_topPoll();

// Para mostrar el usuario con más mensajes
ssi_topPoster();

// Para mostrar el último usuario registrado
ssi_latestMember();

// Para mostrar un usuario al azar cada día
ssi_randomMember(‘day’);

// Para mostrar los usuarios online en el foro
ssi_whosOnline();

// Para mostrar los usuarios online en el foro y en páginas que usen SSI
ssi_logOnline();

// Para mostrar el formulario de inicio de sesión (si no ha iniciado sesión)
ssi_login();

// Para mostrar el link para cerrar la sesión (si ha iniciado sesión)
ssi_logout();

// Para mostrar un mensaje de bienvenida
// Un mensaje como "Hola, sumolari, tienes 10 mensajes, 0 son nuevos."
ssi_welcome();

// Para mostrar todos los eventos del calendario del foro y los cumpleaños
ssi_todaysCalendar();

// Para mostrar sólo los cumpleaños
ssi_todaysBirthdays();

// Para mostrar las fiestas de hoy (si es que hay alguna en el calendario)
ssi_todaysHolidays();

// Para mostrar los eventos de hoy del calendario
ssi_todaysEvents();

// Para mostrar los eventos recientes
ssi_recentEvents();

// Para mostrar estadísticas del foro
ssi_boardStats();

// Para mostrar las últimas noticias del foro
ssi_news();

// Para mostrar los últimos temas del foro de noticias
ssi_boardNews();

// Para mostrar la barra de menús
// También se puede recorrer la matriz $content[‘menu_buttons’] para obtener el mismo resultado
ssi_menubar();

// Para mostrar el buscador del foro
ssi_quickSearch();

// Para mostrar un listado de los últimos archivos adjuntos subidos al foro
ssi_recentAttachments();
[/php]

Como veis, combinando esto con los filtros y las acciones de WordPress, podemos integrar sin mucha dificultad un foro SMF con un blog WordPress.

Por último os dejo la página de ejemplo de SMF, donde podéis ver en acción todas estas funciones.


Ya está disponible WordPress 3.0

Ya está disponible para su descarga la versión final de WordPress 3.0. Las novedades más importantes ya las he ido comentando por el blog, pero a modo de resumen (y saltándome muchísimos cambios de esta versión) son:

Os dejo a continuación el vídeo de presentación de WordPress 3.0.

Como de costumbre, podéis ver el anuncio en el blog oficial o descargar directamente WordPress 3.0.


Descarga WordPress 3.0 RC3

Desde el sábado pasado está disponible la tercera RC de WordPress 3.0. Cada día queda menos para que vea la luz la versión final. Los cambios entre esta RC y la anterior son casi en la totalidad bugs detectados en versiones anteriores arreglados. Esta será seguramente la última versión candidata antes de la versión final, así que es más que probable que antes de julio se libere WordPress 3.0.

Podéis leer el anuncio oficial o descargar WordPress 3.0 RC3.


Ya está disponible AutoMOD 1.0

El equipo de Mods de phpBB liberó ayer la primera versión estable de AutoMOD, la herramienta para instalar de forma automática Mods para phpBB. La idea es seguir manteniendo el mismo sistema de Mods (sistema que fundamentalmente consiste en indicar los cambios que se deben realizar sobre los archivos de phpBB para aplicar el Mod, nada que ver con los filtros y las acciones de WordPress) pero agilizar la instalación y el mantenimiento de los mismos realizando las modificaciones de forma automática mediante AutoMOD.

Podéis descargar AutoMOD 1.0 o ver el anuncio oficial.


Ya disponible WordPress 3.0 RC1

Ya se puede descargar la primera RC de WordPress 3.0 (que por cierto, cumple 7 años). Entre otras mejoras, ya está acabado el nuevo gestor de menús y se ha cambiado algo el aspecto del Panel de Administración (aunque, sinceramente, me gustaba más el de la versión 2.9). A pesar de todo, aún hay unos cuantos bugs reportados por solucionar.

Cada vez queda menos para la versión final de WordPress 3.0, que estará disponible o a finales de este mes o a principios de junio. Mientras tanto, podéis descargar y probar la RC, aunque no os recomiendo usarla más que con fines de prueba.


Ya disponible la primera Beta de Joomla 1.6

BetaDesde el lunes está disponible la primera Beta de Joomla 1.6. Como características clave de esta nueva versión, destacan el nuevo sistema de control de acceso, que permite a los administradores de la página controlar quienes pueden ver y editar el contenido; un nuevo modelo de organización sin límite de profundidad, lo que se traduce en que los administradores podrán crear tantos subniveles como deseen en el contenido de la web; actualización de extensiones con un click, lo que hará más fácil actualizar a la última versión todas las extensiones (plugins) que se estén usando y plantillas XHTML semánticas.

Para aquellos interesados en la Beta, se puede descargar desde esta página.


Introducción a los filtros y las acciones de WordPress

Nota: Este tutorial está pensado para aquellos que saben algo del desarrollo de plugins y themes para WordPress y de PHP. No está orientado a expertos, pero sí a iniciados.

Cuando se desarrolla una aplicación, se debe pensar también en un método para ampliarla, y en el caso de una aplicación de código abierto esto es mucho más importante. Pongámonos en el caso de WordPress, en el que por defecto no podemos disponer de (por poner un ejemplo) encuestas o carruseles. ¿Cómo añadimos esto? Podemos decantarnos en un principio por añadir estas funciones en nuevas versiones de WordPress, sin embargo hay una cantidad enorme de cosas que añadir y al final siempre habría alguna que no estaría disponible.

Así que hay que implementar una forma de extender la aplicación, y aquí es donde tenemos que pensar cómo hacerlo. En un principio la solución está clara: indico que código modificar para añadir la función y listo. Además se puede automatizar el proceso, de modo que el usuario sólo tendría que subir un archivo y darle a un botón y la nueva función estaría disponible. Esta solución nos puede servir al principio, pero ¿qué ocurre al actualizar la aplicación? Pues que todos los archivos modificados se reemplazan por los de la nueva versión, dejándonos en el mejor de los casos sin la función añadida y en el caso normal, con un montón de errores de llamdas a funciones inexistentes.

Esquema
Esquema

Y aquí es donde entran los filtros y las acciones. El método que utiliza WordPress (entre otras aplicaciones) es permitir definir filtros y acciones. El fundamento de las acciones es bastante simple, definen ciertas posiciones en los archivos de la aplicación, y cuando se llega a esas posiciones, se cargan todas las funciones que estén en la lista de acciones a ejecutar en esa posición. Un ejemplo, imaginemos que yo defino el punto “antesdemostrarlostitulos”, pues bien, si yo añado una función que muestre el texto “El título es: ” a la lista de funciones a ejecutarse en el punto “antesdemostrarlostitulos”, cuando la aplicación llegue a ese punto, cargará mi función, y por tanto se mostrará el texto. Esto hace que aunque se actualicen los archivos originales, siempre se ejecutará, porque este punto siempre estará en el mismo lugar (a no ser, claro, que los desarrolladores lo eliminen). Con los filtros ocurre algo similar. Imaginemos que yo defino el punto “antesdemostrarelcontenido” y añado un filtro que altere el contenido de modo que muestre todo el texto en mayúsculas. Aunque más adelante se actualice la aplicación, el resultado del filtro se mantendrá constante. Tenéis un esquema a modo de resumen en la imagen de la derecha.

Los lugares de los filtros y las acciones los tienen que definir los desarrolladores de la aplicación, aunque veremos más adelante cómo crear nuestras propias posiciones para filtros y acciones, así que es conveniente tener a mano una lista de los filtros y las acciones que tiene la aplicación por defecto, ya que de lo contrario la única forma de conocerlos es buscarlos manualmente.

En este tutorial nos centraremos en la creación y el uso de filtros y acciones en WordPress, y dejaremos de lado los diversos filtros y acciones que tiene por defecto, que por cierto, podéis ver aquí.

Aplicar un filtro

Tenemos la variable $contenido que almacena el texto que genera nuestro plugin, y queremos añadir un filtro llamado mostrar_contenido_mi_plugin que permita a otros programadores modificar el contenido que mostrará nuestro plugin. Bien, recurriremos a la función apply_filters, que nos devolverá la variable tras pasar por todas las funciones que se hayan añadido al filtro. Veámoslo en código:

[php]
<?php
$contenido = la_funcion_de_mi_plugin(); // La variable ahora tiene el contenido devuelto por nuestro plugin
$contenido = apply_filters(‘mostrar_contenido_de_mi_plugin’, $contenido); // Pasamos el filtro, la primera variable es el nombre y la segunda el valor que se filtrará
echo $contenido; // Mostramos la variable, aunque también podríamos volver a modificarla nosotros o hacer lo que quisiéramos con ella
?>
[/php]

Aplicar una acción

Supongamos ahora que en lugar de filtrar nuestro contenido lo que queremos hacer es permitir que otros programadores puedan ejecutar sus funciones en la acción despues_de_mostrar_contenido_plugin, acción que se aplicará justo después de mostrar el contenido de nuestro plugin. Esto puede ser útil en mucho casos, como por ejemplo a la hora de hacer recuentos tras ocurrir cierto evento o para mostrar los enlaces para compartir al final de los artículos. En este caso usaremos la función do_action, quedando en código así:

[php]
<?php
$contenido = la_funcion_de_mi_plugin(); // La variable ahora tiene el contenido devuelto por nuestro plugin
echo $contenido; // Mostramos la variable
do_action(‘despues_de_mostrar_contenido_plugin’); // En este caso el único parámetro obligatorio es el nombre de la acción
?>
[/php]

Añadir y eliminar una función de un filtro

Ya tenemos el filtro creado, pero ahora queremos añadir nuestra función al filtro para modificar el resultado. ¿Cómo lo hacemos? Fácil, con la función add_filter.

[php]
function nuestro_plugin() {
$contenido = la_funcion_de_mi_plugin(); // La variable ahora tiene el contenido devuelto por nuestro plugin
$contenido = apply_filters(‘mostrar_contenido_de_mi_plugin’, $contenido); // Pasamos el filtro, la primera variable es el nombre y la segunda el valor que se filtrará
echo $contenido; // Mostramos la variable, aunque también podríamos volver a modificarla nosotros o hacer lo que quisiéramos con ella
}

function modificar_texto($texto) {
$texto = ‘<div id="contenido">’. $texto .'</div>’; // Modificando el texto
return $texto; // Devolvemos el texto
}

add_filter(‘mostrar_contenido_de_mi_plugin’, ‘modificar_texto’); // Añadimos al filtro mostrar_contenido_de_mi_plugin la función modificar_texto

nuestro_plugin(); // Ejecutamos el plugin
[/php]

Ahora imaginemos que en un caso específico no queremos añadir cierta función al filtro, es decir, queremos eliminar la función del filtro en ciertas circunstancias. En este caso usaremos la función remove_filter, que funciona de forma contraria a add_filter:

[php]
function nuestro_plugin() {
$contenido = la_funcion_de_mi_plugin(); // La variable ahora tiene el contenido devuelto por nuestro plugin
$contenido = apply_filters(‘mostrar_contenido_de_mi_plugin’, $contenido); // Pasamos el filtro, la primera variable es el nombre y la segunda el valor que se filtrará
echo $contenido; // Mostramos la variable, aunque también podríamos volver a modificarla nosotros o hacer lo que quisiéramos con ella
}

function modificar_texto($texto) {
$texto = ‘<div id="contenido">’. $texto .'</div>’; // Modificando el texto
return $texto; // Devolvemos el texto
}

add_filter(‘mostrar_contenido_de_mi_plugin’, ‘modificar_texto’); // Añadimos al filtro mostrar_contenido_de_mi_plugin la función modificar_texto

if (se_dan_ciertas_circunstancias()) { // Supogamos que devuelve true cuando queremos eliminar la función del filtro
remove_filter(‘mostrar_contenido_de_mi_plugin’, ‘modificar_texto’); // Eliminamos del filtro
}

nuestro_plugin(); // Ejecutamos el plugin
[/php]

Añadir y eliminar una función de una acción

Volviendo a las acciones, supongamos que queremos añadir una función nuestra a la acción que hemos aplicado antes, así que tendremos que usar la función add_action.

[php]
<?php
function nuestro_plugin() {
$contenido = la_funcion_de_mi_plugin(); // La variable ahora tiene el contenido devuelto por nuestro plugin
echo $contenido; // Mostramos la variable
do_action(‘despues_de_mostrar_contenido_plugin’); // En este caso el único parámetro obligatorio es el nombre de la acción
}

function mostrar_texto() { echo ‘Ya se ha ejecutado mi plugin’; } // Esta función es la que añadiremos a la acción
add_action(‘despues_de_mostrar_contenido_plugin’, ‘mostrar_texto’); // Añadimos la función a la acción

nuestro_plugin(); // Ejecutamos el plugin
?>
[/php]

Y como antes, también podemos eliminar una función de una acción mediante remove_action:

[php]
<?php
function nuestro_plugin() {
$contenido = la_funcion_de_mi_plugin(); // La variable ahora tiene el contenido devuelto por nuestro plugin
echo $contenido; // Mostramos la variable
do_action(‘despues_de_mostrar_contenido_plugin’); // En este caso el único parámetro obligatorio es el nombre de la acción
}

function mostrar_texto() { echo ‘Ya se ha ejecutado mi plugin’; } // Esta función es la que añadiremos a la acción
add_action(‘despues_de_mostrar_contenido_plugin’, ‘mostrar_texto’); // Añadimos la función a la acción

if (se_dan_ciertas_circunstancias()) {
remove_action(‘despues_de_mostrar_contenido_plugin’, ‘mostrar_texto’); // Eliminamos la función de la acción
}

nuestro_plugin(); // Ejecutamos el plugin
?>
[/php]