Archive for the 'Programacion' Category

Busquedas en cakePHP

Lunes, Abril 7th, 2008

Seria algo asi como un search helper o algo por el estilo, la cosa es que no es un buscador de info sobre cake, sino un buscador para tu aplicación, la idea de esto es hacer un metodo en el app_controller que nos permita hacer busquedas en la BD partiendo de cualqueir modelo.

Lo primero es nuestro metodo de busqueda


function search(){
$this->autoRender = false;
$search = $this->data[$this->modelClass]['Buscar'];
$cond ="";
$i=0;
foreach($this->{$this->modelClass}->_schema as $field => $value){
//debug($field);
if($i>0){
$cond = $cond. " OR ";
}
$cond = $cond. " ".$this->modelClass.".".$field." ILIKE '%".$search."%' ";
$i++;
}
$conditions = array('limit'=>4, 'conditions'=> $cond);
$this->paginate = $conditions;
$this->set(strtolower($this->name), $this->paginate());
$this->render('index');
}

Probablemente esta es una busqueda que se puede optimizar muchisimo, pero como yo no soy ningun guru de SQL pues eso fue lo que se me ocurrio, lo que esto hace basicamente es armar las condiciones del find, buscando con cada campo del esquema de la tabla relacionada con el modelo ocurrencias de la frase de busqueda. Esto es mil veces mejorable colocando condiciones para las tablas relacionadas, y asi buscar en toda la info del registro y no solo por el id de la relación (bueno esta parte ni yo la entendi xD)

Como sabemos este metodo que colocamos en el app_controller estara disponible para todos nuestros controladores, asi que ahora solo nos falta colocar nuestra caja de busqueda en las vistas. Yo lo implemente de manera que la caja de busqueda vaya en el index, sobre la tabla paginada, y ojo no es que importe, es que esa es la razon por la cual el metodo regresa el resultado paginado y con el nombre de la clase.

En fin este es el codigo que debe ir en la vista


/*echo $paginator->counter(array(
'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true)
));*/
echo $form->create('', array('action'=>'search'));
echo $form->input('Buscar', array('type'=>'text'));
echo $form->end('Buscar');
?>

Como ven lo que he hecho es que quito la parte donde se coloca la información de la paginación y alli coloco la caja de busquedas, y pues eso es todo, de esta manera pueden colocarle busquedas a todos los controladores, espero les sirva de algo ^^

Chuletas (Cheat Sheets) para PHP, Jquery, CakePHP, PostgreSQL

Viernes, Febrero 15th, 2008

461616_dont_cheat_learn

Estos ultimos dias he estado buscando Cheat Sheets para la mayoria de las cosas que estamos usando en el trabajo, como estamos migrando tantas cosas a veces una hojita de referencia es muy util, en nuestro caso planeamos imprimirlas y forrar las paredes con ellas xD anyway, aqui les dejo las mas completas que consegui

Si no consigues la chuleta que buscabas quizas aqui, o aqui pueda estar

^^

Cambiar la lista de selección por checkbox en cakephp1.2

Miércoles, Febrero 13th, 2008

Cuando generamos vistas donde se involucran mas de una clase, regularmente terminamos con una lista de los elementos de las tablas referenciadas, es decir un select con opciones. Para cambiar esto a multiples checkbox solo hace falta agregar un parametro a la función input

echo $form->input('id', array('type'=>'select', 'multiple'=>'checkbox'));

y eso es todo, en vez de tener la lista tendremos un checkbox por cada elemento.

Manejar multiples schemas con postgres en cakephp 1.2

Miércoles, Febrero 6th, 2008

Uno de los problemas mas grandes que conseguimos en el trabajo para trabajar con cake, es que al parecer, aun no maneja de manera idel multiples schemas, y digo de manera ideal porque si los toma en cuenta, pero es muy limitante que solo te permita manejar un schema por conexión.

Esto era un gran problema para nosotros, porque los sistemas son gigantes y la utilización de schemas nos ayuda muchisimo, asi que teniamos que conseguir la manera de que funcionara con multiples schemas, sino hubiesemos perdido todo el tiempo que hemos pasado migrando a un framework.

El principal problema radica en que cake te permite hacer multiples conexiones a la BD, y por conexión especificar un schema, lo que yo hice fue modificar cake para que adminitira multiples schemas por conexión, para esto vamos a modificar un solo archivo llamado ‘dbo_postgres.php’ y se encuentra en

cake/cake/libs/model/datasources/dbo/dbo_postgres.php

En la función connect vamos a agregar estas lineas, despues de esta linea $this->connected = true; y antes de esta (reemplaza lo que sea que este en el medio) $this->_execute(”SET search_path TO ” . $schemas) (< -- esta ultima linea deben incluirla, sustituyendo la original);

(more…)