<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mundo Geek &#187; cms</title>
	<atom:link href="http://mundogeek.net/etiqueta/cms/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Fri, 25 May 2012 14:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Creación de componentes para Joomla (II)</title>
		<link>http://mundogeek.net/archivos/2010/02/15/creacion-de-componentes-para-joomla-ii/</link>
		<comments>http://mundogeek.net/archivos/2010/02/15/creacion-de-componentes-para-joomla-ii/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 08:50:42 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[administracion]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=4953</guid>
		<description><![CDATA[Si en el artículo anterior vimos cómo desarrollar la interfaz pública de un componente para Joomla, en esta ocasión veremos cómo crear la interfaz de administración, extendiendo nuestro pequeño componente de ejemplo, que mostraba citas aleatorias de entre las introducidas por los usuarios, y añadiendo opciones para editar y eliminar las citas. Lo primero que [...]]]></description>
			<content:encoded><![CDATA[<p>Si en el artículo anterior vimos cómo <a href="http://mundogeek.net/archivos/2010/02/12/creacion-de-componentes-para-joomla/" title="Creación de componentes para Joomla">desarrollar la interfaz pública de un componente para Joomla</a>, en esta ocasión veremos cómo crear la interfaz de administración, extendiendo nuestro pequeño componente de ejemplo, que mostraba citas aleatorias de entre las introducidas por los usuarios, y añadiendo opciones para editar y eliminar las citas.</p>
<p>Lo primero que tendremos que hacer es editar el archivo XML que contiene la información del componente. Recordaréis que la sección referente a la interfaz de administración (<code>administration</code>) estaba vacía en el ejemplo anterior.<span id="more-4953"></span></p>
<p>Necesitamos añadir una sección <code>files</code>, en la que indicar los archivos que compondrán la parte de administración, y una etiqueta <code>menu</code>, especificando el nombre a mostrar en el menú de Componentes y la página que se cargará al hacer clic sobre él. Algo a tener en cuenta es que <code>file</code> tiene un argumento <code>folder</code> indicando que todos los archivos a los que hacemos referencia se encuentran en una nueva carpeta admin dentro del directorio de nuestro componente.</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;install type="component" version="1.5"&gt;
  &lt;name&gt;Ejemplo&lt;/name&gt;
  &lt;author&gt;Raul Gonzalez&lt;/author&gt;
  &lt;creationDate&gt;Febrero 2010&lt;/creationDate&gt;
  &lt;copyright&gt;(C) Raul Gonzalez&lt;/copyright&gt;
  &lt;license&gt;GPL&lt;/license&gt;
  &lt;authorUrl&gt;http://mundogeek.net/&lt;/authorUrl&gt;
  &lt;authorEmail&gt;zootropo en gmail&lt;/authorEmail&gt;
  &lt;version&gt;0.1&lt;/version&gt;
  &lt;description&gt;Componente de ejemplo que muestra mensajes aleatorios escritos por los lectores&lt;/description&gt;
  &lt;install&gt;
    &lt;queries&gt;
      &lt;query&gt;CREATE TABLE IF NOT EXISTS jos_mensajes(
          id int NOT NULL auto_increment,
          mensaje varchar(300) NOT NULL, PRIMARY KEY(id));&lt;/query&gt;
      &lt;query&gt;INSERT INTO jos_mensajes(mensaje) VALUES
          ('At your command'),
          ('Hay 10 tipos de personas en el mundo: los que entienden binario y los que no'),
          ('Es mio, solo mio. Miii.... tessssssooooroo'),
          ('Hasta luego, y gracias por el pescado');&lt;/query&gt;
    &lt;/queries&gt;
  &lt;/install&gt;
  &lt;files&gt;
    &lt;file&gt;ejemplo.php&lt;/file&gt;
    &lt;file&gt;ejemplo.xml&lt;/file&gt;
    &lt;folder&gt;controllers&lt;/folder&gt;
    &lt;folder&gt;models&lt;/folder&gt;
    &lt;folder&gt;views&lt;/folder&gt;
  &lt;/files&gt;
  &lt;administration&gt;
    &lt;menu link="option=com_ejemplo"&gt;Ejemplo&lt;/menu&gt;
    &lt;files folder="admin"&gt;
      &lt;file&gt;ejemplo.php&lt;/file&gt;
      &lt;file&gt;controller.php&lt;/file&gt;
      &lt;folder&gt;views&lt;/folder&gt;
    &lt;/files&gt;
  &lt;/administration&gt;
&lt;/install&gt;</pre>
<p>En el tutorial anterior ya comentamos que el punto de entrada al componente, tanto en el caso de la interfaz pública como el de la administración, es un archivo PHP con el nombre del componente, y que este, normalmente, no hará más que cargar el controlador adecuado. En este caso sólo vamos a utilizar un controlador, por lo que el código es mucho más sencillo. Creemos un nuevo archivo ejemplo.php dentro de nuestra nueva carpeta admin, con el siguiente contenido:</p>
<pre name="code" class="php">&lt;?php
defined('_JEXEC') or die('Restricted access');

require_once('controller.php');

$controller = new EjemploController();

$controller->execute($task);
$controller->redirect();</pre>
<p>Como vemos lo único que hace es cargar el código de nuestro único controlador, instanciar la clase, y ejecutar el método adecuado en el objeto dependiendo del parámetro <code>task</code> de la petición.</p>
<p>Creemos ahora el archivo controller.php en la carpeta admin:</p>
<pre name="code" class="php">&lt;?php
defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.controller');

class EjemploController extends JController {
  function __construct() {
    parent::__construct();
    $this-&gt;addModelPath(JPATH_COMPONENT_SITE.DS.'models');
  }

  function display() {
    $vista = $this-&gt;getView('ejemplo', 'html');
    $modelo = $this-&gt;getModel('mensaje', 'EjemploModel');
    $vista-&gt;setModel($modelo, true);

    parent::display();
  }

  function edit() {
    $vista = $this-&gt;getView('ejemplo', 'html');
    $modelo = $this-&gt;getModel('mensaje', 'EjemploModel');
    $vista-&gt;setModel($modelo, true);

    $vista-&gt;edit();
  }

  function save() {
    $modelo = $this-&gt;getModel('mensaje', 'EjemploModel');
    $id = JRequest::getVar('id');
    $mensaje = JRequest::getVar('mensaje');

    $correcto = $modelo-&gt;actualizarMensaje($id, $mensaje);

    if($correcto)
      $this-&gt;setRedirect('index.php?option=com_ejemplo', 'Mensaje actualizado con &eacute;xito');
    else
      $this-&gt;setRedirect('index.php?option=com_ejemplo', 'Ocurri&oacute; un error al actualizar el mensaje', 'error');
  }

  function remove() {
    $modelo = $this-&gt;getModel('mensaje', 'EjemploModel');
    $cid = JRequest::getVar('cid', 0, '', 'array');
    $correcto = true;
    foreach($cid as $id) {
      $resultado = $modelo-&gt;eliminarMensaje($id);
      if(!$resultado)
        $correcto = false;
    }

    if($correcto)
      $this-&gt;setRedirect('index.php?option=com_ejemplo', 'Mensajes eliminados con &eacute;xito');
    else
      $this-&gt;setRedirect('index.php?option=com_ejemplo', 'Ocurri&oacute; un error al eliminar los mensajes', 'error');
  }
}</pre>
<p>En esta ocasión sobreescribimos el constructor del controlador para añadir una llamada al método <code>addModelPath</code>. Hacemos uso de este método para que el controlador tenga en cuenta también la carpeta en la que almacenamos el modelo en la interfaz pública. Editaremos ese archivo para añadir los nuevos métodos que necesitemos, en lugar de crear otro archivo de modelo. También podríamos haber almacenado el archivo en la carpeta de la parte de administración y hacer uso del método <code>addModelPath</code> en el controlador de la parte pública.</p>
<p>Si quisiéramos hacer uso de una vista de la parte pública, aunque es algo menos común, podríamos haber hecho uso del método <code>addViewPath</code>.</p>
<p>El resto del código no tiene mayor misterio.</p>
<p>Sólo nos queda crear la vista y las plantillas que vamos a utilizar. Creamos una carpeta views, dentro una carpeta ejemplo, y en ella un archivo view.html.php.</p>
<pre name="code" class="php">&lt;?php
defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.view');

class EjemploViewEjemplo extends JView {
  function display($tpl=null) {
    JToolBarHelper::title('Mensajes');
    JToolBarHelper::deleteList();
    JToolBarHelper::editList();

    $mensajes =&#038; $this-&gt;get('Mensajes');
    $this-&gt;assignRef('mensajes', $mensajes);

    parent::display($tpl);
  }

  function edit() {
    JToolBarHelper::title('Editar mensaje');
    JToolBarHelper::save();
    JToolBarHelper::cancel();

    $modelo = $this-&gt;getModel();
    $cid = JRequest::getVar('cid', 0, '', 'array');

    $mensaje = $modelo-&gt;getMensajePorId($cid[0]);
    $this-&gt;assignRef('mensaje', $mensaje);

    parent::display('editar');
  }
}</pre>
<p>En esta ocasión para generar nuestra vista hacemos uso de la clase <code>JToolBarHelper</code>, que contiene métodos para facilitarnos la creación de la barra de herramientas de nuestro componente. Tiene métodos para añadir títulos (<code>title</code>), divisores (<code>divider</code>), espaciadores (<code>spacer</code>), &#8230; botones de ayuda (<code>help</code>), para guardar elementos (<code>save</code>), borrar (<code>trash</code>), publicar (<code>publish</code>), &#8230; Este es el motivo de que haya utilizado palabras inglesas para nombrar los métodos del controlador: al pulsar el botón generado por <code>editList</code>, por ejemplo, se intentará ejecutar por defecto una tarea <code>edit</code>.</p>
<p>Este es el aspecto que tendrá ahora nuestro modelo, una vez editado el archivo correspondiente en la carpeta de la interfaz pública:</p>
<pre name="code" class="php">&lt;?php
defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.component.model');

class EjemploModelMensaje extends JModel {
  function getMensaje() {
    $db =&#038; JFactory::getDBO();
    $query = 'SELECT mensaje FROM #__mensajes ORDER BY RAND() LIMIT 1';
    $db-&gt;setQuery($query);
    return $db-&gt;loadResult();
  }

  function getMensajePorId($id) {
    $db =&#038; JFactory::getDBO();
    $query = "SELECT id, mensaje FROM #__mensajes WHERE id='{$id}'";
    $db-&gt;setQuery($query);
    return $db-&gt;loadObject();
  }

  function eliminarMensaje($id) {
    $db =&#038; JFactory::getDBO();
    $query = "DELETE FROM #__mensajes WHERE id='{$id}'";
    $db-&gt;setQuery($query);
    $db-&gt;query();

    if ($db-&gt;getErrorNum())
      return false;

    return true;
  }

  function actualizarMensaje($id, $mensaje) {
    $db =&#038; JFactory::getDBO();
    $query = "UPDATE #__mensajes SET mensaje='{$mensaje}' WHERE id='{$id}'";
    $db-&gt;setQuery($query);
    $db-&gt;query();

    if ($db-&gt;getErrorNum())
      return false;

    return true;
  }

  function getMensajes() {
    $query = 'SELECT id, mensaje FROM #__mensajes ORDER BY id ASC';
    return $this-&gt;_getList($query);
  }

  function anyadirMensaje($mensaje) {
    $db =&#038; JFactory::getDBO();
    $query = "INSERT INTO #__mensajes(mensaje) VALUES('{$mensaje}')";
    $db-&gt;setQuery($query);
    $db-&gt;query();

    if ($db-&gt;getErrorNum())
      return false;

    return true;
  }
}</pre>
<p>Lo único destacable es el uso del método <code>_getList</code>, que toma una consulta SQL y devuelve una lista con los resultados.</p>
<p>Vamos por último con las plantillas. Creamos la carpeta tmpl en views/ejemplo y en esta un archivo default.php, que será la plantilla que mostrará la lista de los mensajes almacenados en la base de datos.</p>
<pre name="code" class="php">&lt;?php defined('_JEXEC') or die('Restricted access'); ?&gt;

&lt;form action="index.php" method="post" name="adminForm"&gt;
  &lt;table class="adminlist"&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th width="5"&gt;ID&lt;/th&gt;
      &lt;th width="20"&gt;&lt;input type="checkbox" name="toggle" value="" onclick="checkAll(&lt;?php echo count($this-&gt;mensajes); ?&gt;);"/&gt;&lt;/th&gt;
      &lt;th&gt;Mensaje&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;?php
  $i = 0;
  foreach($this-&gt;mensajes as $mensaje) {
  ?&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;?php echo $mensaje-&gt;id; ?&gt;&lt;/td&gt;
      &lt;td&gt;&lt;?php echo JHTML::_('grid.id', $i, $mensaje-&gt;id); ?&gt;&lt;/td&gt;
      &lt;td&gt;&lt;?php echo "&lt;a href='index.php?option=com_ejemplo&#038;task=edit&#038;cid[]={$mensaje-&gt;id}'&gt;{$mensaje-&gt;mensaje}&lt;/a&gt;"; ?&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;?php
    $i++;
  }
  ?&gt;
  &lt;/table&gt;

  &lt;input type="hidden" name="option" value="com_ejemplo" /&gt;
  &lt;input type="hidden" name="task" value="" /&gt;
  &lt;input type="hidden" name="boxchecked" value="0" /&gt;
&lt;/form&gt;</pre>
<p>Aquí hay que tener en cuenta varias convenciones. Por ejemplo, el formulario tiene que tener como valor para el atributo <code>name</code> &#8220;<code>adminForm</code>&#8220;, para que funcione el script que marca todos los checkboxes al marcar el primero, y la tabla tiene que tener como valor para el atributo <code>class</code> &#8220;<code>adminlist</code>&#8220;, si queremos que esta tenga el aspecto definido en la hoja de estilo.</p>
<p>A parte de eso lo único interesante es el uso del método <code>JHTML::_()</code>, que se utiliza para generar código HTML de uso común. Toma como primer parámetro una cadena con formato &#8220;clase.metodo&#8221;, lo que indica que queremos ejecutar el método indicando de la clase <code>JHTML<em>Clase</em></code>. Si no se especifica ninguna clase, se llamará al metodo con ese nombre de la clase <code>JHTML</code>, si existe. Cualquier otro parámetro extra que se le pase a <code>JHTML::_()</code> se pasará como parámetro al método que queremos ejecutar.</p>
<p>Estas clases que agrupan código HTML de uso común son <code>JHTMLBehavior</code>, <code>JHTMLContent</code>, <code>JHTMLEmail</code>, <code>JHTMLForm</code>, <code>JHTMLGrid</code>, <code>JHTMLImage</code>, <code>JHTMLList</code>, <code>JHTMLMenu</code> y <code>JHTMLSelect</code>.</p>
<p>El método <code>id</code> de <code>JHtmlGrid</code>, concretamente, genera un widget de tipo checkbox que sigue las convenciones necesarias para que se utilice para seleccionar un elemento por su identificador.</p>
<p>Por último veamos la plantilla que se encargará de crear el formulario con el que editar el mensaje, default_editar.php. Este formulario es incluso más sencillo, y no requiere de mayores explicaciones.</p>
<pre name="code" class="php">&lt;?php defined('_JEXEC') or die('Restricted access'); ?&gt;

&lt;form action="index.php" method="post" name="adminForm" id="adminForm"&gt;
  &lt;table class="admintable"&gt;
    &lt;tr&gt;
      &lt;td width="100" align="right" class="key"&gt;&lt;label for="mensaje"&gt;Mensaje:&lt;/label&gt;&lt;/td&gt;
      &lt;td&gt;&lt;input type="text" name="mensaje" id="mensaje" maxlength="300" value="&lt;?php echo $this-&gt;mensaje-&gt;mensaje;?&gt;" /&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;

  &lt;input type="hidden" name="option" value="com_ejemplo" /&gt;
  &lt;input type="hidden" name="id" value="&lt;?php echo $this-&gt;mensaje-&gt;id; ?&gt;" /&gt;
  &lt;input type="hidden" name="task" value="" /&gt;
&lt;/form&gt;</pre>
<link type="text/css" rel="stylesheet" href="http://mundogeek.net/sh/css/SyntaxHighlighter.css"></link><script language="javascript" src="http://mundogeek.net/sh/js/shCore.js"></script><script language="javascript" src="http://mundogeek.net/sh/js/shBrushPhp.js"></script><script language="javascript" src="http://mundogeek.net/sh/js/shBrushXml.js"></script><script language="javascript">dp.SyntaxHighlighter.ClipboardSwf = 'http://mundogeek.net/sh//flash/clipboard.swf';dp.SyntaxHighlighter.HighlightAll('code');</script><br />
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2010/02/15/creacion-de-componentes-para-joomla-ii/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>WordPress 2.1</title>
		<link>http://mundogeek.net/archivos/2007/01/23/wordpress-21/</link>
		<comments>http://mundogeek.net/archivos/2007/01/23/wordpress-21/#comments</comments>
		<pubDate>Mon, 22 Jan 2007 23:47:51 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bitacoras]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2007/01/23/wordpress-21/</guid>
		<description><![CDATA[WordPress 2.1 ya está disponible para descargar. Los cambios, traducidos directamente desde el blog de desarrollo: El autoguardado asegura que no vuelvas a perder ninguna entrada. Nuestro nuevo editor te permite cambiar entre WYSIWYG y edición de código instantáneamente mientras escribes una entrada El sistema de importación y exportación a XML facilita mover contenido entre [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wordpress.org/" title="Wordpress 2.1">WordPress 2.1</a> ya está disponible para descargar. Los cambios, traducidos directamente desde el blog de desarrollo:</p>
<ul>
<li>El autoguardado asegura que no vuelvas a perder ninguna entrada.</li>
<li>Nuestro nuevo editor te permite cambiar entre WYSIWYG y edición de código instantáneamente mientras escribes una entrada</li>
<li>El sistema de importación y exportación a XML facilita mover contenido entre distintas bitácoras WordPress.</li>
<li>Nuestro editor visual ha sido reescrito desde cero e incluye además revisión ortográfica.</li>
<li>Nueva opción de privacidad para los motores de búsqueda que permite indicar que la bitácora no debería hacer ping o ser indexada por los motores de búsqueda como Google.</li>
<li>Puedes establecer cualquier página como página de inicio del sitio, y poner las últimas entradas en otro sitio distintos, haciendo mucho más sencillo usar WordPress como sistema de gestión de contenido.</li>
<li>Código de la base de datos mucho más eficiente, más rápido que las versiones anteriores. Domas Mituzas de MySQL revisó todas nuestras consultas.</li>
<li>Los enlaces en el blogroll soportan ahora sub categorías y puedes crear nuevas categorías al vuelo.</li>
<li>Página de login rediseñada desde el proyecto Shuttle.</li>
<li>Más AJAX para acelerar el trabajo con los campos personalizados, la moderación, borrado, y otras cosas. Mi preferida es la página de comentarios, que permite aprobar o desaprobar items instantáneamente.</li>
<li>Las páginas se pueden guardar ahora como borradores o privadas.</li>
<li>La administración se ha rediseñado para cargar más rápidamente y ser más consistente visualmente.</li>
<li>El tablón (dashboard) obtiene las entradas de los feeds de forma instantánea y asíncrona.</li>
<li>Los feeds de comentarios incluyen ahora todos los comentarios, no solo los 10 últimos.</li>
<li>Mejoras en la internacionalización y soporte de lenguajes con escritura de derecha a izquierda.</li>
<li>El gestor de subidas permite gestionar fácilmente todas las imágenes, vídeos y archivos de audio subidos.</li>
<li>Se incluye una nueva versión del plugin Akismet.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2007/01/23/wordpress-21/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>MySQL 4.0 o superior para WordPress 2.1</title>
		<link>http://mundogeek.net/archivos/2007/01/19/mysql-40-o-superior-para-wordpress-21/</link>
		<comments>http://mundogeek.net/archivos/2007/01/19/mysql-40-o-superior-para-wordpress-21/#comments</comments>
		<pubDate>Fri, 19 Jan 2007 18:08:29 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linklog]]></category>
		<category><![CDATA[bitacoras]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2007/01/19/mysql-40-o-superior-para-wordpress-21/</guid>
		<description><![CDATA[WordPress 2.1 necesitará una versión de MySQL 4.0 o superior. En principio la versión 2.2 necesitará de MySQL 4.1.]]></description>
			<content:encoded><![CDATA[<p><a href="http://boren.nu/archives/2007/01/15/wordpress-21-mysql-requirements/" title="WordPress 2.1 MySQL Requirements">WordPress 2.1 necesitará una versión de MySQL 4.0 o superior. En principio la versión 2.2 necesitará de MySQL 4.1.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2007/01/19/mysql-40-o-superior-para-wordpress-21/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spam y Akismet (de nuevo)</title>
		<link>http://mundogeek.net/archivos/2006/11/13/spam-y-akismet-de-nuevo/</link>
		<comments>http://mundogeek.net/archivos/2006/11/13/spam-y-akismet-de-nuevo/#comments</comments>
		<pubDate>Mon, 13 Nov 2006 20:24:40 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bitacoras]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[weblogs]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2006/11/13/spam-y-akismet-de-nuevo/</guid>
		<description><![CDATA[¡Dios santo! Este es el número de mensajes de spam filtrados por Akismet durante las últimas 14 horas (7:29 AM &#8211; 9:15 PM). Ningún mensaje de dudoso contenido consiguió traspasar la barrera y sólo se produjo 1 falso positivo. No puedo dejar de alabar y recomendar este plugin&#8230;]]></description>
			<content:encoded><![CDATA[<p>¡Dios santo! Este es el número de mensajes de spam filtrados por <a href="http://akismet.com/" title="Akismet, un plugin antispam para distintos cms">Akismet</a> durante las últimas 14 horas (7:29 AM &#8211; 9:15 PM).</p>
<p><img src="http://mundogeek.net/wp-content/spam.png" title="Spam y akismet" alt="Spam y akismet"/></p>
<p>Ningún mensaje de dudoso contenido consiguió traspasar la barrera y sólo se produjo 1 falso positivo.</p>
<p>No puedo dejar de alabar y recomendar este plugin&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2006/11/13/spam-y-akismet-de-nuevo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>WordPress 2.0.1</title>
		<link>http://mundogeek.net/archivos/2006/02/01/wordpress-201/</link>
		<comments>http://mundogeek.net/archivos/2006/02/01/wordpress-201/#comments</comments>
		<pubDate>Wed, 01 Feb 2006 09:03:33 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bitacoras]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[weblogs]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2006/02/01/wordpress-201/</guid>
		<description><![CDATA[Aún hay gente que no ha instalado la versión 2.0 de WordPress y ya tenemos aquí la 2.0.1. En 4 semanas bien aprovechadas los desarrolladores han solucionado 114 bugs. Y no me extraña que hubiera tantos. Teniendo en cuenta lo sencillo y rápido que es actualizar a la nueva versión os recomiendo que lo hagais. [...]]]></description>
			<content:encoded><![CDATA[<p>Aún hay gente que no ha instalado la versión 2.0 de WordPress y ya tenemos aquí la 2.0.1. En 4 semanas bien aprovechadas los desarrolladores han <a href="http://trac.wordpress.org/milestone/2.0.1" title="Bugs cerrados para WordPress 2.0.1">solucionado 114 bugs</a>. Y no me extraña que hubiera tantos.</p>
<p>Teniendo en cuenta lo sencillo y rápido que es actualizar a la nueva versión os recomiendo que lo hagais.</p>
<p><a href="http://wordpress.org/download/" title="Descarga de WordPress 2.0.1">Descarga de WordPress 2.0.1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2006/02/01/wordpress-201/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cambios en los feeds. Ahora con un 50% más de FeedBurner</title>
		<link>http://mundogeek.net/archivos/2005/11/10/cambios-en-los-feeds-ahora-con-un-50-mas-de-feedburner/</link>
		<comments>http://mundogeek.net/archivos/2005/11/10/cambios-en-los-feeds-ahora-con-un-50-mas-de-feedburner/#comments</comments>
		<pubDate>Wed, 09 Nov 2005 23:10:13 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bitacora]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[feeds]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2005/11/10/cambios-en-los-feeds-ahora-con-un-50-mas-de-feedburner/</guid>
		<description><![CDATA[Echando un vistazo a las estadísticas del sitio me he fijado en que los feeds son uno de los elementos que más KBytes consumen a lo largo del mes. En concreto en lo que llevamos de mes, http://mundogeek.net/feed/ ha recibido 32.254 hits, consumiendo 470MB. Debido a esto, y por el interés de obtener alguna que [...]]]></description>
			<content:encoded><![CDATA[<p>Echando un vistazo a las estadísticas del sitio me he fijado en que los feeds son uno de los elementos que más KBytes consumen a lo largo del mes. En concreto en lo que llevamos de mes, <a href="http://mundogeek.net/feed" hreflang="es" title="Uno de los feeds de Mundo geek">http://mundogeek.net/feed/</a> ha recibido 32.254 hits, consumiendo 470MB.</p>
<p>Debido a esto, y por el interés de obtener alguna que otra estadística, hasta nuevo aviso los feeds de la bitácora se servirán a través del servicio proporcionado por <a href="http://feedburner.com/" hreflang="en-us" title="Mejora tu feed y ahorra ancho de banda">FeedBurner</a>.</p>
<p>En principio esto debería ser transparente para el usuario, ya que los feeds están redireccionados a la versión de FeedBurner gracias a <a href="http://orderedlist.com/articles/wordpress-feedburner-plugin/" hreflang="en-us" title="Redirecciona tus feeds automaticamente sin tener que modificar a mano .htaccess">WordPress FeedBurner Plugin</a> de <a href="http://orderedlist.com/about/" hreflang="en-us" title="¿Y quién es Steve Smith?">Steve Smith</a>.</p>
<p>De todas formas, os agradecería que echarais un vistazo y me comunicarais cualquier fallo que pudierais detectar <img src='http://mundogeek.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Gracias</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2005/11/10/cambios-en-los-feeds-ahora-con-un-50-mas-de-feedburner/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Instalando una aplicación en PHP: WordPress</title>
		<link>http://mundogeek.net/archivos/2005/10/17/instalando-una-aplicacion-en-php-wordpress/</link>
		<comments>http://mundogeek.net/archivos/2005/10/17/instalando-una-aplicacion-en-php-wordpress/#comments</comments>
		<pubDate>Mon, 17 Oct 2005 10:53:17 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2005/10/17/instalando-una-aplicacion-en-php-wordpress/</guid>
		<description><![CDATA[Para poder instalar WordPress, uno de los sistemas de publicación más populares del mercado, y el que utiliza esta web, necesitamos un servidor web con PHP y MySQL. Si aún no lo has hecho, echa un vistazo a los diferentes tutoriales al respecto que se han publicado ultimamente en la bitácora DNS dinámicas con No-IP [...]]]></description>
			<content:encoded><![CDATA[<p>Para poder instalar <a href="http://wordpress.org" hreflang="en-us" title="Wordpress, uno de los sistemas de publicación más populares del mercado">WordPress</a>, uno de los sistemas de publicación más populares del mercado, y el que utiliza esta web, necesitamos un servidor web con PHP y MySQL. Si aún no lo has hecho, echa un vistazo a los diferentes tutoriales al respecto que se han publicado ultimamente en la bitácora<footnote>
<ul>
<li><a href="http://mundogeek.net/archivos/2005/09/28/no-ip/" hreflang="es" title="DNS dinámicas con No-IP">DNS dinámicas con No-IP</a></li>
<li><a href="http://mundogeek.net/archivos/2005/09/30/instalar-un-servidor-web-apache" hreflang="es" title="Instalación de un servidor web: Apache">Instalar un servidor web Apache</a></li>
<li><a href="http://mundogeek.net/archivos/2005/10/15/instalar-php-y-mysql/" hreflang="es" title="Instalación de PHP y MySQL">Instalación de PHP y MySQL</a></li>
<li><a href="http://mundogeek.net/archivos/2005/10/15/acelerando-php-zend-optimizer/" hreflang="es" title="Instalación de Zend Optimizer">Acelerando PHP: Zend Optimizer</a></li>
<li><a href="http://mundogeek.net/archivos/2005/10/16/facilitando-el-uso-de-mysql-phpmyadmin/" hreflang="es" title="Facilitando el uso de MySQL: phpMyAdmin">Facilitando el uso de MySQL: phpMyAdmin</a></li>
</ul>
<p></footnote>.</p>
<p>Antes de proceder debemos crear una base de datos, para lo cual podemos utilizar phpMyAdmin, en la que WordPress almacenará información como las entradas y comentarios escritos. Crear una nueva base de datos en phpMyAdmin es tan simple como introducir un nombre para la base de datos y pulsar Create (Crear). Vamos a crear una base de datos llamada, por ejemplo, wordpress.</p>
<p><img src="http://img419.imageshack.us/img419/8893/crearbbdd9rl.png" alt="Creando una nueva base de datos en phpMyAdmin" /></p>
<p>Descargamos la <a href="http://wordpress.org/download/" hreflang="en-us" title="Sección de descargas de la web de WordPress">última versión de WordPress</a> desde su página web y descomprimimos su contenido en el DocumentRoot de Apache<footnote>El directorio en el que se encuentran los archivos que sirve Apache.</footnote>. Renombramos el archivo wp-config-sample.php a wp-config.php y lo editamos para configurar la aplicación.</p>
<p>Modificaremos los valores para el nombre de la base de datos (db_name), nuestro nombre de usuario en MySQL (db_user), nuestra contraseña en MySQL (db_password) y la dirección del PC en el que está ejecutando la base de datos (db_host) en el caso de que no esté instalada en el mismo PC en el que instalamos WordPress. Los nuevos valores serán wordpress (o el nombre que le hallamos dado a la nueva base de datos), root y la contraseña que introdujimos al instalar MySQL.</p>
<p>Abre el navegador y ejecuta el script install.php, dentro del directorio wp-admin, que a su vez se encuentra en la carpeta en la que instalamos WordPress. En mi caso, al haber copiado los archivos de wordpress en un directorio de nombre wordpress en DocumentRoot, http://localhost/wordpress/wp-admin/install.php.</p>
<p>Esto lanzará un pequeño wizard en el que se nos preguntará por el nombre de la bitácora y la dirección de correo del escritor. El script pasará entonces a crear las tablas necesarias en la base de datos que creamos anteriormente, tras lo cual podremos loguearnos utilizando el nombre de usuario y la contraseña generada automaticamente. Lo primero que deberiais hacer es cambiar la contraseña y el nick desde la pestaña Users de la interfaz de administración de WordPress.</p>
<p>Y aunque parezca demasiado sencillo, eso es todo. Ahora podeis <a href="http://wordpress-es.sourceforge.net/" hreflang="es" title="Sitio web de WordPress-es">instalar el idioma castellano</a>, o bien juguetear con alguno de los cientos de <a href="http://mundogeek.net/wiki/doku.php?id=plugins_para_wordpress" hreflang="es" title="Wiki de Mundo geek con cientos de plugins para WordPress">plugins para WordPress</a> existentes. Este es el aspecto de una nueva instalación de WordPress:</p>
<p><img src="http://img134.imageshack.us/img134/6577/wordpress2vx.png" alt="Aspecto de una nueva instalación de WordPress" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2005/10/17/instalando-una-aplicacion-en-php-wordpress/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>WordPress 1.5.1.3</title>
		<link>http://mundogeek.net/archivos/2005/06/29/wordpress-1513/</link>
		<comments>http://mundogeek.net/archivos/2005/06/29/wordpress-1513/#comments</comments>
		<pubDate>Wed, 29 Jun 2005 20:01:12 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[sotware]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2005/06/29/wordpress-1513/</guid>
		<description><![CDATA[Empieza a ser algo frustrante tener que actualizar el CMS cada pocas semanas, pero es lo que hay. La última vulnerabilidad de WordPress, CMS creado por un equipo de personas al que le vendría bien conocer el uso de diff, aún no se ha hecho pública pero parece ser bastante seria ya que podría permitir [...]]]></description>
			<content:encoded><![CDATA[<p>Empieza a ser algo frustrante tener que actualizar el CMS cada pocas semanas, pero es lo que hay. La última vulnerabilidad de WordPress, CMS creado por un equipo de personas al que le vendría bien conocer el uso de <a href="http://www.gnu.org/software/diffutils/diffutils.html">diff</a>, aún no se ha hecho pública pero parece ser bastante seria ya que podría permitir la ejecución remota de código por parte de usuarios malintencionados.</p>
<p>Si utilizais WordPress, <a href="http://wordpress.org/download/">actualizad</a>. O en todo caso, al menos, borrar el archivo xmlrpc.php del directorio raíz.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2005/06/29/wordpress-1513/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

