<?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>tru3n0 &#187; Desarrollo</title>
	<atom:link href="http://tru3n0.com/category/desarrollo/feed/" rel="self" type="application/rss+xml" />
	<link>http://tru3n0.com</link>
	<description>Blog personal de Albert Oliva.</description>
	<lastBuildDate>Wed, 23 Jun 2010 07:40:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language></language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Desarrollo de aplicaciones para Facebook en PHP</title>
		<link>http://tru3n0.com/2010/01/28/desarrollo-de-aplicaciones-para-facebook-en-php/</link>
		<comments>http://tru3n0.com/2010/01/28/desarrollo-de-aplicaciones-para-facebook-en-php/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 01:17:13 +0000</pubDate>
		<dc:creator>tru3n0</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://tru3n0.com/?p=269</guid>
		<description><![CDATA[Lo primero que debemos tener en cuenta esque Facebook no hospeda las aplicaciones, asi que tenemos que buscar un hosting con soporte PHP5. En la pagina para desarrolladores Facebook propone a algunos de sus partners.
Ahora ya podemos crear la aplicacion en Facebook, para ello vamos a la pagina de desarrolladores y hacemos clic en + [...]]]></description>
			<content:encoded><![CDATA[<p>Lo primero que debemos tener en cuenta esque Facebook no hospeda las aplicaciones, asi que tenemos que buscar un hosting con soporte PHP5. En la pagina para desarrolladores Facebook propone a algunos de sus partners.</p>
<p>Ahora ya podemos crear la aplicacion en Facebook, para ello vamos a la pagina de desarrolladores y hacemos clic en + Configurar una nueva aplicacion.</p>
<p><img class="alignnone size-full wp-image-283" title="Configurar nueva aplicacion" src="http://tru3n0.com/wp-content/uploads/2010/01/nueva-aplicacion.png" alt="Crear una nueva aplicacion" width="279" height="42" /></p>
<p>Una vez que haya aparecido las opciones para la nueva aplicacion lo mas importante es configurar la url donde tenemos el hosting y la url de la pagina en Facebook, para ello vamos a la seccion lienzo y configuramos el campo Canvas Callback URL y la Pagina URL en blanco.</p>
<p><img class="alignnone size-full wp-image-282" title="Editar Lienzo" src="http://tru3n0.com/wp-content/uploads/2010/01/editar-aplicacion.png" alt="Editar aplicacion en Facebook" width="473" height="158" /></p>
<p>Creada la aplicacion, tenemos que descargar la libreria cliente para PHP y copiar las librerias al directorio de la aplicacion, en linux tecleamos lo siguiente:</p>
<blockquote><p>$ wget &#8216;http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz&#8217;<br />
$ tar -xzvf facebook-platform.tar.gz<br />
$ cp facebook-platform/php/facebook*.php MY_DIR</p></blockquote>
<p>Ahora ya podemos empezar a programar, creamos un fichero index.php con los datos $appapikey y $appsecret de nuestra aplicacion.</p>
<p>Se puede programar libremente en php, para interactuar con Facebook podemos utilizar las llamadas a su api con la clase <strong>$facebook-&gt;api_client</strong>.</p>
<p>Para ilustrar esto, el siguiente es el codigo de la aplicacion de ejemplo Paul Atreides Quotes, que seria el tipo de aplicacion mas facil de programar para Facebook, las aplicaciones de frases.</p>
<p>Ver <a href="http://github.com/tru3n0/paulatreides-fb/blob/master/index.php" onclick="pageTracker._trackPageview('/outgoing/github.com/tru3n0/paulatreides-fb/blob/master/index.php?referer=');">codigo en GitHub</a>.</p>
<p>En este ejemplo para actualizar el estado see ha utilizado la llamada en JavaScript <strong>Facebook.streamPublish</strong> para no tener que solicitar permisos al usuario para actualizar su estado.</p>
<p>Espero que sirva a los que esten empezando <img src='http://tru3n0.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tru3n0.com/2010/01/28/desarrollo-de-aplicaciones-para-facebook-en-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modificando el formulario de búsqueda en Drupal 5.x</title>
		<link>http://tru3n0.com/2009/01/19/modificando-el-formulario-de-busqueda-en-drupal-5x/</link>
		<comments>http://tru3n0.com/2009/01/19/modificando-el-formulario-de-busqueda-en-drupal-5x/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 16:23:40 +0000</pubDate>
		<dc:creator>tru3n0</dc:creator>
				<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://tru3n0.com/?p=202</guid>
		<description><![CDATA[Para modificar el formulario de búsqueda en un tema de Drupal 5, primero hay que añadir la función que llame a la nueva plantilla en el fichero template.php, para ello añadimos el siguiente código:

&#60;?php
function phptemplate_search_theme_form($form) {
/**
* This snippet catches the default searchbox and looks for
* search-theme-form.tpl.php file in the same folder
* which has the new [...]]]></description>
			<content:encoded><![CDATA[<p>Para modificar el formulario de búsqueda en un tema de Drupal 5, primero hay que añadir la función que llame a la nueva plantilla en el fichero template.php, para ello añadimos el siguiente código:</p>
<blockquote>
<div class="codeblock"><code><span style="color: #000000;"><span style="color: #0000bb;">&lt;?php<br />
</span><span style="color: #007700;">function </span><span style="color: #0000bb;">phptemplate_search_theme_form</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$form</span><span style="color: #007700;">) {<br />
</span><span style="color: #ff8000;">/**<br />
* This snippet catches the default searchbox and looks for<br />
* search-theme-form.tpl.php file in the same folder<br />
* which has the new layout.<br />
*/<br />
</span><span style="color: #007700;">return </span><span style="color: #0000bb;">_phptemplate_callback</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'search_theme_form'</span><span style="color: #007700;">, array(</span><span style="color: #dd0000;">'form' </span><span style="color: #007700;">=&gt; </span><span style="color: #0000bb;">$form</span><span style="color: #007700;">), array(</span><span style="color: #dd0000;">'search-theme-form'</span><span style="color: #007700;">));<br />
}<br />
</span><span style="color: #0000bb;">?&gt;</span></span></code></div>
</blockquote>
<p>Despues creamos un fichero nuevo en el directorio del tema llamado search-theme-form.tpl.php y añadimos el siguiente código que modificaremos a nuestro antojo.</p>
<blockquote><p><code>&lt;label for="search_theme_form_keys"&gt;Custom Search&lt;/label&gt;<br />
&lt;input type="text" maxlength="128" name="search_theme_form_keys" id="edit-search_theme_form_keys"  size="25" value="" title="Enter the terms you wish to search for." class="form-text" /&gt;<br />
&lt;input type="submit" name="op" value="Search"  /&gt;<br />
&lt;input type="hidden" name="form_id" id="edit-search-theme-form" value="search_theme_form" /&gt;<br />
&lt;input type="hidden" name="form_token" id="a-unique-id" value="<span style="color: #000000;"><span style="color: #0000bb;">&lt;?php </span><span style="color: #007700;">print </span><span style="color: #0000bb;">drupal_get_token</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'search_theme_form'</span><span style="color: #007700;">); </span><span style="color: #0000bb;">?&gt;</span></span>" /&gt;</code></p></blockquote>
<p>Fuente:<br />
<a href="http://drupal.org/node/45295" onclick="pageTracker._trackPageview('/outgoing/drupal.org/node/45295?referer=');">Customising the search forms</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tru3n0.com/2009/01/19/modificando-el-formulario-de-busqueda-en-drupal-5x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Añadir soporte para Gravatar en un tema de Wordpress</title>
		<link>http://tru3n0.com/2008/08/07/anadir-soporte-para-gravatar-en-un-tema-de-wordpress/</link>
		<comments>http://tru3n0.com/2008/08/07/anadir-soporte-para-gravatar-en-un-tema-de-wordpress/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 19:58:03 +0000</pubDate>
		<dc:creator>tru3n0</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[gravatar]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://tru3n0.com/?p=154</guid>
		<description><![CDATA[Desde la versión 2.5 de wordpress se ha incluido la funcion nativa get_avatar() básicamente esta función chequea si tienes un gravatar y lo muestra en un cuadrado del tamaño que le especifiques.
El código habría que incluirlo dentro del loop que muestra los comentarios y es el siguiente:
&#60;?php if(function_exists('get_avatar')) { echo get_avatar($comment, '50'); } ?&#62;
En el [...]]]></description>
			<content:encoded><![CDATA[<p>Desde la versión 2.5 de wordpress se ha incluido la funcion nativa get_avatar() básicamente esta función chequea si tienes un gravatar y lo muestra en un cuadrado del tamaño que le especifiques.</p>
<p>El código habría que incluirlo dentro del loop que muestra los comentarios y es el siguiente:</p>
<blockquote><p><code>&lt;?php if(function_exists('get_avatar')) { echo get_avatar($comment, '50'); } ?&gt;</code></p></blockquote>
<p>En el ejemplo mostraría el gravatar a un tamaño de 50px.</p>
<p>Para tener una idea más clara de cómo quedaría bien en tu tema puedes utilizar la extensión de Firefox <a href="http://www.kevinfreitas.net/extensions/measureit/" onclick="pageTracker._trackPageview('/outgoing/www.kevinfreitas.net/extensions/measureit/?referer=');">MeasureIT</a> que sirve para medir áreas dentro de una ventana de Firefox.</p>
<p>Espero que os sea útil <img src='http://tru3n0.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tru3n0.com/2008/08/07/anadir-soporte-para-gravatar-en-un-tema-de-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Añadir un nodo a través de crontab en un módulo de Drupal 5.x</title>
		<link>http://tru3n0.com/2008/07/09/anadir-un-nodo-a-traves-de-crontab-en-un-modulo-de-drupal-5x/</link>
		<comments>http://tru3n0.com/2008/07/09/anadir-un-nodo-a-traves-de-crontab-en-un-modulo-de-drupal-5x/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 12:35:21 +0000</pubDate>
		<dc:creator>tru3n0</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://tru3n0.com/?p=140</guid>
		<description><![CDATA[Esto puede servirnos para un agregador de noticias por ejemplo. Si ya conoces mas o menos la estructura de los módulos de drupal, previamente tendrías que tener definido un tipo de contenido espécifico para el módulo, o seleccionar alguno que ya exista como las entradas de blog.
El código es sencillo, lo insertamos en el hook_cron():
function [...]]]></description>
			<content:encoded><![CDATA[<p>Esto puede servirnos para un agregador de noticias por ejemplo. Si ya conoces mas o menos la estructura de los módulos de drupal, previamente tendrías que tener definido un tipo de contenido espécifico para el módulo, o seleccionar alguno que ya exista como las entradas de blog.</p>
<p>El código es sencillo, lo insertamos en el hook_cron():</p>
<blockquote><p>function my_module_cron() {<br />
	$node = new stdClass();<br />
	$node-&gt;type = variable_get(&#8216;my_module_node_type&#8217;, &#8216;my_module&#8217;);<br />
	$options = variable_get(&#8216;node_options_&#8217;.$node-&gt;type, FALSE);<br />
	if (is_array($options)) {<br />
		$node-&gt;status = in_array(&#8217;status&#8217;, $options) ? 1 : 0;<br />
		$node-&gt;promote = in_array(&#8216;promote&#8217;, $options) ? 1 : 0;<br />
		$node-&gt;sticky = in_array(&#8217;sticky&#8217;, $options) ? 1 : 0;<br />
		} else {<br />
		$node-&gt;status = 1;<br />
		}<br />
		$node-&gt;uid = 1 // 1 para admin,<br />
				// 0 para anonymous,<br />
				// cualquier otro que exista<br />
		$node-&gt;title = &#8216;Titulo del nodo&#8217;;<br />
		$node-&gt;body = &#8216;Contenido del nodo&#8217;;<br />
		$node-&gt;created = time();<br />
		$node-&gt;teaser = node_teaser(&#8216;tweet&#8217;);<br />
		node_object_prepare($node);<br />
		node_save($node);<br />
}</p></blockquote>
<p>Con eso debería añadir sin problemas el nodo al ejecutar el crontab <img src='http://tru3n0.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tru3n0.com/2008/07/09/anadir-un-nodo-a-traves-de-crontab-en-un-modulo-de-drupal-5x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hovertip: Tooltips en Drupal</title>
		<link>http://tru3n0.com/2008/06/09/hovertip-tooltips-en-drupal/</link>
		<comments>http://tru3n0.com/2008/06/09/hovertip-tooltips-en-drupal/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 14:39:43 +0000</pubDate>
		<dc:creator>tru3n0</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://tru3n0.com/?p=137</guid>
		<description><![CDATA[Un tooltip es ese texto de ayuda que aparece al poner el ratón encima de algún elemento de una página web, aunque los usos pueden ser diversos.
En drupal hay varios módulos que permiten utilizar tooltips, uno de ellos es Hovertips and Clicktips.
Se instala cómo cualquier otro módulo, descargamos y descomprimimos el fichero en la carpeta [...]]]></description>
			<content:encoded><![CDATA[<p>Un tooltip es ese texto de ayuda que aparece al poner el ratón encima de algún elemento de una página web, aunque los usos pueden ser diversos.</p>
<p>En drupal hay varios módulos que permiten utilizar tooltips, uno de ellos es <a href="http://drupal.org/project/hovertip" onclick="pageTracker._trackPageview('/outgoing/drupal.org/project/hovertip?referer=');">Hovertips and Clicktips.</a></p>
<p>Se instala cómo cualquier otro módulo, descargamos y descomprimimos el fichero en la carpeta modules dónde tengamos instalado drupal.</p>
<p>Una vez instalado tenemos que activar el módulo en el panel de administración.</p>
<p>Para hacer una prueba de cómo quedaría un tooltip podemos crear una página nueva y escribir el siguiente código html. Es necesario cambiar el formato de entrada a full html.</p>
<blockquote><p>&lt;span hovertip=&#8221;termdefinition&#8221;&gt;Termino&lt;/span&gt;<br />
&lt;div id=&#8221;termdefinition&#8221; class=&#8221;hovertip&#8221;&gt;&lt;h1&gt;Titulo&lt;/h1&gt;&lt;p&gt;El texto que queramos&lt;/p&gt;&lt;/div&gt;</p></blockquote>
<p>La plantilla que trae por defecto no es muy atractiva, es recomendable modificarla un poco, se encuentra en la carpeta del módulo y se llama hovertip.css</p>
<p>Otra cosa que no me gusta mucho esque por defecto trae un delay de 700ms, esto se puede cambiar editando el fichero hovertip.js y modificando la siguiente sección:<br />
<code><br />
var hovertipConfig = {'attribute':'hovertip','showDelay': 300,'hideDelay': 700}</code></p>
]]></content:encoded>
			<wfw:commentRss>http://tru3n0.com/2008/06/09/hovertip-tooltips-en-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizar scriptaculous en CakePHP</title>
		<link>http://tru3n0.com/2008/04/21/utilizar-scriptaculous-en-cakephp/</link>
		<comments>http://tru3n0.com/2008/04/21/utilizar-scriptaculous-en-cakephp/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 21:48:55 +0000</pubDate>
		<dc:creator>tru3n0</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Desarrollo]]></category>

		<guid isPermaLink="false">http://www.tru3n0.com/?p=103</guid>
		<description><![CDATA[Los efectos de Scriptaculous son fáciles de implementar en CakePHP. En la página de descargas de Scriptaculous puedes descargar la última versión de las librerias.
Para implementarlo en CakePHP, primero tenemos que copiar las librerias necesarias (prototype.js, effects.js, scriptaculous.js) en el directorio /app/webroot/js
Una vez copiadas tenemos que cargarlas en la plantilla /app/views/layouts/default.ctp antes del tag &#60;/head&#62;
if(isset($javascript)):
echo [...]]]></description>
			<content:encoded><![CDATA[<p>Los efectos de <a href="http://script.aculo.us/" onclick="pageTracker._trackPageview('/outgoing/script.aculo.us/?referer=');">Scriptaculous</a> son fáciles de implementar en <a href="http://www.cakephp.org/" onclick="pageTracker._trackPageview('/outgoing/www.cakephp.org/?referer=');">CakePHP.</a> En la página de <a href="http://script.aculo.us/downloads" onclick="pageTracker._trackPageview('/outgoing/script.aculo.us/downloads?referer=');">descargas de Scriptaculous</a> puedes descargar la última versión de las librerias.</p>
<p>Para implementarlo en CakePHP, primero tenemos que copiar las librerias necesarias (prototype.js, effects.js, scriptaculous.js) en el directorio /app/webroot/js</p>
<p>Una vez copiadas tenemos que cargarlas en la plantilla /app/views/layouts/default.ctp antes del tag &lt;/head&gt;</p>
<blockquote><p>if(isset($javascript)):<br />
echo $javascript-&gt;link(&#8216;prototype.js&#8217;);<br />
echo $javascript-&gt;link(&#8217;scriptaculous.js?load=effects&#8217;);<br />
endif;</p></blockquote>
<p>Nos aseguramos de que el charset es UTF-8, si no es así lo cambiamos.</p>
<blockquote><p>print $html-&gt;charset(&#8216;UTF-8&#8242;);</p></blockquote>
<p>Para probar el funcionamiento crea un nuevo controlador llamado things_controller.php con el siguiente contenido:</p>
<blockquote><p>&lt;?php<br />
/**<br />
* $Id: approot/controllers/things_controller.php<br />
*/</p>
<p>class ThingsController extends AppController<br />
{<br />
var $name = &#8216;Things&#8217;;<br />
var $helpers = array(&#8216;Html&#8217;, &#8216;Javascript&#8217;, &#8216;Ajax&#8217;);</p>
<p>// we&#8217;re not going to use a model for this example, but<br />
// it would be easy to use a database thanks to cake<br />
var $uses = null;</p>
<p>/**<br />
* initial page load<br />
*/<br />
function index() {<br />
// preload dynamic data</p>
<p>$this-&gt;set(&#8216;data1&#8242;, &#8216;content will update here&#8217;);<br />
$this-&gt;set(&#8216;data2&#8242;, &#8216;here too&#8217;);</p>
<p>$this-&gt;render(&#8216;neat&#8217;);</p>
<p>}//index()</p>
<p>/**<br />
* display content action<br />
*<br />
* @param int id of content to display<br />
*/<br />
function view($id) {</p>
<p>// content could come from a database, xml, etc.<br />
$content = array(<br />
array(&#8217;somebody is baking brownies&#8217;,<br />
&#8216;become a cake baker&#8217;,),<br />
array(&#8216;knowledge is not enough&#8217;,<br />
&#8216;we must also apply &#8211; bruce lee&#8217;)<br />
);</p>
<p>$this-&gt;set(&#8216;data1&#8242;, $content[$id][0]);<br />
$this-&gt;set(&#8216;data2&#8242;, $content[$id][1]);</p>
<p>// use ajax layout<br />
$this-&gt;render(&#8216;neat&#8217;, &#8216;ajax&#8217;);</p>
<p>}//view()</p>
<p>}//ThingsController<br />
?&gt;</p></blockquote>
<p>Ahora creamos la vista:</p>
<blockquote><p>&lt;!&#8211; // approot/views/things/neat.ctp &#8211;&gt;<br />
&lt;h1&gt;Really neat stuff here&lt;/h1&gt;<br />
&lt;?php<br />
// update both divs<br />
echo $ajax-&gt;link(&#8216;update divs&#8217;, &#8216;/things/view/0&#8242;,<br />
array(&#8216;update&#8217; =&gt; array(&#8216;dynamic1&#8242;, &#8216;dynamic2&#8242;))<br />
);<br />
echo &#8216; | &#8216;;<br />
// use an effect<br />
echo $ajax-&gt;link(&#8216;blinders&#8217;, &#8216;/things/view/1&#8242;,<br />
array(&#8216;update&#8217; =&gt; array(&#8216;dynamic1&#8242;, &#8216;dynamic2&#8242;),<br />
&#8216;loading&#8217; =&gt; &#8216;Effect.BlindDown(\&#8217;dynamic1\&#8217;)')<br />
);<br />
?&gt;</p>
<p>&lt;hr/&gt;<br />
&lt;?php echo $ajax-&gt;div(&#8216;dynamic1&#8242;); ?&gt;<br />
&lt;h2&gt;&lt;span&gt;&lt;?php echo $data1; ?&gt;&lt;/span&gt;&lt;/h2&gt;<br />
&lt;?php echo $ajax-&gt;divEnd(&#8216;dynamic1&#8242;); ?&gt;</p>
<p>&lt;?php echo $ajax-&gt;div(&#8216;dynamic2&#8242;); ?&gt;<br />
&lt;h3&gt;&lt;span&gt;&lt;?php echo $data2; ?&gt;&lt;/span&gt;&lt;/h3&gt;<br />
&lt;?php echo $ajax-&gt;divEnd(&#8216;dynamic2&#8242;); ?&gt;</p></blockquote>
<p>Una vez guardados los ficheros podemos ver el resultado accediendo a la vista del controlador things en</p>
<p>http://localhost/things</p>
]]></content:encoded>
			<wfw:commentRss>http://tru3n0.com/2008/04/21/utilizar-scriptaculous-en-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizar xajax en un módulo de drupal 5.x</title>
		<link>http://tru3n0.com/2008/04/03/utilizar-xajax-en-un-modulo-de-drupal-5x/</link>
		<comments>http://tru3n0.com/2008/04/03/utilizar-xajax-en-un-modulo-de-drupal-5x/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 15:29:00 +0000</pubDate>
		<dc:creator>tru3n0</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://www.tru3n0.com/?p=102</guid>
		<description><![CDATA[Hoy he tenido que desarrollar un módulo para Drupal utilizando xajax, después de un rato investigando por fin he conseguido hacerlo funcionar, os explicó aquí cómo hacerlo y lo dejo anotado para futuros módulos.
Es bastante sencillo, primero tenemos que descargar la versión estable de xajax y descomprimirla en el directorio del plugin.
1. Incluímos la clase [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy he tenido que desarrollar un módulo para Drupal utilizando xajax, después de un rato investigando por fin he conseguido hacerlo funcionar, os explicó aquí cómo hacerlo y lo dejo anotado para futuros módulos.</p>
<p>Es bastante sencillo, primero tenemos que descargar la versión estable de <a href="http://xajaxproject.org/" onclick="pageTracker._trackPageview('/outgoing/xajaxproject.org/?referer=');">xajax</a> y descomprimirla en el directorio del plugin.</p>
<p>1. Incluímos la clase de xajax en el fichero <em>.module </em>y declaramos las funciones que vayamos a utilizar.<em><br />
</em></p>
<blockquote><p>require_once(&#8216;xajax/xajax.inc.php&#8217; );</p>
<p>function myfunction()<br />
{<br />
//código<br />
}</p></blockquote>
<p>2. Módificamos o añadimos el hook_menu(), con esta función podemos modificar el header de la página y así poder incluir la llamada al javascript:</p>
<blockquote><p>function nombre_modulo_menu() {<br />
// inicializamos xajax<br />
$xajax = new xajax(&#8216;/index.php&#8217;);</p>
<p>// registramos las funciones<br />
$xajax-&gt;registerFunction(&#8220;myfunction&#8221;);</p>
<p>// incluimos el javascript en el header     drupal_set_html_head($xajax-&gt;getJavascript(&#8216;modules/nombre_modulo/xajax&#8217;));</p>
<p>$xajax-&gt;processRequests();<br />
}</p></blockquote>
<p>3. Llamamos a la función desde el contenido del módulo.</p>
<p>Ejemplo:</p>
<p>Llamada a la función desde un bloque generado por el módulo:</p>
<blockquote><p>function nombre_modulo_block($op=&#8217;list&#8217;, $delta=0) {<br />
if ($op == &#8220;list&#8221;) {<br />
$block[0]["info"] = t(&#8220;Bloque xajax&#8221;);<br />
return $block;<br />
}<br />
else if ($op == &#8216;view&#8217;) {<br />
// contenido del bloque<br />
$block_content = &#8216;&lt;script&gt;xajax_myfunction();&lt;/script&gt;<br />
// set up the block<br />
$block['subject'] = &#8216;Bloque xajax&#8217;;<br />
$block['content'] = $block_content;<br />
return $block;<br />
}</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://tru3n0.com/2008/04/03/utilizar-xajax-en-un-modulo-de-drupal-5x/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Utilizar PHPMailer con una cuenta de Gmail</title>
		<link>http://tru3n0.com/2007/12/11/phpmailer-con-gmail/</link>
		<comments>http://tru3n0.com/2007/12/11/phpmailer-con-gmail/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 11:59:02 +0000</pubDate>
		<dc:creator>tru3n0</dc:creator>
				<category><![CDATA[Desarrollo]]></category>

		<guid isPermaLink="false">http://www.tru3n0.com/index.php/2007/12/11/phpmailer-con-gmail/</guid>
		<description><![CDATA[Hay que hacer algunos cambios en el fichero class.phpmailer.php en la línea 573 para poder utilizar SSL/TLS
# Original
if(strstr($hosts[$index], “:”))
list($host, $port) = explode(“:”, $hosts[$index]);
else
{
$host = $hosts[$index];
$port = $this-&#62;Port;
# Modificación
if (preg_match(‘#(([a-z]+://)?[^:]+):(\d+)#i’, $hosts[$index], $match))
{
$host = $match[1];
$port = $match[3];
}
else
{
$host = $hosts[$index];
$port = $this-&#62;Port;
}
Ejemplo de prueba:

require_once ‘class.phpmailer.php’;
$mail = new PHPMailer ();
$mail -&#62; From = “foo@gmail.com”;
$mail -&#62; FromName = “Foo”;
$mail -&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Hay que hacer algunos cambios en el fichero class.phpmailer.php en la línea 573 para poder utilizar SSL/TLS</p>
<blockquote><p># Original<br />
if(strstr($hosts[$index], “:”))<br />
list($host, $port) = explode(“:”, $hosts[$index]);<br />
else<br />
{<br />
$host = $hosts[$index];<br />
$port = $this-&gt;Port;</p></blockquote>
<blockquote><p># Modificación<br />
if (preg_match(‘#(([a-z]+://)?[^:]+):(\d+)#i’, $hosts[$index], $match))<br />
{<br />
$host = $match[1];<br />
$port = $match[3];<br />
}<br />
else<br />
{<br />
$host = $hosts[$index];<br />
$port = $this-&gt;Port;<br />
}</p></blockquote>
<p>Ejemplo de prueba:</p>
<blockquote><p>
require_once ‘class.phpmailer.php’;</p>
<p>$mail = new PHPMailer ();</p>
<p>$mail -&gt; From = “foo@gmail.com”;<br />
$mail -&gt; FromName = “Foo”;<br />
$mail -&gt; AddAddress (“bar@domain.com”);<br />
$mail -&gt; Subject = “Test”;<br />
$mail -&gt; Body = “&lt;h3&gt;From GMail!&lt;/h3&gt;”;<br />
$mail -&gt; IsHTML (true);</p>
<p>$mail-&gt;IsSMTP();<br />
$mail-&gt;Host = ’ssl://smtp.gmail.com’;<br />
$mail-&gt;Port = 465;<br />
$mail-&gt;SMTPAuth = true;<br />
$mail-&gt;Username</p></blockquote>
<p>Vía <a href="http://www.buayacorp.com/archivos/phpmailer-con-gmail/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.buayacorp.com/archivos/phpmailer-con-gmail/?referer=');">buayacorp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tru3n0.com/2007/12/11/phpmailer-con-gmail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Proyecto mibolsa</title>
		<link>http://tru3n0.com/2007/10/31/proyecto-mibolsa/</link>
		<comments>http://tru3n0.com/2007/10/31/proyecto-mibolsa/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 14:48:52 +0000</pubDate>
		<dc:creator>tru3n0</dc:creator>
				<category><![CDATA[Desarrollo]]></category>

		<guid isPermaLink="false">http://www.tru3n0.com/index.php/2007/10/31/proyecto-mibolsa/</guid>
		<description><![CDATA[
Hoy he terminado la primera versión (beta) de este proyecto que estoy haciendo para Open movilforum. Se trata de una aplicacion web en PHP + MySQL con la que podemos crear alertas de bolsa y recibirlas en el móvil cuando se cumplan. Para ello se conecta al feed de Yahoo Finances y descarga el último [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.mibolsa20.com/img/logo.png" alt="" /></p>
<p>Hoy he terminado la primera versión (beta) de este proyecto que estoy haciendo para <a href="http://open.movilforum.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/open.movilforum.com?referer=');">Open movilforum.</a> Se trata de una aplicacion web en PHP + MySQL con la que podemos crear alertas de bolsa y recibirlas en el móvil cuando se cumplan. Para ello se conecta al feed de Yahoo Finances y descarga el último valor del símbolo que espeficiquemos, esta es la funcion para los que le pueda interesar:</p>
<blockquote><p>function getValor($simbolo)<br />
{<br />
$separador = &#8220;;&#8221;;<br />
$url = fopen(&#8220;http://es.old.finance.yahoo.com/d/quotes.csv?s=&#8221;.$simbolo.&#8221;&amp;f=sl1d1t1c1ohgv&amp;e=.csv&#8221;, &#8220;r&#8221;);<br />
$data = fgetcsv($url, 4096, $separador);<br />
fclose($url);</p>
<p>$datos = array(<br />
&#8220;simbolo&#8221;  =&gt; $data[0],<br />
&#8220;ultimo&#8221;   =&gt; $data[1],<br />
&#8220;hora&#8221;    =&gt; $data[2],<br />
&#8220;fecha&#8221;  =&gt; $data[3],<br />
&#8220;variac&#8221;   =&gt; $data[4],<br />
&#8220;apertura&#8221; =&gt; $data[5],<br />
&#8220;maximo&#8221;   =&gt; $data[6],<br />
&#8220;minimo&#8221;   =&gt; $data[7],<br />
&#8220;volumen&#8221;  =&gt; $data[8]<br />
);<br />
return $datos;<br />
}</p></blockquote>
<p>Para que las alertas puedan ser enviadas debe haber un &#8220;demonio&#8221; corriendo continuamente en la máquina, en este caso es un cron que se ejecuta cada cierto tiempo ya que si no yahoo corta el trafico hacia esa ip si detecta demasiadas conexiones. Este &#8220;demonio&#8221; comprueba las alertas definidas por los usuarios con los valores sacados de la función anterior y envía las alertas por sms utilizando el <a href="http://open.movilforum.com/ihttpes" target="_blank" onclick="pageTracker._trackPageview('/outgoing/open.movilforum.com/ihttpes?referer=');">api  de envio de sms de Open movilforum</a>.</p>
<p>En este ejemplo los datos para el envio del sms se sacan de la bbdd de la aplicacion pero podriais introducirlos manualmente. <a href="http://mibolsa20.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/mibolsa20.com?referer=');">Podeis ver el proyecto en funcionamiento en este enlace</a>. Recordad que si os registrais, teneis que enviar un mensaje al 770 con vuestro móvil indicando una clave que será la que se utilizará para enviar sms a través del api, este API nos cobra los mensajes envíados a nuestro móvil y solo funciona con movistar. <a href="http://code.google.com/p/mibolsa" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/mibolsa?referer=');">Teneis el codigo fuente del proyecto disponible en code.google.com</a> bajo licencia GNU General Public License V2.<a href="http://code.google.com/p/mibolsa" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/mibolsa?referer=');"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tru3n0.com/2007/10/31/proyecto-mibolsa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iGoogle-sms (Movistar)</title>
		<link>http://tru3n0.com/2007/09/20/igoogle-sms-movistar/</link>
		<comments>http://tru3n0.com/2007/09/20/igoogle-sms-movistar/#comments</comments>
		<pubDate>Thu, 20 Sep 2007 14:42:50 +0000</pubDate>
		<dc:creator>tru3n0</dc:creator>
				<category><![CDATA[Desarrollo]]></category>

		<guid isPermaLink="false">http://www.tru3n0.com/?p=44</guid>
		<description><![CDATA[Gadget para iGoogle que te permite enviar mensajes a móviles.

Solo tienes que enviar un mensaje al 770 con una clave. Despues tienes que hacer clic sobre editar configuración e introducir esta clave. A partir de ese momento todos los mensajes que envies desde iGoogle te los cobrarán a tu número pero con la comodidad de [...]]]></description>
			<content:encoded><![CDATA[<p>Gadget para iGoogle que te permite enviar mensajes a móviles.</p>
<p><img src="http://open.movilforum.com/wiki/images/6/6f/Igoogle_sms_editar.jpg" height="192" width="347" /></p>
<p>Solo tienes que enviar un mensaje al 770 con una clave. Despues tienes que hacer clic sobre editar configuración e introducir esta clave. A partir de ese momento todos los mensajes que envies desde iGoogle te los cobrarán a tu número pero con la comodidad de utilizar un teclado de verdad <img src='http://tru3n0.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Para añadirlo haz clic <a href="http://www.google.es/ig/add?moduleurl=http://igoogle-sms.googlecode.com/svn/trunk/igoogle-sms.xml&amp;source=imag" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.google.es/ig/add?moduleurl=http_//igoogle-sms.googlecode.com/svn/trunk/igoogle-sms.xml_amp_source=imag&amp;referer=');">aquí</a>.</p>
<p>Más información en la web  de <a href="http://open.movilforum.com/node/100" onclick="pageTracker._trackPageview('/outgoing/open.movilforum.com/node/100?referer=');">open.movilforum.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tru3n0.com/2007/09/20/igoogle-sms-movistar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced) (user agent is rejected)

Served from: tru3n0.com @ 2010-09-09 11:52:30 -->