Hola
masterpuppet
search.phtml es solo una vista dentro de un layout pero de hecho en el action desactivo el layout
search.phtml
Código HTML:
Ver original<?php echo $this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<?php $this->headLink()->appendStylesheet('/css/global.css') ?>
<?php $this->headLink()->appendStylesheet('/css/master.css') ?>
<?php echo $this->headLink() ?>
<script type="text/javascript" src="/js/funciones.js"></script> <script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
var httpReq; //objeto para realizar peticiones HTTP
var items; //Contendrá el XML obtenido para los elementos de la lista
var ids; //Contendrá el XML obtenido para los elementos de la lista
var tipo; //Contendra el XML obtenido para el elemento TIPO
var valores; //Contendrá el XML obtenido para los elementos de la lista
//Se encarga de cargar los items de la lista secundaria
function loadItems(searchCriteria)
{
var filtro;
if (document.frm_buscar_clientes.filtros[0].checked){
filtro='apellidoPaterno';
} else {
filtro='rut';
}
///filtro/"+filtro+"/criterio/"+searchCriteria
getXML("/clientes/search/format/xml/filtro/"+filtro+"/criterio/"+searchCriteria);
}
//Carga el RSS en el objeto rssXML
function getXML(url)
{
//Si es Mozilla, Opera o safari (entre otros que lo soportan como objeto nativo del navegador)
if (window.XMLHttpRequest)
{
httpReq = new XMLHttpRequest();
}
else //Internet Explorer lo expone como control Active X
{
httpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
//Ya debería tener una referencia al objeto
if (httpReq != null)
{
httpReq.open("GET", url, true) //El true del final es para que lo solicite de forma asíncrona
httpReq.onreadystatechange = finCarga;
httpReq.send(null); //al ser una petición GET no va nada en el cuerpo de la petición, de ahí el null
}
}
//Función que se ejecuta cuando cambia el estado de la carga del objeto httpReq
function finCarga()
{
if (httpReq.readyState == 4) //4: completado, 3: en curso, 1:cargado, 0: no iniciado
{
if (httpReq.status == 200) //200: OK (código HTTP, podría haber sido 404 (no encontrado), 500 (error), etc...)
{
ids= httpReq.responseXML.getElementsByTagName("RUT");
items = httpReq.responseXML.getElementsByTagName("NOMBRES");
ProcesaItems();
}
else //Se produjo un error
{
alert("No se pudo recuperar la información de la lista secundaria: " + httpReq.statusText);
}
}
}
//Procesa los items del RSS
function ProcesaItems()
{
listaSec = document.getElementById("mnuSecundario");
if (listaSec != null)
{
listaSec.options.length = 0; //Vacía la lista de opciones
//Cargamos las nuevas opciones
for(i=0; i<ids.length; i++)
{
var opc = document.createElement("OPTION");
opc.text = items[i].childNodes[0].nodeValue;
opc.value = ids[i].childNodes[0].nodeValue;
listaSec.options.add(opc);
if (ids[i].childNodes[0].nodeValue == 0 || items[i].childNodes[0].nodeValue == 'No se encontraron coincidencias')
{
listaSec.options[0] = new Option('paso por aqui','0');
listaSec.disabled=true; //PARA EL CASO DE NO HABER RESULTADOS INABILITO EL SELECTOR
} else {
listaSec.disabled=false;
listaSec.options[0].selected = true; //si se encontraron coincidencias marco la primera opcion de la lista como seleccionada
}
}
}
}
function CargaPagina(dato){
listaSec = document.getElementById("mnuSecundario");
var textoSel = '0';
var valorSel = '0';
if(document.frm_buscar_clientes.mnuSecundario.selectedIndex != -1 && listaSec.value != ''){
textoSel = document.frm_buscar_clientes.mnuSecundario.options[document.frm_buscar_clientes.mnuSecundario.selectedIndex].text;
valorSel = document.frm_buscar_clientes.mnuSecundario.value;
parent.infFrame.location.href = '/clientes/edit/rut/'+valorSel;
}
}
name="frm_buscar_clientes"
id="frm_buscar_clientes"
method="post"
action="/clientes/search/" >
<div class="mainHeading"><h4>Buscador de clientes
</h4></div>
<table cellspacing="0" cellpadding="0" class="data-table" id="clientes-table" > Filtros
<input name="filtros" type="radio" value="apellidoPaterno" checked> Apellido Paterno
<input name="filtros" type="radio" value="rut"> Rut
<td colspan="3" style="height:2px"></td>
Texto a Buscar
<td scope="col" colspan="2"> <input name="mnuPrimario" type="text" id="mnuPrimario" onBlur="javascript:loadItems(this.value)" size="50"> <!--onKeyUp="this.value=this.value.toUpperCase(); if (this.value.length>2){loadItems(this.value);};"-->
<td colspan="3" style="height:2px"></td>
Coincidencias
<td scope="col" colspan="2"> <select name="mnuSecundario" style="width:300px;" size="5" id="mnuSecundario" onclick="LoadClientesInfo(this.value);" disabled="disabled"> <option value="">[Ingrese texto a buscar en la caja superior]
</option> </select> <input name="hayseleccion" type="hidden" value="0"> </td>
<script type="text/javascript"> <!--
if (document.getElementById && document.createElement) {
roundBorder('outerbox');
}
-->
ClientesController
Código PHP:
Ver originalpublic function searchAction()
{
$this->_helper->layout->disableLayout();
$_request = $this->getRequest();
if ($_request->isPost() || $this->getRequest()->isXmlHttpRequest() || $_request->isGet())
{
$filtro = $_request->getParam('filtro');
$criterio = $_request->getParam('criterio');
if (null !== $filtro && null !== $criterio)
{
//instancio el modelo para invocar al metodo
$clientes= new Application_Model_Clientes();
$this->view->clientes= $clientes->search($filtro, $criterio);
}
}
}
ClientesModel
Código PHP:
Ver originalpublic function search($p1, $p2)
{
return $this->getMapper()->search($p1, $p2);
}
ClientesMapper
Código PHP:
Ver originalpublic function search($p1, $p2, Application_Model_Pacientes $pacientes)
{
$select = $this->getDbTable()->select()
->from(array('pac' => 'pacientes'), 'nombre'=>'CONCAT(pac.nombres," ",pac.apellidoPaterno)'))
->where($p1.' LIKE ?', '%'.$p2.'%')
->order('apellidoPaterno ASC');
/* $resultSet = $this->getDbTable()->fetchAll($select);
if (0 == count($resultSet)) {
return;
}
$row = $resultSet->current();
$pacientes->setRut($row->rut);
$pacientes->setNombres($row->nombre);*/
return $this->getDbTable()->fetchAll($select);
}
No me funciona.