Punksolid Tecnologia, Curiosidades, Sistemas de Informacion y un poco de Religion

12ago/114

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

12may/110

cakephp-instaweb

cakephpcakephp-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.

18mar/090

Select o SelectTag en CakePhp 1.2

Me confundí un poco a la hora de ocupar un selectTag en cakephp 1.2,  y al buscar no lo encontré rapido, viendo la API me funcionó de la siguiente manera.
select(Nombre,$options(array))

echo $form->select('tipocuenta',array(0=>'Cuenta Corriente',1=>'Cuenta de Ahorros'));
20oct/0835

Conectar la placa Arduino con PHP a travez de PHP Serial

Este tutorial sirve para conectar Arduino con PHP de manera mas directa sobre windows con XAMPP y la extensión PHP Serial, que prácticamente debería servir para cualquier dispositivo que se quiera conectar al puerto Serial de la computadora, aunque mi prueba es por USB.

Guía Rápida

  1. Descarga e instala XAMPP.
  2. Descarga la extensión y los archivos de ejemplo de PHP Serial.
  3. Coloca el *.dll en las librerías de PHP y activalas en el php.ini.
  4. Pon el Xampp en modo CGI.
  5. Conecta y sube código de prueba al Arduino.
  6. Inicia el Apache.
  7. Usa archivo de prueba "sms_list.php" que viene en el paquete de PHP Serial .
  8. Ejecútalo y Suerte.

Guía Detallada

Una vez instalado XAMPP en windows descarga la extension y los archivos de PHP Serial una vez descompreso copia el archivo php_ser.dll en la carpeta de extensiones de PHP que usualmente suele ser para PHP5

C:/PHP/ext/

ahora debes buscar el php.ini dentro de la carpeta C:\xampp\php en el caso de XAMPP y abrirlo con un bloc de notas, aunque recomiendo NOTEPAD+ que es el que uso, y agregar la extencion que copiamos anteriormente, para hacer eso solo debemos agregar la siguiente linea donde están las demas dll, ejemplo:

extension=php_ser.dll

guarda y cierra el php.ini.

si no estas usando XAMPP talvez asi ya puedas utilizarlo, solo reinicia el apache, pero si eres usuario de XAMPP debes configurarlo para que corra como CGI, ya que por default corre como modulo de apache, para cambiar esto debemos:

  1. Ir a C:\xampp\apache\conf\extra/httpd-xampp.conf y buscar donde estén las siguientes lineas y descomentar las lineas 1 y 2 y comentar la 3.

    <em>#ScriptAlias /php/ "C:/xampp/php/"
    #Action application/x-httpd-php "/php/php-cgi.exe"
    LoadModule php5_module "C:/xampp/apache/bin/php5apache2.dll"
    AddType application/x-httpd-php-source .phps</em>

  2. Ir a  C:\xampp\apache\conf/httpd.conf y buscar <Directory /> y dejarlo como sigue:

    <em>Options FollowSymLinks
    AllowOverride None
    #Order deny,allow
    #Deny from all
    </em>


Ahora si pueden reiniciar el Apache, algo que pude notar es que el tiempo de respuesta es algo lento, si alguien puede mejorarlo que me lo notifique, no sé si es la mejor manera de comunicarlo con PHP en windows, pero eso ya es cuestion de cada quien.

15oct/086

Arduino y PHP en Windows

Foto por Nicholas Zambetti

Foto por Nicholas Zambetti

Se me hace raro que en la web oficial de Arduino no venga como conectar la placa Arduino + PHP de manera directa, hay unos métodos a través de proxys o cosas similares, el caso es que lo he logrado implementando la extensión PHPSerials que descargué desde http://www.easyvitools.com/phpserial/index.html, son pocas pero suficientes funciones que permiten leer y escribir sobre el puerto serial, bajo windows XP y sobre XAMPP con Arduino USB,los únicos problemas que noté fue la velocidad, y que al parecer la versión de la extensión es solo para estudiantes o algo similar.

Si no puedes lograr la conexion, comentalo y te respondo detalladamente.

Etiquetado con: , , 6 Comentarios