miércoles, 27 de junio de 2012

CakePHP: Llenando un combo box

Aca estoy iniciando con mis primeros pasos en este framework que hasta el momento pinta muy bien. La documentación que existe en el sitio oficial donde exponen un caso de ejemplo desarrollando un blog es verdaderamente muy útil. Solamente me quedé un poco atascado en el desarrollo de mi propio ejemplo queriendo llenar un combo box.

En mi caso quería tener una pantalla para agregar una mascota seleccionando la raza a la que pertenece.  Para ello necesito poder mostrar las razas que se encuentran en una tabla aparte de la de mascotas.

Al final la solución que encontré fue la de importar la clase modelo "Raza" para poder hacer un "find" y mandar los resultados a la vista utilizando una notación especial para que se ajuste bien a un combo box.

Controlador

<?php
App::import('Model', 'Raza');

class MascotasController extends AppController {
    public $helpers = array('Html', 'Form');
    
    public function add() {  
        if ($this->request->is('post')) {
           // Código para salvar la mascota.
        } else {
            $raza = new Raza();          
            $razas = $raza->find('list', array(       
                  'fields' => array('Raza.id', 'Raza.nombre')
            ));
            $this->set('razas', $razas);         
        }
    }
}

Vista

<h1>Agregar Mascota</h1>
<?php
echo $this->Form->create('Mascota');
echo $this->Form->input('nombre');
echo $this->Form->input('raza', array(
    'type'    => 'select',
    'options' => $razas,
    'empty'   => false
));
echo $this->Form->end('Guardar Mascota');
?>

miércoles, 6 de junio de 2012

Imprimir contenido en ventana aparte

Código mostrando como mandar a imprimir un contenido en una ventana aparte cerrandola inmediatamente. Funciona para todos los navegadores (en teoría).
<html>
<head>
<script language="javascript">
function printDiv() { 
 var divToPrint = document.getElementById('printArea');
 newWin= window.open();
 newWin.document.write(divToPrint.innerHTML); 
 newWin.document.close();
 newWin.focus();
 newWin.print();
 newWin.close();
}
</script>

</head>

<body>
 <div id="printArea">
  Print all content here!
 </div>
 <a href="#" onclick="printDiv()">Print!</a>
</body>

</html>