Documentación:Desarrollo
| Máxima |
|---|
| A Punto |
| Local |
Contenido |
Introducción
Objetivo
El propósito de esta página es la presentación de cómo se ha desarrollado este proyecto-wiki. Se mostrarán todas las herramientas empleadas y ejemplos de utilización de las mismas.
Herramientas utilizadas
- Aplicaciones:
- MediaWiki v1.3.10. Herramienta de wiki (documentación).
- WordPress v2.6. Herramienta de blog (documentación).
- Simple Machines Forum v1.1.5 . Herramienta de foros (documentación).
- MySQL v5. Base de datos (documentación).
- Librerías:
- Ext JS v2.0b1. Librería gráfica (documentación).
- SimplePie v1.0.1.
- Smarty v2.6.18. Librería de caché (documentación).
- Herramientas online:
- Google Analytics.
- Google Docs.
- Yahoo! Pipes. Herramienta de procesamiento de fuentes RSS (documentación).
- Netvibes (castellano).
- Lenguajes de programación:
- PHP v5.
- JavaScript.
- Utilidades:
- Yahoo! UI Library: YUI Compressor. Utilidad para "comprimir" los archivos JavaScript (.js) y las hojas de estilo (.css). Una vez desarrollado cada uno de los archivos, se comprime para disponerlo en el entorno de Producción; de esta forma, la descarga en Kb. es menor.
Organización de las Aplicaciones
Base de Datos
La base de datos utilizada es MySQL. Para Wikitel, se ha creado una base de datos en la cual se han utilizado los siguientes prefijos para las tablas:
- es_mw_ : Prefijo para las tablas del wiki (MediaWiki) para castellano.
- es_smf_ : Prefijo para las tablas del foro (Simple Machines Forum) para castellano.
- es_wp_ : Prefijo para las tablas del blog (WordPress) para castellano.
- en_mw_ : Prefijo para las tablas del wiki (MediaWiki) para inglés.
- en_smf_ : Prefijo para las tablas del foro (Simple Machines Forum) para inglés.
- en_wp_ : Prefijo para las tablas del blog (WordPress) para inglés.
Es decir, en primer lugar se indica el código ISO del idioma (es, en) y, en segundo lugar, se indica la aplicación:
- Wiki: MediaWiki - mw.
- Foro: Simple Machines Forum - smf.
- Blog: WordPress - wp.
Apache
En Apache, se ha configurado un host con la opción "AllowOverride All" en las opciones del directorio del site. De esta forma, es posible incluir archivos ".htaccess" en los directorios de las aplicaciones y configurar, por directorio, los accesos a estos directorios.
Además y para poder servir las aplicaciones dependiendo del dominio y página a los que el usuario intenta acceder, en el directorio raíz se ha incluido el siguiente archivo .htaccess:
php_flag register_globals off
php_value output_handler ob_gzhandler
# página principal
RewriteCond %{HTTP_HOST} ^(www\.)?wikitel\.info$ [NC]
RewriteRule ^/?$ http://es.wikitel.info/wiki/Portada [R,L]
# Wiki-es
RewriteCond %{HTTP_HOST} ^es\.wikitel\.info$ [NC]
RewriteRule ^/?$ /wiki/Portada [QSA,L]
# Wiki-en
RewriteCond %{HTTP_HOST} ^en\.wikitel\.info$ [NC]
RewriteRule ^/?$ /wiki/Main_Page [QSA,L]
# Blog
RewriteCond %{REQUEST_URI} ^/blog/?.*
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
# Wiki
RewriteCond %{REQUEST_URI} ^/wiki/?.*
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wiki/?(.*)$ /w/index.php?title=$1 [QSA,L]
Configuración de las Aplicaciones
Todas estas aplicaciones web utilizan como base de datos MySQL y lenguaje PHP. Las herramientas WordPress y Simple Machines Forum se han instalado y configurado según se indica en la documentación de cada una, sin realizar modificaciones / ampliaciones de las mismas, únicamente se han configurado de forma que puedan servir tanto para castellano como para inglés.
Esto se ha realizado incluyendo el siguiente código:
- Para el blog, en el archivo de configuración "wp-config.php":
$site = strtolower($_SERVER['SERVER_NAME']);
if ($site == 'en.wikitel.info') {
$table_prefix = 'en_wp_'; // Only numbers, letters, and underscores please!
define ('WPLANG', 'en');
} else { // Default 'es_ES'
$table_prefix = 'es_wp_'; // Only numbers, letters, and underscores please!
define ('WPLANG', 'es_ES');
}
- Para el foro, en el archivo de configuración "Settings.php":
$site = strtolower($_SERVER['SERVER_NAME']);
if ($site == 'en.wikitel.info') {
$mbname = 'Wikitel Forum'; # The name of your forum.
$boardurl = 'http://en.wikitel.info/forum'; # URL to your forum's folder. (without the trailing /!)
$language = 'english'; # The default language file set for the forum.
$db_prefix = 'en_smf_';
} else { // default: ES
$mbname = 'Foro de Wikitel'; # The name of your forum.
$boardurl = 'http://es.wikitel.info/forum'; # URL to your forum's folder. (without the trailing /!)
$language = 'spanish_es-utf8'; # The default language file set for the forum.
$db_prefix = 'es_smf_';
} // if
- Asimismo, para el wiki, se han añadido las siguientes líneas en el archivo "LocalSettings.php" para tener en cuenta los dos idiomas:
$site = strtolower($_SERVER['SERVER_NAME']);
if ($site == 'en.wikitel.info') {
# MySQL specific settings
$wgDBprefix = 'en_mw_';
$wgLanguageCode = 'en';
$wgGoogleAnalytics = 'UA-2582520-6';
} else { // default: ES
# MySQL specific settings
$wgDBprefix = 'es_mw_';
$wgLanguageCode = 'es';
$wgGoogleAnalytics = 'UA-2582520-4';
} // if
Desarrollo del proyecto
El desarrollo del proyecto se ha realizado creando en primer lugar un nuevo skin de forma que se modifique la apariencia por defecto de la herramienta MediaWiki. Asimismo, se han desarrollado una serie de extensiones gráficas que permiten organizar el contenido de las páginas. El skin generado es éste.
Estructura de directorios
El skin de Wikitel se ha creado teniendo en cuenta la siguiente estructura de directorios (esta estructura está bajo el directorio "w/skins"):
- En el directorio principal "wikitel" se sitúan las hojas de estilo:
- ext-wikitel.css. Ésta es la hoja de estilo que modifica las propiedades de los estilos que vienen por defecto en la librería ExtJs, de forma que se adapten al skin definido para Wikitel.
- main.css. Ésta es la hoja de estilo principal del skin de Wikitel, tal y como se implementan en MediaWiki.
- mainprint.css. Ésta es la hoja de estilo principal para la opción de impresión en un skin de MediaWiki.
El orden en el que se indican las hojas de estilo es muy importante ya que determina qué estilo prevalece. Así, el estilo del último fichero que se carga es el que modifica al resto.
- El directorio "_tmp" contiene dos directorios donde se crearán archivos temporales de "cache" (archivos generados por la librería SimplePie) y "compile" (archivos compilados de la librería Smarty).
- El directorio "ext" es el directorio que alberga la librería Ext JS, tanto los archivos .js, como los .css e imágenes.
- En el directorio "extensions" se incluyen las extensiones desarrolladas específicamente para Wikitel. El archivo principal es "Wikitel.php", el cual incorpora las extensiones:
- TabPanel.php. Pestañas.
- Categories.php. Categorías.
- En el directorio "images" se almacenan las imágenes de la librería Ext JS modificadas para adaptar su diseño al planteado en el actual Wikitel.
- En el directorio "rs" se incluyen los scripts JavaScript y hojas de estilo desarrollados para Wikitel necesarias para generar el skin así como otras funcionalidades de la librería ExtJS. Estos scripts y hojas de estilo son:
- layout.js. Define la presentación del skin.
- menus.js. Genera el menú lateral izquierdo.
- printable.js. Preparación de la página para su impresión.
- tabpanel.js. Generación de pestañas.
- categories.js y categories.css. Generación de árbol desplegable de información.
- En el directorio "tpl" se incluyen las diferentes plantillas Smarty. Estas plantillas permiten aislar el código PHP de la parte de presentación (HTML), así como el cacheo de las páginas previamente generadas, sustituyendo únicamente la parte de contenido modificado. Las plantillas generadas son:
- main.tpl. Ésta es la plantilla principal, a partir de la cual se genera la página con todo su contenido. Asimismo, reutiliza el resto de plantillas.
- menu.tpl. Con esta plantilla se genera el código JavaScript que se incluye en la cabecera para la generación del menú lateral izquierdo.
- header.tpl. En esta plantilla se define la cabecera HTML y elementos comunes del principio de la página, de forma que se reutilice en cada página.
- headerprint.tpl. Al igual que la anterior, en esta plantilla, se define la cabecera para la impresión de la página.
- footer.tpl. Esta plantilla incluye la parte final de la página (pie de página), así como el código JavaScript para el análisis en Google Analytics.
- footerprint.tpl. Esta plantilla incluye la parte final de la página para la impresión de la misma.
Interfaz de usuario
El interfaz de usuario se ha desarrollado utilizando la librería Ext JS, que proporciona componentes para la creación de interfaces de usuario gráficas (GUI) y uso de AJAX mediante la utilización del lenguaje JavaScript.
En primer lugar se ha implementado un nuevo skin basándose en el ejemplo de presentación compleja.
Para este skin además se ha utilizado la librería de PHP Smarty para llegar a un modelo semi-MVC, independizando el código de la presentación. Esto permite disponer de plantillas genéricas para la cabecera (header), pie de página (footer) y contenido (body) de la página global y, a partir de código, disponer la información en estas plantillas.
La página está dividida en:
- Cabecera (header). Sección donde se muestra el menú, el buscador, información de usuario o registro,...
- Espacio izquierdo (leftside) y derecho (rightside). Son los espacios laterales dejados en la página.
- Menú desplegable (leftmenu). Donde se muestra el menú lateral izquierdo desplegable. Este menú se genera dinámicamente a partir de la página MediaWiki:Sidebar, generándose código JavaScript en la página indicando los elementos del menú (ver código fuente de la página y buscar la cadena "var menu"). A partir de este código y gracias al script "menus.js", se crean los elementos 'div' necesarios, así como los elementos "Toolbar" de la librería Ext JS.
- Contenido (content). En esta sección se mostrará el contenido completo de la página.
- Pie de página (footer). En este sección se muestran los elementos del pie de página (Ayuda, Acerca de Wikitel, Condiciones Legales, Licencias Creative Commons y la fuente RSS a los cambios recientes).
Colores utilizados
| RGB | Nombre del color | Utilización |
|---|---|---|
| #ffcc00 | Naranja | Bordes de las diferentes secciones de la página. |
| #88857b | Gris medio | Línea en el header y fondo de las pestañas cuando no están activas. |
| #323232 | Gris marengo | Fondo del header. |
| #e9e9df | Gris claro | Fondo de la página. |
| #ffffff | Blanco | Fondo del contenido y del menú lateral izquierdo. |
| #000000 | Negro | Principalmente, color del texto del contenido aunque también se ha utilizado para los bordes del cuadro de las pestañas. |
Extensiones
Extensiones desarrolladas
Además de la interfaz estática, se han desarrollado varias extensiones que emplean la librería Ext JS y que pueden emplearse para ampliar la interfaz gráfica de forma dinámica. Estas extensiones son:
- Creación de pestañas. Mediante esta extensión basada en este ejemplo, es posible distribuir el contenido de la página en distintas pestañas. Puede verse un ejemplo de utilización de esta extensión en la siguiente página.
- Categorías. Esta extensión permite mostrar un árbol desplegable de contenidos.
Extensiones utilizadas
- Categorización:
- DinamycPageList2. Esta extensión genera un listado de forma dinámica de las páginas de una categoría determinada. Puede verse en el siguiente ejemplo.
- CategoryBreadcrumb. Muestra en la parte superior izquierad de una página el listado de las categorías superiores o ascendentes a las que pertenece dicha página.
- CategoryTree. Muestra las categorías de una página en formato de árbol desplegable. Una visualización de categorías descendentes puede verse en el siguiente ejemplo
- Imágenes:
- LinkedImage. Permite enlazar a una imagen de otro artículo.
- ImageMap. Permite crear un mapa de enlaces dentro de una imagen.
- Web semántica:
- SemanticMediaWiki. Esta extensión ayuda a buscar, organizar, etiquetar, evaluar y compartir la información de la wiki mediante la inclusión de anotaciones en el propio contenido de las páginas.
- Semantic Forms. Esta extensión permite añadir y editar información mediante formularios. Necesita que esté instalada la extensión SemanticMediaWiki.
- Multimedia:
- GoogleVideo. Muestra vídeos de Google Video.
- YouTube. Muestra vídeos de Youtube.
- VideoFlash. Muestra vídeos de cualquier sitio (Youtube, GoogleVideo, Dailymotion,...).
- dhflashplayer. Muestra vídeos flash (flv) a partir de un directorio.
- Extensión Widget que permite añadir diferentes Widgets a Media Wiki
- Widget:SlideShare Extensión Slide Share] un Widget para visualizar presentaciones. El código del documento a visualizar corresponde al que Slide Share ofrece en el parámetro doc= del código para incrustar en Wordpress (para poder ver dicho parámetro hay que hacer click en "customize")
- Miscelánea:
- Google Site Search. Con esta extensión es posible utilizar los Motores de búsqueda personalizados de Google.
- Cite. Esta extensión permite mostrar notas al pie de página. Puede verse en el siguiente ejemplo.
- Inputbox. Permite incluir formularios HTML dentro de una página.
- ParserFunctions. Esta extensión amplía el motor de MediaWiki incluyendo funciones lógicas.
- Social Bookmarking. Esta extensión permite enviar la dirección de la página actual a sitios de interés tales como Digg, delicious,...
- recaptcha. Permite solicitar al usuario una confirmación a la hora de darse de alta.
Plantillas generadas
- Resalte de texto. Esta plantilla permite resaltar un texto determinado de una página. Puede verse en el siguiente ejemplo.
- Grado de Desarrollo. Con esta plantilla es posible indicar el grado de desarrollo de una página determinada. Puede verse en el siguiente ejemplo.
Herramientas online
Para la realización del proyecto se han utilizado diversas aplicaciones / herramientas proporcionadas por Google.
Google Analytics
Esta herramienta permite obtener información de los accesos realizados a cada una de las páginas definidas. El modo de implementación es simple: Disponer un código JavaScript en cada una de las páginas (normalmente en el pie de página) incluyendo el identificador del sitio web que se quiere gestionar.
En el caso de Wikitel, cada aplicación tiene su propio identificador:
- Blog en castellano: UA-2582520-12.
- Foro en castellano: UA-2582520-13.
- Wiki en castellano: UA-2582520-11.
Google Docs
Esta herramienta permite disponer de documentación on-line accesible desde cualquier lugar. Los tipos de documentos son de texto y hojas de cálculo (es posible importar documentos generados con las herramientas de Microsoft: Word y Excel).
La documentación generada ha sido principalmente:
- Wikitel-Feeds. Esta hoja de cálculo almacena las fuentes a las que será posible acceder desde el Lector de Noticias de Wikitel.
- Wikitel-News. En esta hoja, se incluirán las noticias propias de Wikitel y que se visualizarán en el Lector de Noticias.
Motores de búsqueda personalizados
Esta funcionalidad permite crear motores de búsqueda que pueden utilizarse directamente desde cualquier sitio web.
Se ha utilizado en sustitución del buscador específico de MediaWiki.
FeedBurner
FeedBurner es una pasarela a las fuentes RSS que se le indiquen. Esta herramienta almacena en caché la información y la facilita a los usuarios. El mayor beneficio de su uso es que los usuarios no acceden a la fuente original, si no a la fuente de FeedBurner, no provocando sobre saturación en la fuente original.
Las fuentes generadas son (también está la versión en inglés):
- Foro de Wikitel. Cambios en el foro.
- Wikitel News. Fuente a partir de la fuente Google.
- Novedades Wikitel. Últimas entradas en el blog de Wikitel.
- Wikitel. Cambios recientes en el wiki.
Yahoo! Pipes
Con esta herramienta de Yahoo! es posible generar fuentes RSS a partir de otras fuentes, transformando, mediante distintos "plug-in's" dichas fuentes.
Esta herramienta se ha utilizado para combinar las fuentes "Wikitel-Feeds" comentadas anteriormente y generar una única teniendo en cuenta los parámetros facilitados desde el Lector de Noticias. Esto se ha hecho mediante la siguiente regla.
Asimismo, en relación a la fuente "Wikitel-News", también se ha generado la siguiente regla.
Por último, se ha generado un pipe específico para mostrar las últimas modificaciones de las páginas, de modo que filtre determinadas páginas, tales como páginas especiales, estadísticas,...
Netvibes
Netvibes es una herramienta que permite a cada usuario crear dos páginas web:
- una página privada.
- una página pública.
Cada página puede configurarse a gusto del propietario de la misma, insertando lectores RSS, notas, fotos, agendas, páginas web y "widgets". Netvibes emplea técnicas Ajax
Netvibes ofrece una amplia cantidad de widgets realizados y ofrecidos por otros usuarios. (Vea una breve explicación)
Los métodos para añadir y configurar los elementos se describen en la propia página de entrada a Netvibes y en su blog. A este respecto es importante señalar que un error frecuente es confundir la página pública con la privada, de manera que cuando se edita la página privada (creyendo que es la página pública) y se salvan los datos, el efecto de la edición no se refleja en la página pública. Para arreglar este error hay dos vías: a) repetir la edición, pero esta vez en la página pública, b) volver a la página privada y decir que copie el widget nuevo o el editado en la página pública.
Cada página pública se debe corresponder con un usuario Netvibes, Wikitel ha dado de alta tres usuarios:
- espanol@wikitel.info
- english@wikitel.info
- wikitel@gmail.com
Y se emplean los siguientes Universos (en sus correspondientes páginas públicas):
- Universo en español (Usuario: espanol@wikitel.info)
- Universo en inglés (Usuario: english@wikitel.info)
- Selección de Universos o página de error (Usuario: wikitel@gmail.com)
Materias relacionadas
- Documentación:Desarrollo:extensions:Wikitel.php
- Documentación:Desarrollo:rs:layout.js
- Documentación:Desarrollo:rs:menus.js
- Documentación:Desarrollo:rs:printable.js
- Documentación:Desarrollo:skin:Wikitel.php
- Documentación:Desarrollo:skin:ext-wikitel.css
- Documentación:Desarrollo:skin:main.css
- Documentación:Desarrollo:skin:mainprint.css
- Documentación:Desarrollo:tpl:footer.tpl
- Documentación:Desarrollo:tpl:footerprint.tpl
- Documentación:Desarrollo:tpl:header.tpl
- Documentación:Desarrollo:tpl:headerprint.tpl
- Documentación:Desarrollo:tpl:main.tpl
- Documentación:Desarrollo:tpl:menu.tpl
- Extension:CategoryBreadCrumb
- Extension:TabPanel


