Agregar Ajax para buscar una descripcion
De CidesaWiki
Línea 48: | Línea 48: | ||
Luego en la variable $output se debe crear un arreglo con datos que se necesita la funcion AjaxJSON par mostrarlos en la vista. | Luego en la variable $output se debe crear un arreglo con datos que se necesita la funcion AjaxJSON par mostrarlos en la vista. | ||
$output = '[["'.$cajtexmos.'","'.$dato.'",""],["'.$cajtexcom.'","6","c"]]'; | $output = '[["'.$cajtexmos.'","'.$dato.'",""],["'.$cajtexcom.'","6","c"]]'; | ||
- | La variable $output se construye con arreglos de 3 posiciones | + | |
+ | La variable $output se construye con arreglos de 3 posiciones: | ||
+ | 1era posición se le envia el nombre de la caja de texto donde debe mostrar la descripcion. | ||
+ | 2do es la descripción que se quiere mostrar | ||
+ | 3er el siguiente parametro del arreglo indica si es para completar la caja con ceros o no, para este caso se deja en blanco. | ||
+ | |||
+ | El segundo arreglo es para indicar que se rellene con ceros a la izquierda, en el 1er parametro se envia el nombre de la caja de texto donde se quiere completar con ceros, el 2do parametro la cantidad de ceros a rellenar, y el tercero se debe colocar 'C' de completar. |
Revisión de 14:54 30 abr 2007
- Para añadir una función de AJAX para traer una descripcion de la base de datos a partir de un codigo es de la siguiente manera. En el formulario ("_edit_form.php"), agregar la siguiente línea al comienzo.
<?php echo javascript_include_tag('ajax') ?>Luego ubicar dentro del _edit_form, la caja de texto donde se escribira el código al cual le quiero buscar la descripción, por ejemplo en el formulario Registro de Articulos (Almregart) necesito que al tipear el código del ramo se muestre la descripcion del mismo, en este caso dentro de la caja de texto del codigo del ramo debemos programar el evento onBlur (perder el foco) para que ejecute un procedimiento que busque en la base de datos la descripción correspondiente y la pinte en la vista de forma inmediata. Para ello la caja de texto del código del ramo queda de la siguiente manera
<?php $value = object_input_tag($caregart, 'getRamart', array ( 'size' => 20, 'control_name' => 'caregart[ramart]', 'maxlength' => 6, 'onBlur'=> remote_function(array( 'url' => 'almregart/ajax', 'complete' => 'AjaxJSON(request, json)', 'with' => "'ajax=1&cajtexmos=nomram&cajtexcom=caregart_ramart&codigo='+this.value" )), )); echo $value ? $value : ' ' ?>En el evento onBlur se usa el remote_function que tiene los siguientes parametros
- El url indica el nombre de la funcion a ejecutar, esta función debe crearse en el actions.class con el nombre de executeAjax.
- En el complete se indica la funcion javascripts que se va a ejecutar, esta función ya existe dentro del archivo ajax.js.
- El with son los parametros que deben pasarse a la funcion que se ejecutara en el actions.class
Los parametros del with son necesarios y son los siguientes,
- El parametro ajax: indica la accion ejecutar dentro de la función executeAjax.
- El parametro cajtexmos: indica el nombre del id de la caja de texto donde se va a colocar la descripción a mostrar.
- El parametro cajtexcom es para el caso de que el valor que se esta tipeando se quiera rellenar con ceros a la izquierda, si es el caso aqui se coloca el nombre de la caja de texto correspondiente, y sino se pasa vacio (' ')
- El parametro codigo,siempre debe ir informado con this.value, que indica el valor que se acaba de tipear.
Ahora en el archivo actions.class se debe colocar la siguiente función:
public function executeAjax() { $cajtexmos=$this->getRequestParameter('cajtexmos'); $cajtexcom=$this->getRequestParameter('cajtexcom'); if ($this->getRequestParameter('ajax')=='1') { $dato=CaramartPeer::getDesramo($this->getRequestParameter('codigo')); $output = '[["'.$cajtexmos.'","'.$dato.'",""],["'.$cajtexcom.'","6","c"]]'; } $this->getResponse()->setHttpHeader("X-JSON", '('.$output.')'); return sfView::HEADER_ONLY; }
Esta función se debe colocar igual en el action.class correspondiente, lo unico que se debe cambiar es la instrucción:
$dato=CaramartPeer::getDesramo($this->getRequestParameter('codigo'));
Aqui se debe llamar a la función que busque en la base de datos la descripción que se quiere mostrar, para este caso se quiere mostrar la descripcion del ramo a partir del código, entonces en la clase CaramartPeer cree el metodo que me hace la busqueda.
Luego en la variable $output se debe crear un arreglo con datos que se necesita la funcion AjaxJSON par mostrarlos en la vista. $output = '[["'.$cajtexmos.'","'.$dato.'",""],["'.$cajtexcom.'","6","c"]]';
La variable $output se construye con arreglos de 3 posiciones: 1era posición se le envia el nombre de la caja de texto donde debe mostrar la descripcion. 2do es la descripción que se quiere mostrar 3er el siguiente parametro del arreglo indica si es para completar la caja con ceros o no, para este caso se deja en blanco.
El segundo arreglo es para indicar que se rellene con ceros a la izquierda, en el 1er parametro se envia el nombre de la caja de texto donde se quiere completar con ceros, el 2do parametro la cantidad de ceros a rellenar, y el tercero se debe colocar 'C' de completar.