Dic 10 2009

Instalar consola de cakephp en windows

Jonathan Andres Calderón Roa

Cuando hemos tenido cierta experiencia desarrollando en php y conocemos una herramienta como cakephp, es fácil darse cuenta las comodidades que nos ofrece usar un framework al crear una aplicación web de una forma sencilla, usable y segura ahorrandonos un montón de pasos. Ahora bién existe una ayuda de está herramienta que se ejecuta en consola y que nos permite agilizar todavía más nuestro trabajo, sobretodo al implementar Acl o simplemente usar algunos controladores y vistas por defecto.

Para configurar la consola de cake necesitamos :

1)  Damos click derecho en MIPC y entramos en propiedades

2) Seleccionamos opciones avanzadas o configuración avanzada del sistema en windows 7

3) E ingresamos en variables de entorno y en variables de sistema ubicamos una llamada Path y le añadimos al final los siguientes directorios teniendo en cuenta que cada directorio va separado de un “;”

3.1) Directorio donde se encuentra el php.exe

3.2) Directorio hacia la consola de cake /cake/console

Guardamos los cambios y ahora podemos ir a la consola de windows,   ubicamos el directorio donde tenemos el app de cake y ya podemos empezar a usar cake desde la consola =D.  Trabajar con la consola


May 3 2009

cakephp Crear un buscador personalizado

Jonathan Andres Calderón Roa

Bueno, he creado  un buscador personalizado que nos permite usar una o varias formas de búsqueda de datos simultaneamente de una forma muy sencilla tanto de usar como de programar:

En este ejemplo creare un buscador que me facilitara encontrar cotizaciones, permitiéndome buscar  por el nombre del cliente, por el estado de la cotización, y por el nombre del vendedor  encargado de dicha cotización. Para lo cual necesitaremos crear un modelo, una vista y un controlador (MVC).

Usaremos una tabla cotizaciones, usuarios y productos  para el ejemplo.
como una de las modalidades de búsqueda sera por vendedor, desde el controlador le enviaremos la consulta de la base de datos donde estan registrados los vendedores, para colocarlas en un select. por medio de un switch case seleccionamos las opciones por las cuales devolveremos los resultados a la vista.

controlador para el buscador.

       <?php
class SearchsController extends AppController {
	var $name = 'Searchs';
	var $uses = array('Quote','QuoteProduct','User','Product');
	var $helpers = array('Html','Time','Ajax','Javascript','Paginator');
	var $paginate = array(
        'limit' => 10,
		'order'=>array('Quote.id' => 'desc')
	);

	function index(){
		$this->set('sellers', $this->User->find('list',
								array('fields'=>'User.name')));
                if((isset($_POST['mode']) && ($_POST['mode'] == 'search')) || is_array($this->Session->read('QuoteSearch')) ){
			$this->Session->write('QuoteSearch', $this->data);

			if($this->data['Quote']['nameCustomer'] != null){
				switch($this->data['Quote']['customer'])
				{
					case 0:default:
						$conditions[] = array('Quote.name LIKE' => '%'.$this->data['Quote']['nameCustomer'].'%');
					break;
					case 1:
						$conditions[] = array('Quote.name NOT LIKE' => '%'.$this->data['Quote']['nameCustomer'].'%');
					break;
					case 2:
						$conditions[] = array('Quote.name LIKE' => $this->data['Quote']['nameCustomer'].'%');
					break;
					case 3:
						$conditions[] = array('Quote.name LIKE' => '%'.$this->data['Quote']['nameCustomer']);
					break;
					case 4:
						$conditions[] = array('Quote.name' => $this->data['Quote']['nameCustomer']);
					break;
					case 5:
						$conditions[] = array('Quote.name NOT' => $this->data['Quote']['nameCustomer']);
					break;
				}

			}
			if($this->data['Quote']['seller'] != null){
				$conditions[] = array('Quote.users_id' => $this->data['Quote']['seller']);
			}
			if(isset($this->data['Quote']['status'])){
				$conditions[] = array('Quote.status' => $this->data['Quote']['status']);
			}

		}
                 $data = $this->paginate('Quote',$conditions);
		$this->set(compact('data'));
	}

}
?>

Aqui tenemos la creación de la vista, en la cual tendremos un formulario que nos da la posibilidad de añadir los 3 opciones de búsqueda avanzada en nuestro sistema. por vendedor seleccionando el nombre con un select, por el nombre del cliente segun si contiene, comienza o termina con determinadas letras, y por el estado de las cotizaciones que en nuestro caso son nueva, guardada, en edición, enviada y descartada.

       <?php
//Creando el formulario de busqueda echo $form->create('uses');
	echo "Filtrar por".$form->select('FilterFor',array('Status' => 'Estado','Customer' =>'Cliente',
	'User' => 'Vendedor')).
	"<input type='button' name='Añadir' value='Añadir'onClick='showFilter()'><br/><hr/>";
echo $form->create(null,array('url' => array('controller' => 'admin/quotes', 'action' => 'index')));
	?>

<input type="hidden" name="mode" value="search">
<div id="Filters">
	<div id="Status"style="display:none"><?php
		echo "Estado";
	echo "<br/><input type='radio' name='data[Quote][status]' value='0'/>Nueva<br/>
		  <input type='radio' name='data[Quote][status]' value='1'/>Guardada<br/>
		  <input type='radio' name='data[Quote][status]' value='2'/>Enviada<br/>
		  <input type='radio' name='data[Quote][status]' value='3'/>En edición<br/>
		  <label for='Descartada'>Descartada</label><input type='radio' name='data[Quote][status]' value='4' /><br/>";
	?>
	<br/><a id="hide0"href="javascript:hideFilter('Status')">Quitar filtro</a>
	</div>

	<div id="Customer"style="display:none"><?php
		echo "Cliente".$form->select('customer',array('contiene','no contiene','empieza con','termina con','es','no es'));
		echo $form->input('nameCustomer',array('label'=>''));
	?>

	<a id="hide1"href="javascript:hideFilter('Customer')">Quitar filtro</a>
	</div>

	<div id="User" style="display:none"><?
		echo $form->select('seller',array($sellers));

	?>
	<a id="hide3"href="javascript:hideFilter('User')">Quitar filtro</a>
	</div>
</div>

<?php echo $form->submit('Buscar');?>

<script type="text/javascript">
function showFilter()
		{

				filter = jQuery('#FilterFor').val();
				jQuery('#'+filter).show("normal");
		}

function hideFilter( id)
		{
			jQuery('#'+id).hide("normal");
			jQuery('#QuoteName'+id).val("");
			jQuery('#Quote'+id).val("");

		}
//FINDE MI CODIGO
</script>

con la ayuda del script añadido en la vista podremos usar uno o mas tipos de busqueda.
La vista de nuestro buscador sera algo como esto:
buscador1