Busquedas de filtros complejos en CakePHP
Para comprender la situación mejor, necesitamos ver el screenshot de la vista.
Hay varias formas de hacer esto, la mas común es usar la función query de CakePHP para armar la consulta SQL en base a condiciones by (@el_keogh) , está la función find, pero no se pueden poner condiciones dentro, así que lo que se puede hacer es armar el array conditions desde afuera de la siguiente forma:
<?php //Bloque #1 asignacion de variables para comodidad $alumnoid=$this->data['Examene']['cuenta']; $user=$this->data['Examene']['user']; $fechaInicio=$this->data['Examene']['Fecha de Inicio']; $fechaFin=$this->data['Examene']['Fecha de Fin']; $formadepago=$this->data['Examene']['forma_de_pago']; $resultado=$this->data['Examene']['resultado']; $conditions=array(); //Bloque #2 Condiciones tabla Alumnos if(!empty($this->data['Examene']['nombre'])){ $conditions['Alumno.nombre LIKE']='%'.$this->data['Examene']['nombre'].'%'; } if(!empty($this->data['Examene']['apellido_paterno'])){ $conditions['Alumno.apellido_paterno LIKE']='%'.$this->data['Examene']['apellido_paterno'].'%'; } if(!empty($this->data['Examene']['apellido_materno'])){ $conditions['Alumno.apellido_materno LIKE']='%'.$this->data['Examene']['apellido_materno'].'%'; } //Bloque #3 Condiciones tabla Examenes if(!empty($alumnoid)){ $conditions['Examene.alumno_id']=$alumnoid; } if(!empty($user)){ $conditions['Examene.user_id']=$user; } //Bloque #4 Condiciones de intervalos de fecha if(!empty($fechaInicio)){ $conditions['Examene.created >'] = $fechaInicio; } if(!empty($fechaFin)){ $conditions['Examene.created <='] =$fechaFin.' 23:59:59'; } if(!empty($formadepago)){ $conditions['Examene.forma_de_pago'] =$formadepago; } if(!empty($resultado)){ $conditions['Examene.resultado'] =$resultado; } //Bloque #5 query $conditions['Examene.statusid <>']=4; $examenes= $this->paginate($conditions); ?>
Bloque #1 asignación de variables
En este caso se manejan dos tablas distintas de la base de datos, están relacionadas entre si, Alumnos y Examenes, utilicé asignación de variables para mas comodidad en su manejo, pero no son necesarias.
Bloque #2 Condiciones de tabla Alumnos
Las condiciones determinan cuando hay datos en los campos, si no hay datos, no hay condición que aplicar y nada que meter en el array, las primeras tres condiciones pertenecen a la tabla alumnos, de la cual se va a buscar por nombre NO exacto por eso los LIKE y la concatenación del símbolo de porcentaje. Para que esto funcione, las relaciones en el modelo deben estar previamente establecidas.
Bloque #3 Condiciones de tabla Examenes
En el segundo bloque ponemos las condiciones de la otra tabla, nada especial ya que los valores de esos campos deben ser exactos.
Bloque #4 Condiciones de intervalos de fecha
Para cuando tenemos intervalos de fechas y tenemos el formato en Datetime, es necesario concatenar la hora en la que termina el dia, si no lo hiciéramos contaría hasta la hora 00:00:00 no devolviéndonos los resultados del ultimo dia especificado.
Bloque #5 Query
La función paginate, se utiliza casi de la misma manera que un find y listo automagicamente cakephp devolverá solo los exámenes de los campos donde se les haya especificado algun dato, notese que este tipo de búsqueda es de tipo AND, o sea cada campo va filtrando aun mas la búsqueda, en lugar de añadir nuevas coincidencias.
Cualquier duda o comentario es bienvenido.
Referencias
Complex Find Conditions
Pagination in cakephp
cakephp-instaweb
cakephp-instaweb server es un webserver pequeño con todas las configuraciones necesarias para desarrollar en cakephp, no necesitas instalar todo el entorno php. Funciona igual al django-runserver, solo en la terminal te colocas en la carpeta de la aplicación, corres el comando y listo, tendrás tu app funcionando en http://localhost.com:3000
Si usas Ubuntu 10.10 y cakephp 1.3.8 te marcará un error
CGI Script Error
Premature end of script headers.
Si instalaste cakephp-instaweb desde los repositorios de maverick se habrá instalado la versión 0.4.X, el error anterior se soluciona con la versión mas nueva 0.5-1 para instalarlo primero debes desinstalar completamente el cakephp-instaweb y luego descargar el .deb desde launchpad para Ubuntu Natty, no causa conflicto alguno.
Con eso se habrá solucionado el problema.
Ninite Easy PC Setup – Silent Unattended Install Multiple Programs At Once
Como cualquier informatico o afín, no importa si eres un sysadmin, o tecnico o simplemente un Pringao (Howto) siempre es incomodo que una vez que instalas un windows tienes que descargarte las aplicaciones comunes una por una, al menos que ya las tengas almacenadas, lo cual también es incomodo por que tienes espacio alojado por aplicaciones que se descargan rápidamente. En fin, existen programas como Ninite, que seleccionas las aplicaciones que deseas y te genera el instalador que automáticamente te descarga e instala las aplicaciones sin necesidad de que el usuario vea configuraciones avanzadas, ideal para enviar por mensajería o usarlo de manera desatendida.
Ninite Easy PC Setup - Silent Unattended Install Multiple Programs At Once.
Funcionó perfecto cuando lo probé, si conoces una aplicacion similar para windows o linux te lo agradeceria me dijeras en los comentarios.
Revenge of the Titans

En diciembre de 2010 hubo algo que está tomando auge, salió a la venta el Humble Indie Bundle 2, un pack de juegos con una original forma de vender, todos los 5 juegos al precio que quieras, sin DRM, multiplataforma, indies, personalmente entre un amigo y yo lo compramos a 21 dolares, ya que él no tenia tarjeta de credito.
Entre el pack de juegos está un juego llamado Revenge of The Titans que consiste en defender la base de disitintos tipos de aliens, algó parecido a una de las modalidades modificadas de juegos del clasico Starcraft donde pones torretas al alcance para proteger.

La calidad de los gráficos me pareció muy detallada pero no compleja, con toques retro, variedad de armas y enemigos, y sobre todo una dificultad muy buena. Aunque si pierdes puedes bajarle el nivel a las misiones por separado.

Tiene modalidad campaña y survival, en la survival el mapa es generado automaticamente de manera muy inteligente, y la duración del modo campaña aceptable, me tomó aproximadamente 4 arduos dias de juego.
Sin duda alguna recomiendo este juego si eres jugador casual, cuesta 13 dolares en la pagina oficial y lo vale, eso o mas, o puedes esperar a que salga el proximo humble bundle a ver si lo ponen de nuevo, si no estás convencido y ocupas mas también puedes probar el beta.
Consejos/ Tips: Vende todas tus construcciones antes del final del juego, la manera mas rápida de hacerlo es dejando presionada la rueda del mouse y pasando el cursor encima de todas las construcciones y siempre que puedas compra upgrades, ya que solo puedes comprar un por misión.
P.D. Si ya lo jugaste, te agradecería me dijeras como se eliminan a los fantasmas. Si tampoco sabes puedes hacerle como yo, sacrificando una torreta de las mas baratas para destrucción mutua.
De los mejores juegos nativos para linux que he jugado.
Trailer
Sitio Oficial | Puppy Games - Revenge of the Titans
Beta para linux | Puppy Games - Downloads, Award winning retro arcade game
The Humble Indie Bundle #2 (pay what you want for five awesome indie games)
Hotot – Cliente Twitter
Gwibber el cliente predeterminado para Ubuntu me parece lento, con varios bugs, feo y gastón de memoria, así que usaba la web de twitter en lo que encontraba un cliente que me convenciera, probé varios multiplataforma empezando por los muchos que hay para adobe air, y aunque son bonitos y robustos, terminé descartando todos por que gastan demasiados recursos, muchos solo queremos twittear no sacar estadisticas.
Así que entre los clientes nativos salió uno en python llamado Hotot que aunque sigue en beta tiene desarrollo intenso

Ademas cuenta con soporte para plugins, hay pocos pero efectivos, como para ver las imagenes insertadas, geolocalizacion e incluso traductor.
En el tiempo que lo he llevado probando ronda entre los 40 y 100 megas de ram, y se refresca rapido. La interfaz es intuitiva, pulida, y muy fluida, tambien cuenta con shorcut (Alt+C) para traerlo en pantalla, aunque han aparecido varios bugs, ninguno ha sido de gravedad.
Aunque fue empezado para linux ya es multiplataforma con versiones nativas para cada sistema.
Instalación, sin dar muchas vueltas
$ sudo add-apt-repository ppa:hotot-team $ sudo apt-get update $ sudo apt-get install hotot
Creo que Hotot llegó para quedarse.
