Commits

christiansalazar committed 7a53ca7

acerca de crugemailer

Comments (0)

Files changed (1)

 
 Debido a lo extenso de Cruge no he tenido tiempo de documentar bien estos filtros, pero es bastante intuitivo.
 
+##Cruge y Los Correos (El componente CrugeMailer).
+
+En primer lugar olvida por completo el hecho de que Cruge llame a mail() por todos lados para enviar un email. Eso sería un error de diseńo, por tanto, el uso de emails esta fuertemente modelado usando un componente llamado crugemailer, el cual es accedido desde dentro de cruge asi:  Yii::app()->crugemailer. Puedes ampliar el conocimiento acerca de CrugeMailer leyendo: [https://github.com/yiiframeworkenespanol/crugemailer](https://github.com/yiiframeworkenespanol/crugemailer "https://github.com/yiiframeworkenespanol/crugemailer")
+
+CrugeMailer se configura asi (ya lo hiciste al configurar a Cruge al inicio) :
+
+			'crugemailer'=>array(
+				'class' => 'application.modules.cruge.components.CrugeMailer',
+				'mailfrom' => 'email-desde-donde-quieres-enviar-los-mensajes@xxxx.com',
+				'subjectprefix' => 'Tu Encabezado del asunto - ',
+				'debug' => true,
+			),
+
+como bien habrás imaginado, podrás usar a Yii::app()->crugemailer desde toda tu aplicación, no solo Cruge, para eso fue diseńado. Lo primero que debes comprender acerca de CrugeMailer es que es un componente que envia correos "en base a vistas de Yii", es decir, se crea una vista y se le indica a CrugeMailer que mande ese correo a un destinatario de la misma manera en como tu renderizarias una vista en Yii.
+
+Caso de ejemplo:
+
+1. Quieres crear un nuevo correo especifico basado en una vista, por tanto, creas una clase
+que extienda de CrugeMailer, la llamarias por ejemplo: "MiClaseCrugeMailer" y supon que la guardas en tu directorio de 'protected/components/MiClaseCrugeMailer.php' (!!no dentro de cruge module!!)
+
+2. Esta clase contendria un nuevo metodo llamado "nuevoCorreoAlCliente", he aqui la bondad de CrugeMailer, te permite "modelar la solucion" dandole a ese metodo un nombre coherente con aquello que quieres hacer, eso hace que tu codigo sea ordenado y siempre sabras que hace, además de poder reutilizarlo en cualquier mommento.
+
+3. En "config/main" le indicarías al componente crugemailer que use esa nueva clase en vez de la que viene por defecto. Se cambiaria por: 'class' => 'application.components.MiClaseCrugeMailer',
+
+Para invocar esa funcion tu solo harías lo siguiente:
+
+		Yii::app()->crugemailer->nuevoCorreoAlCliente($usuarioSeleccionado,"asunto");
+
+otro ejemplo:
+
+		Yii::app()->crugemailer->elStockHaCambiado($usuarioSeleccionado,"hola");
+
+Que contendria ese nuevo metodo ? (nuevoCorreoAlCliente)
+
+Algo tan simple como:
+
+		public function nuevoCorreoAlCliente($usuario,$asunto){
+					$this->sendemail($usuario->email,$asunto,
+					$this->render('enviarclave',array('data'=>$usuario)
+				)
+			);
+		}
+
+fijate en dos cosas:
+
+	1) se usa a: $this->sendemail. No andas poniendo aqui y por todas partes tu metodo especifico de correo, en cambio "centralizas el envio de correos hacia una funcion sendemail" que podrias dejar por defecto como viene o que podrías extender tu en esta nueva clase que has creado: MiClaseCrugeMailer.
+
+	2) se usa a: $this->render,  este metodo recibe el nombre de una vista la cual tiene la forma html que se enviara por correo, esa forma, al igual que cualquier vista de Yii recibe por argumentos un array con los parametros que serán accesibles en la vista. Tal cual como lo hace yii en su mecanismo de vistas.
+
+Lo que no debes hacer es: sustituir $this->sendemail por una montón de codigo que solo sirva para una vez en la vida...porque estarías matando el concepto de encapsulamiento del modelado de objetos, acabando con el trabajo de todos aquellos que hacen de la programación orientada a objetos un arte.
+
+Que se logra asi:
+
+Se logra que tu hagas envios de correos orientados a tu modelo de negocio, sin hacer espaguetti con el codigo!!, centralizando y encapsulando el código...todos tus correos invocaran a sendEmail...y no tendrás que crear y duplicar o triplicar el esfuerzo de escribir las funciones de correo.
+
+Se logra que puedas clarificar el codigo...envias un correo con un proposito muy definido:
+		Yii::app()->crugemailer->nuevoCorreoAlCliente($usuario, "hola")
+
+Se logra que en cualquier momento puedas decidir por cual via se envia el correo, si por mail() o por phpmailer() o por cualquier otra que tu decidas..solo cambiando un metodo..sin hacer espaguetti (codigo interdependiente necio y ofuscado que solo complica la vida y termina acabando con la vida del proyecto entero).
+
+
+Supon que quieres cambiar el metodo mail() por otro de tu preferencia:
+
+Bueno, nuevamente, crearias una nueva clase (o en la que ya previamente has creado) harias un Override o Sobrecarga de la función "sendEmail" que ya crugemail trae pre configurada, solo que ahora cada vez que tus funciones que ya has creado llamen a sendEmail llamaran entonces a esta nueva y no a la que viene por defecto.
+
+Por favor cualquier duda acerca de CrugeMailer, centralizala en nuestro foro de Yii Framework en Espańol o en el repositorio de github.
 
 ##Errores Frecuentes