miércoles, 25 de abril de 2007

Controlando el ratón

Hoy he necesitado tener controlado el punto exacto en el que se encontraba el ratón al pinchar sobre los links y botones de mi aplicación. Mirando aquí y allá lo he conseguido con el siguiente código javascript:

clickY = 0;
offsetY = 0;
clickIE = document.all ? true : false;
if (!clickIE) document.captureEvents(Event.MOUSEDOWN);
document.onmousedown = md;
function md(e){
 if (clickIE) {
  if (document.documentElement && document.documentElement.scrollTop){
   offsetY = document.documentElement.scrollTop;
  }
  else{
   offsetY = document.body.scrollTop;
  }
  clickY = event.clientY + offsetY;
 }
 else {
  clickY = e.pageY;
  if (self.pageYOffset){
   offsetY = self.pageYOffset;
  }
 }
 if (clickY < 0){clickY = 0;}
 return true;
}


Con ello tenemos controlados en todo momento dos valores muy interesantes para abrir popups o menús de tipo drop down hechos con capas:

clickY, el punto en el eje Y del navegador donde se ha hecho click con el ratón
offsetY, el punto en el eje Y del navegador hasta donde se ha hecho scroll


Que aporveche¡

miércoles, 18 de abril de 2007

Envío de mails

Aunque esta información está en muchos sitios, la voy a escribir para no tener que mirarala en ningún sitio e ir a tiro hecho.

Para enviar mails desde una aplicación rails, hay que seguir los siguientes pasos:

1 - Fichero de configuración

Hay que crear el archivo mailer.rb en el directorio config de la aplicación. Éste contiene la configuración del sevidor de mail que vamos a utilizar. Por ejemplo:

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.default_charset = "utf-8"
ActionMailer::Base.server_settings = {
:address => "smtp.danimata.com",
:port => 25,
:domain => 'www.danimata.com',
:user_name => "si1329@danimata.com",
:password => "aikman11",
:authentication => :login
}

2 - Controlador

En el controlador, por ejemplo form_controller.rb, crearemos tantas acciones como consideremos necesarias. Se puede utilizar una única acción para enviar todos los mails en función de los datos recibidos o bien una por cada tipo de mail que necesitemos. Lo importante es que en estas acciones es donde se harán las comprobaciones pertienetes y se llamará a los métodos del nuestro modelo mailer.

3 - Modelo

Debe de heredar de ActionMailer::Base. Tendrá un método mail_tipo_de_mail(parametros) por cada tipo de mail a enviar. En ellos se asigna valor a las variables globales que se utilizan para el envío. Por ejemplo:

def mail_new_password(user, new_passwd)
@subject = 'Nuevo password para AutoGassi'
@recipients = user.email
@from = MAIL_FROM
@sent_on = Time.now
@headers = {}

@charset = 'utf-8'
@content_type = "text/html"

@body["email"] = user.email
@body["first_name"] = user.first_name
@body["last_name"] = user.last_name
@body["passwd"] = new_passwd
end

4 - Vista

Por cada método del modelo, existirá una vista del mismo nombre. En ellas se formatea la información como se considere oportuno. Resulta muy fácil hacerlo como HTML. Por ejemplo, mail_new_password.rhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>AutoGassi</title>
</head>
<body>
Estimad@ <%= h(@first_name) %> <%= h(@last_name) %>,

<br/>Ésta es tu nueva contraseña de acceso a la web danimata.com:

<br/>Nuevo password: <%=@passwd%>

<br/>Puedes cambiarla una vez hayas entrado en la aplicación.
</body>
</html>

Para información más detallada, consultar rubyonrails.org.

Salud.