Archive for the ‘Desarrollo’ Category

Desarrollo de aplicaciones para Facebook en PHP

Thursday, January 28th, 2010

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 + Configurar una nueva aplicacion.

Crear una nueva aplicacion

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.

Editar aplicacion en Facebook

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:

$ wget ‘http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz’
$ tar -xzvf facebook-platform.tar.gz
$ cp facebook-platform/php/facebook*.php MY_DIR

Ahora ya podemos empezar a programar, creamos un fichero index.php con los datos $appapikey y $appsecret de nuestra aplicacion.

Se puede programar libremente en php, para interactuar con Facebook podemos utilizar las llamadas a su api con la clase $facebook->api_client.

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.

Ver codigo en GitHub.

En este ejemplo para actualizar el estado see ha utilizado la llamada en JavaScript Facebook.streamPublish para no tener que solicitar permisos al usuario para actualizar su estado.

Espero que sirva a los que esten empezando :)

Modificando el formulario de búsqueda en Drupal 5.x

Monday, January 19th, 2009

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:

<?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 layout.
*/
return _phptemplate_callback('search_theme_form', array('form' => $form), array('search-theme-form'));
}
?>

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.

<label for="search_theme_form_keys">Custom Search</label>
<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" />
<input type="submit" name="op" value="Search"  />
<input type="hidden" name="form_id" id="edit-search-theme-form" value="search_theme_form" />
<input type="hidden" name="form_token" id="a-unique-id" value="<?php print drupal_get_token('search_theme_form'); ?>" />

Fuente:
Customising the search forms

Añadir soporte para Gravatar en un tema de Wordpress

Thursday, August 7th, 2008

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:

<?php if(function_exists('get_avatar')) { echo get_avatar($comment, '50'); } ?>

En el ejemplo mostraría el gravatar a un tamaño de 50px.

Para tener una idea más clara de cómo quedaría bien en tu tema puedes utilizar la extensión de Firefox MeasureIT que sirve para medir áreas dentro de una ventana de Firefox.

Espero que os sea útil ;)

Añadir un nodo a través de crontab en un módulo de Drupal 5.x

Wednesday, July 9th, 2008

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 my_module_cron() {
$node = new stdClass();
$node->type = variable_get(‘my_module_node_type’, ‘my_module’);
$options = variable_get(‘node_options_’.$node->type, FALSE);
if (is_array($options)) {
$node->status = in_array(’status’, $options) ? 1 : 0;
$node->promote = in_array(‘promote’, $options) ? 1 : 0;
$node->sticky = in_array(’sticky’, $options) ? 1 : 0;
} else {
$node->status = 1;
}
$node->uid = 1 // 1 para admin,
// 0 para anonymous,
// cualquier otro que exista
$node->title = ‘Titulo del nodo’;
$node->body = ‘Contenido del nodo’;
$node->created = time();
$node->teaser = node_teaser(‘tweet’);
node_object_prepare($node);
node_save($node);
}

Con eso debería añadir sin problemas el nodo al ejecutar el crontab :)

Hovertip: Tooltips en Drupal

Monday, June 9th, 2008

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 modules dónde tengamos instalado drupal.

Una vez instalado tenemos que activar el módulo en el panel de administración.

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.

<span hovertip=”termdefinition”>Termino</span>
<div id=”termdefinition” class=”hovertip”><h1>Titulo</h1><p>El texto que queramos</p></div>

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

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:

var hovertipConfig = {'attribute':'hovertip','showDelay': 300,'hideDelay': 700}

Utilizar scriptaculous en CakePHP

Monday, April 21st, 2008

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 </head>

if(isset($javascript)):
echo $javascript->link(‘prototype.js’);
echo $javascript->link(’scriptaculous.js?load=effects’);
endif;

Nos aseguramos de que el charset es UTF-8, si no es así lo cambiamos.

print $html->charset(‘UTF-8′);

Para probar el funcionamiento crea un nuevo controlador llamado things_controller.php con el siguiente contenido:

<?php
/**
* $Id: approot/controllers/things_controller.php
*/

class ThingsController extends AppController
{
var $name = ‘Things’;
var $helpers = array(‘Html’, ‘Javascript’, ‘Ajax’);

// we’re not going to use a model for this example, but
// it would be easy to use a database thanks to cake
var $uses = null;

/**
* initial page load
*/
function index() {
// preload dynamic data

$this->set(‘data1′, ‘content will update here’);
$this->set(‘data2′, ‘here too’);

$this->render(‘neat’);

}//index()

/**
* display content action
*
* @param int id of content to display
*/
function view($id) {

// content could come from a database, xml, etc.
$content = array(
array(’somebody is baking brownies’,
‘become a cake baker’,),
array(‘knowledge is not enough’,
‘we must also apply – bruce lee’)
);

$this->set(‘data1′, $content[$id][0]);
$this->set(‘data2′, $content[$id][1]);

// use ajax layout
$this->render(‘neat’, ‘ajax’);

}//view()

}//ThingsController
?>

Ahora creamos la vista:

<!– // approot/views/things/neat.ctp –>
<h1>Really neat stuff here</h1>
<?php
// update both divs
echo $ajax->link(‘update divs’, ‘/things/view/0′,
array(‘update’ => array(‘dynamic1′, ‘dynamic2′))
);
echo ‘ | ‘;
// use an effect
echo $ajax->link(‘blinders’, ‘/things/view/1′,
array(‘update’ => array(‘dynamic1′, ‘dynamic2′),
‘loading’ => ‘Effect.BlindDown(\’dynamic1\’)')
);
?>

<hr/>
<?php echo $ajax->div(‘dynamic1′); ?>
<h2><span><?php echo $data1; ?></span></h2>
<?php echo $ajax->divEnd(‘dynamic1′); ?>

<?php echo $ajax->div(‘dynamic2′); ?>
<h3><span><?php echo $data2; ?></span></h3>
<?php echo $ajax->divEnd(‘dynamic2′); ?>

Una vez guardados los ficheros podemos ver el resultado accediendo a la vista del controlador things en

http://localhost/things

Utilizar xajax en un módulo de drupal 5.x

Thursday, April 3rd, 2008

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 de xajax en el fichero .module y declaramos las funciones que vayamos a utilizar.

require_once(‘xajax/xajax.inc.php’ );

function myfunction()
{
//código
}

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:

function nombre_modulo_menu() {
// inicializamos xajax
$xajax = new xajax(‘/index.php’);

// registramos las funciones
$xajax->registerFunction(“myfunction”);

// incluimos el javascript en el header drupal_set_html_head($xajax->getJavascript(‘modules/nombre_modulo/xajax’));

$xajax->processRequests();
}

3. Llamamos a la función desde el contenido del módulo.

Ejemplo:

Llamada a la función desde un bloque generado por el módulo:

function nombre_modulo_block($op=’list’, $delta=0) {
if ($op == “list”) {
$block[0]["info"] = t(“Bloque xajax”);
return $block;
}
else if ($op == ‘view’) {
// contenido del bloque
$block_content = ‘<script>xajax_myfunction();</script>
// set up the block
$block['subject'] = ‘Bloque xajax’;
$block['content'] = $block_content;
return $block;
}

Utilizar PHPMailer con una cuenta de Gmail

Tuesday, December 11th, 2007

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->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->Port;
}

Ejemplo de prueba:

require_once ‘class.phpmailer.php’;

$mail = new PHPMailer ();

$mail -> From = “foo@gmail.com”;
$mail -> FromName = “Foo”;
$mail -> AddAddress (“bar@domain.com”);
$mail -> Subject = “Test”;
$mail -> Body = “<h3>From GMail!</h3>”;
$mail -> IsHTML (true);

$mail->IsSMTP();
$mail->Host = ’ssl://smtp.gmail.com’;
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->Username

Vía buayacorp

Proyecto mibolsa

Wednesday, October 31st, 2007

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 valor del símbolo que espeficiquemos, esta es la funcion para los que le pueda interesar:

function getValor($simbolo)
{
$separador = “;”;
$url = fopen(“http://es.old.finance.yahoo.com/d/quotes.csv?s=”.$simbolo.”&f=sl1d1t1c1ohgv&e=.csv”, “r”);
$data = fgetcsv($url, 4096, $separador);
fclose($url);

$datos = array(
“simbolo” => $data[0],
“ultimo” => $data[1],
“hora” => $data[2],
“fecha” => $data[3],
“variac” => $data[4],
“apertura” => $data[5],
“maximo” => $data[6],
“minimo” => $data[7],
“volumen” => $data[8]
);
return $datos;
}

Para que las alertas puedan ser enviadas debe haber un “demonio” 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 “demonio” 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 api de envio de sms de Open movilforum.

En este ejemplo los datos para el envio del sms se sacan de la bbdd de la aplicacion pero podriais introducirlos manualmente. Podeis ver el proyecto en funcionamiento en este enlace. 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. Teneis el codigo fuente del proyecto disponible en code.google.com bajo licencia GNU General Public License V2.

iGoogle-sms (Movistar)

Thursday, September 20th, 2007

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 utilizar un teclado de verdad :P

Para añadirlo haz clic aquí.

Más información en la web de open.movilforum.com