LinuxParty
Un módulo es un elemento de contenido que puede ser situado junto a un artículo. Por ejemplo, un menú es un módulo. El pequeño bloque de registro de la parte izquierda, también es un módulo. Puedes crear tantos módulos como quieras, y colocarlos en distintas áreas predefinidas de la plantilla.En este tutorial se explica cómo crear un módulo simple. A través del cual, aprenderá la estructura básica de archivos de un módulo. Esta estructura básica puede ser ampliada para producir módulos más elaborados.
Tenemos la programación de un módulo algo más sencillo en este artículo.
Programar un módulo para Joomla! 2.5
Todo el contenido expuesto en este artículo, está extraído y traducido de la documentación que la comunidad de Joomla! ofrece íntegramente en inglés en su sección para desarrolladores. Para más información siga este enlace.
Este tutorial le proporciona lo básico, de lo que se necesita saber para desarrollar tu propio módulo y un poquito más. Para lograr esto, la mejor forma es crear un módulo básico que nos muestre, que es lo que debe tener un módulo para su operabilidad en Joomla! 2.5. Nuestro módulo de ejemplo, su función será, mostrar otros artículos del mismo autor. Aunque en el transcurso del tutorial iremos explicando y exponiendo el código de nuestro módulo, al final de este artículo encontrarán un enlace a la descarga del fichero adjunto, donde podrá obtener el módulo con todos los pasos aquí expuesto y listo para su instalación.
Estructura de archivos
Hay cuatro archivos básicos que se utilizan dentro del patrón estándar en el desarrollo de un módulo:
- mod_author_related.php - Este archivo es el principal punto de entrada para el módulo. Se llevarán a cabo las rutinas de inicialización necesarias, llamar a las rutinas auxiliares para recoger todos los datos necesarios, e incluir la plantilla que muestra la salida del módulo.
- mod_author_related.xml - Este archivo contiene información acerca del módulo. En él se definen los archivos que necesitan ser instalados por el instalador de Joomla! y especifica los parámetros de configuración del módulo.
- helper.php - Este archivo contiene la clase helper que se utiliza para hacer el trabajo real en la recuperación de la información que se muestra en el módulo (por lo general a partir de la base de datos o alguna otra fuente).
- tmpl/default.php - Esta es la plantilla del módulo. Este archivo tomará los datos recogidos por el mod_author_related.php y generará el código HTML que se muestra en la página.
Creación del mod_author_related.php
El archivo mod_author_related.php llevará a cabo tres tareas:
- Incluir el archivo helper.php que contiene la clase que se utiliza para recoger los datos necesarios.
- Invocar el método apropiado para recuperar los datos.
- Incluir la plantilla para mostrar la salida.
Siguiendo estos tres puntos, vamos a colocar un poco de código en nuestro archivo. La clase helper está definida en nuestro archivo helper.php . Este archivo se incluye con la declaración require_once .
require_once dirname(__FILE__).'/helper.php';
require_once se utiliza porque nuestras funciones auxiliares se definen dentro de una clase, y sólo queremos la clase definida, una vez.
Para invocar a nuestro método utilizaremos las siguientes líneas:
mod_author_related.php
<?php $cacheparams = new stdClass; $cacheparams->class = 'modAuthorRelatedHelper'; $cacheparams->method = 'authorRelated'; $list = JModuleHelper::moduleCache ($module, $params, $cacheparams); require JModuleHelper::getLayoutPath('mod_author_related', $params->get('layout', 'default')); ?>
Y para incluir la plantilla que muestra el HTML de nuestro módulo, usamos está línea:
require JModuleHelper::getLayoutPath('mod_author_related', $params->get('layout', 'default'));
Visto esto, nuestro archivo mod_author_related.php completo es el siguiente:
<?php // No permitir el acceso directo al archivo defined('_JEXEC') or die; // Incluye las funciones sólo una vez require_once dirname(__FILE__).'/helper.php'; // Invocar el método apropiado $cacheparams = new stdClass; $cacheparams->cachemode = 'safeuri'; $cacheparams->class = 'modAuthorRelatedHelper'; $cacheparams->method = 'authorRelated'; $cacheparams->methodparams = $params; $cacheparams->modeparams = array('id'=>'int', 'Itemid'=>'int'); $list = JModuleHelper::moduleCache ($module, $params, $cacheparams); if (!count($list)) { return; } $moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx')); $showDate = $params->get('showDate', 0); // Incluir la plantilla que mostrará los datos recogidos require JModuleHelper::getLayoutPath('mod_author_related', $params->get('layout', 'default')); ?>
Creación del helper.php
El archivo helper.php contiene la clase necesaria para recuperar los datos que se muestran en la salida del módulo. Esta clase a su vez tendrá un método que se encargara de dicha tarea.
Aquí está el código para el archivo helper.php:
Observe que no se incluye la etiqueta de cierre de php “?>”.
<?php // No permitir el acceso directo al archivo defined('_JEXEC') or die; // Utilizado para la ruta a los artículos require_once JPATH_SITE.'/components/com_content/helpers/route.php'; // Clase helper que se utiliza para hacer el trabajo real en la recuperación de la información abstract class modAuthorRelatedHelper { // Método que implementa la captura de la información necesaria a ser mostrada public static function authorRelated($params) { $db = JFactory::getDbo(); $app = JFactory::getApplication(); $user = JFactory::getUser(); $userId = (int) $user->get('id'); $count = intval($params->get('count', 5)); $groups = implode(',', $user->getAuthorisedViewLevels()); $date = JFactory::getDate(); $option = JRequest::getCmd('option'); $view = JRequest::getCmd('view'); $temp = JRequest::getString('id'); $temp = explode(':', $temp); $id = $temp[0]; $showDate = $params->get('showDate', 0); $nullDate = $db->getNullDate(); $now = $date->toSql(); $related = array(); $query = $db->getQuery(true); if ($option == 'com_content' && $view == 'article' && $id) { // seleccionar el autor del artículo $query->select('created_by'); $query->from('#__content'); $query->where('id = ' . (int) $id); $db->setQuery($query); $author = $db->loadResult(); $query->clear(); // Filtrar el contenido del autor $query->select('a.id as art'); $query->select('a.title'); $query->select('DATE_FORMAT(a.created, "%Y-%m-%d") as created'); $query->select('a.catid as cat'); $query->from('#__content AS a'); $query->where('a.id != ' . (int) $id); $query->where('a.state = 1'); $query->where('a.access IN (' . $groups . ')'); $query->where('(a.publish_up = '.$db->Quote($nullDate).' OR a.publish_up <= '.$db->Quote($now).')'); $query->where('(a.publish_down = '.$db->Quote($nullDate).' OR a.publish_down >= '.$db->Quote($now).')'); $query->where('a.created_by = ' . (int) $author); // Filtrar por idioma if ($app->getLanguageFilter()) { $query->where('a.language in (' . $db->Quote(JFactory::getLanguage()->getTag()) . ',' . $db->Quote('*') . ')'); } $db->setQuery($query); $temp = $db->loadObjectList(); if (count($temp)) { foreach ($temp as $row) { $row->route = JRoute::_(ContentHelperRoute::getArticleRoute($row->art, $row->cat)); $related[] = $row; } } unset ($temp); } return $related; } }
Como puedes darte cuenta, tenemos dos cosas importantes en este archivo:
- La clase modAuthorRelatedHelper : Que no existe ninguna regla, que obligue a escribir el nombre de dicha clase de esa forma, pero nos ayuda a hacer esto para que sea fácilmente identificable y localizable.
- Y el método authorRelated() : Que es donde dejamos volar nuestros conocimientos, y ponemos o programamos la captura de la información que se desea mostrar.
Creación del tmpl/default.php
El archivo default.php es la plantilla que muestra la salida del módulo. El código para el archivo default.php es el siguiente:
<?php // No permitir el acceso directo al archivo defined('_JEXEC') or die; ?> <ul class="authorelated<?php echo $moduleclass_sfx; ?>"> <?php foreach ($list as $item) : ?> <li> <a href="/<?php echo $item->route; ?>"> <?php if ($showDate) echo JHTML::_('date', $item->created, JText::_('DATE_FORMAT_LC4')). " - "; ?> <?php echo $item->title; ?> </a> </li> <?php endforeach; ?> </ul>
Aquí mostramos los títulos de los otros artículos del autor a través de $item->title, con la opción de mostrar o no la fecha. Esta opción de mostrar o no la fecha se hace a través del parámetro showDate, que vamos a definir a continuación en el archivo XML de nuestro módulo.
Han pasado algo más de 6 meses desde que Google Fiber comenzase a operar en Kansas City, ofreciendo a los habitantes de esta ciudad una conexión FTTH de 1 Gbps (tanto en subida como en bajada) por un precio de 70 dólares al mes además de un servicio básico de acceso gratuito con 5 Mbps de velocidad (tras pagar los costes de instalación que rondan los 300 dólares). La irrupción de Google en el sector de los operadores era algo que no iba a pasar inadvertido y, gracias a este proyecto piloto, comienzan a verse algunos efectos en el sector de las telecomunicaciones de Estados Unidos que muestran que Google Fiber puede ser un importante tractor que haga evolucionar este mercado. Más información y datos concretos en el artículo El impacto de Google Fiber en el sector de las telecomunicaciones de EE.UU..
Mozilla nos infoforma que 18 operadores móviles en el Mobile World Congress 2013 en Barcelona, anunciaron su compromiso con Firefox OS, que se potencia como el primer dispositivo Open Web del mundo.
Estos operadores incluyen: América Móvil, China Unicom, Deutsche Telekom, Etisalat, Hutchison Three Group, KDDI, KT, MegaFon, Qtel, SingTel, Smart, Sprint, Telecom Italia Group, Telefónica, Telenor, TMN and VimpelCom. Telstra acoge la iniciativa de Mozilla como una oportunidad para ofrecer una experiencia innovadora de la Web móvil a sus clientes. La amplitud de los operadores demuestra la confianza de la industria en FirefoxOS de Mozilla como plataforma móvil completamente adaptable, sin restricciones. La primera ola de dispositivos Firefox OS estará disponible para los consumidores en Brasil, Colombia, Hungría, México, Montenegro, Polonia, Serbia, España y Venezuela. Mercados adicionales se anunciarán pronto.
The Register publicó que Microsoft criticó a los fabricantes de PC de las razones del fracaso de Windows 8. Microsoft está "frustrado con los principales OEMs que no fabrican sistemas suficientemente cercanos". Pero los Fabricantes de PC devolvieron el golpe, diciendo que "habrían tenido que cargar con los costos de una enorme pila de unidades sin vender", alegando que los clientes realmente evitan productos táctiles de gama alta y prefieren comprar productos de gama más baja y ordenadores portátiles más baratos'. Microsoft no les culpa directamente por "el fracaso de su propio dispositivo táctil, Surface Pro RT.
Aunque los teléfonos móviles han avanzado una barbaridad en cuanto a su diseño, pasando del ladrillo Nokia o de la sobredosis de botones de la BlackBerry a las líneas puras y futuristas del iPhone o de los Galaxy S, siguen teniendo un momento de lo más antiestético: cuando los cargamos.
Ver a un precioso smartphone enganchado a un cable tiene algo extraño, como ver a Cristiano Ronaldo en el banquillo o a Fernando Alonso en una Vespino. Los equipos de diseño e ingeniería de Apple o de Samsung no parecen haberle prestado mucha atención a este problema, porque siguen utilizando el mismo sistema de carga que los móviles de los 90.
Puede, que no todo el mundo esté de acuerdo con el contenido de este artículo, pero fue el resultado de una encuesta de opinión, junto con algunas características que deben estar presentes a la hora de elegir la distribución a instalar, debe tener un mantenimiento, (no valen distros antiguas) tiene que tener un entorno liviano, rápido (razón, por la que Xubuntu, por ejemplo no se ha incluido -usa Gnome-) y amigable, junto con una suite ofimática, y al menos la posibilidad de configuración e instalación de nuevas cosas, no es una competición de distribuciones, no lo queremos por lo menos así presentar, es una idea para que puedas aprovechar tu viejo ordenador, y estas han sido las elegidas (existen muchas más ahí fuera):
¿Cuáles son los mejores antivirus para Android.?
Hemos dicho en varias oportunidades que es imperativo tener una aplicación de esta índole en nuestro equipo con Android. Los virus son recientes en el sistema operativo de Google, y no son tan numerosos como en, por ejemplo, Windows, pero son una amenaza real que tenemos que considerar. Afortunadamente, algunos nombres conocidos se han unido a la necesidad de tener protección en Android, y en esta lista que les presentamos van a poder encontrar caras familiares –que pueden generar más comodidad si, por ejemplo, ya lo estamos usando desde un ordenador-.
A continuación, les presentamos una serie de los cinco mejores antivirus para Android. Como siempre, están bienvenidos a dejar sus sugerencias en los comentarios.
Mozilla lanzó oficialmente el martes Firefox 19 para Windows, Mac, Linux y Android. Las mejoras incluyen un visor de PDF en el soporte de escritorio, así como la reducción de los requisitos de CPU en la plataforma móvil de Google. Puede ver los registros de cambios oficiales aquí: Escritorio y Android.
Actualmente tener Dropbox instalado en nuestra distro favorita es bien fácil gracias a que este servicio nos surte de paquetes precompilados en .rpm y .deb para diferentes distros como Debian, Ubuntu, Fedora, OpenSUSE, además de proporcionar source para compilarlo a mano
La pega es que lo que Dropbox nos proporciona son los paquetes de nautilus-dropbox, que una vez instalados y después de iniciar e instalar Dropbox solo nos dá integración con el navegador de archivos de Gnome, Nautilus,, pero… ¿y que pasa con las distros que usan KDE?
-
Virtualización
- VirtualBox 7.1.4 agrega soporte inicial para Linux Kernel 6.12 y otros cambios de Linux
- VirtualBox 7.1 promete soporte Wayland para compartir portapapeles en Linux
- VirtualBox 7.0.20 presenta soporte inicial para los kernels openSUSE 15.6 y RHEL 9.5
- VirtualBox 7.0.16 lanzado con soporte inicial para los kernels Linux 6.8 y 6.9
- Instalar un Sistema Operativo Invitado en VirtualBox
- Publicación de QEMU 8.0 para Linux, Windows y Mac con más emulación ARM y RISC-V
- Realidad Virtual, una revolución para el modelo digital de ocio
- Cómo instalar QEMU/KVM en Ubuntu para crear máquinas virtuales
- Cómo instalar VirtualBox 7.0 en AlmaLinux
- Cómo ejecutar aplicaciones de Android en Linux mediante Anbox
- Multipass: ejecutar varias VMs Ubuntu Linux bajo Demanda para cualquier sistema Linux
- Cómo usar máquinas virtuales Virtualbox en KVM en Linux
- Cómo clonar y crear una plantilla de máquina virtual KVM
- Gestión de máquinas virtuales KVM con Cockpit Web Console en Linux
- Cómo crear máquinas virtuales en Linux usando KVM (máquina virtual basada en kernel)