Foros del Web » Programando para Internet » PHP » CodeIgniter »

[APORTE] form_helper mejorado con JS

Estas en el tema de [APORTE] form_helper mejorado con JS en el foro de CodeIgniter en Foros del Web. Buenas... algunos conoceran los formuarios de JOT FORM ...pues son excelentes! Permiten...hacer chequeos como si un campo es requerio o si un e-mail es valido. ...
  #1 (permalink)  
Antiguo 16/07/2011, 12:51
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
[APORTE] form_helper mejorado con JS

Buenas... algunos conoceran los formuarios de JOT FORM...pues son excelentes! Permiten...hacer chequeos como si un campo es requerio o si un e-mail es valido.



Les presento una EXTENSION del FORM HELPER de CI que permite facilmente crear un formulario que se sirve de estas caracteristicas.

MY_form_helper.php en helpers

Código PHP:
<?php    
/*  
    Helper para formularios JFORM (incluyen llamadas JS)
     
    JS desarrollado por JOT FORM     
    JS alojado en http://www.2shared.com/document/sPHAvxc1/form.html

    Debe especificar la ruta o PATH al JS en la constante PATH_JS
*/

    
function jform_open($url,$title=null) { 
      
$js_open '<script src="'.PATH_JS.'form.js" type="text/javascript"></script>';
      
$style   '<style>input { width:320px;}
        input.boton {width:75px;height:25px;}
       </style>'
;      
      if (
$title!=null){
         
$heading heading ($title,2);
      }     
      return 
$style.$js_open.$heading.form_open('cpanel/account/validate','name="q_form_72680528871"');
    }  
      
    function 
jform_close($html='',$hidden_sent=true) { 
    
      if (
$hidden_sent){
        
$hidden_sentform_hidden('sent''sent');
      }else{
        
$hidden_sent='';
      }    
    
      return 
$hidden_sent.'</form>'.$html.'<script type="text/javascript">validate("q_form_72680528871");</script>';      
    }

    
    
/*
      required = Email | Required        
    */
    
function jform_input($name,$label='',$type='text',$value='',$required='Required'){ 
    
    
$onblur '';    
    
    if (
$label!=''){
      if (
$required!=false){
        
$span   '<span class="required">*</span>';
        
$onblur "onblur=\"validate(this,'$required')\"";
      }else{
        
$span '';        
      }
      
$label"<label>$label $span</label><br/>";
    }  

    
// No remover los <p></p> o el JS deja de funcionar!
    
return "<p>$label
<input type=\"$type\" size=\"50\" name=\"$name\" $onblur value=\"$value\" /></p>"
;    
    }    

       function 
form_sent(){
      
$CI = &get_instance();
      return 
$CI->input->post('sent')=='sent';
    }
y ahora un ejemplo de uso:

Código PHP:
<?= jform_open('cpanel/account/validate','<span>Cuenta</span> usuario'); ?>

<?= jform_input('fullname','Su nombre:','text','','Required'); ?>    

<?= jform_input('email','E-mail:','text','','Email'); ?>  

<?= jform_input('paypal_email','Paypal:','text',(form_sent() ? $this->input->post('paypal_email') : $userdata[0]->paypal_email,'Email'); ?> 
        
<?= jform_input('country','Pais:','text',(form_sent() ? $this->input->post('country') : $userdata[0]->country); ?>    
    

    
   <p class="clear"></p>
<?= form_button ('submit','Actualizar'); ?>
   
<?= jform_close(); ?>
Los CSS que incluyo son los que mejor se adaptan a ese JavaScript!

Su uso es simple: jform_open(), jform_input() y jform_close() se suman a las funciones que provee URL HELPER como form_button()

Cita:
jform_input('username','Nombre de usuario:' ,'text','valor por defecto');
El ultimo parametro puede omitirse y el campo se considera 'requerido' o especificarse como 'Email'

PD: el HELPER automaticamente agrega un campo oculto de verificacion de formulario enviado...y ofrece la funcion de chequeo form_sent()
__________________
Salu2!

Última edición por Italico76; 16/07/2011 a las 15:19
  #2 (permalink)  
Antiguo 16/07/2011, 20:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: [APORTE] form_helper mejorado con JS

Revisa bien tu aporte, tu función jform_open() es incorrecta porque harcodeas el url a donde va tu form, y debe de ser la variable que le pasas a jform_open().

Saludos.
  #3 (permalink)  
Antiguo 16/07/2011, 20:22
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: [APORTE] form_helper mejorado con JS

Tienes toda la razon!

VERSION con menos errores

Código PHP:
<?php    
/*  
    Helper para formularios JFORM (incluyen llamadas JS)
     
    JS desarrollado por JOTFORM     
    JS alojado en http://www.2shared.com/document/sPHAvxc1/form.html
*/

   /* agrega campo oculto si no se dice que no */
   
function form_close($extra '',$hidden_sent=true) { 
    
      if (
$hidden_sent){
        
$hidden_sentform_hidden('sent''sent');
      }else{
        
$hidden_sent='';
      }    
      return 
$hidden_sent.'</form>'.$extra;
    }

    function 
jform_open($url,$title=null,$js=true) { 
      if (
$js){
        
$js_open '<script src="'.PATH_JS.'form.js" type="text/javascript"></script>';
      }else{ 
        
$js_open='';
      }
      
$style   '<style>input { width:320px;}
        input.boton {width:75px;height:25px;}
       </style>'
;      
      if (
$title!=null){
         
$heading $title;
      }     
      return 
$style.$js_open.$heading.form_open($url,'name="q_form_72680528871"');
    }  
      
    function 
jform_close($html='',$hidden_sent=true) { 
    
      if (
$hidden_sent){
        
$hidden_sentform_hidden('sent''sent');
      }else{
        
$hidden_sent='';
      }    
    
      return 
$hidden_sent.'</form>'.$html.'<script type="text/javascript">validate("q_form_72680528871");</script>';      
    }

    function 
form_send_button($title='Enviar'){
      return 
"<input type=\"submit\" class=\"boton\" value=\"$title\" />";
    }      
    
    
/*
      required = Email | Required        
    */
    
function jform_input($name,$label='',$type='text',$value='',$required='Required'){ 
    
    
$onblur '';    
    
    if (
$label!=''){
      if (
$required!=false){
        
$span   '<span class="required">*</span>';
        
$onblur "onblur=\"validate(this,'$required')\"";
      }else{
        
$span '';        
      }
      
$label"<label>$label $span</label><br/>";
    }  

    
// No remover los <p></p> o el JS deja de funcionar!
    
return "<p>$label
<input type=\"$type\" size=\"50\" name=\"$name\" $onblur value=\"$value\" /></p>"
;    
    }    
    
    
/* devuelve TRUE si el form fue enviado */
    
function form_sent(){
      
$CI = &get_instance();
      return 
$CI->input->post('sent')=='sent';
    }  

    
//uso: input_value('fullname',$userdata);
    
function value ($field,$userdata){
      
$CI = &get_instance();
      return (
form_sent() ? $CI->input->post($field) : $userdata->{$field});
    }

    
/*
          Form data extractor and cleanner -> usar en controllers     
      devuelve array limpio para insersion / actualizacion en DB 
    */
    
function form_data(){
      
$CI = &get_instance();
      
$userdata $CI->input->post();          
      unset (
$userdata['submit']);
      unset (
$userdata['sent']); /* campo oculto */      
      
return $userdata;
    }

Y ejemplo de uso (tambien actualizado!)

Código PHP:
<?= jform_open('cpanel/account/validate','<h3><span>Cuenta</span> usuario</h3>'); ?>

<?= jform_input('fullname','Su nombre:','text',form_sent() ? $this->input->post('fullname') : $userdata[0]->fullname,'Required'); ?>    

<?= jform_input('email','E-mail:','text',form_sent() ? $this->input->post('email') : $userdata[0]->email,'Email'); ?>  

<?= jform_input('paypal_email','Paypal:','text',form_sent() ? $this->input->post('paypal_email') : $userdata[0]->paypal_email,'Email'); ?> 
        
<?= jform_input('country','Pais:','text',form_sent() ? $this->input->post('country') : $userdata[0]->country); ?>    
    
<p class="clear"></p>

<?= br().form_send_button ('Actualizar'); ?>   

<?= jform_close(); ?>
Y...como yapa... utilizando la funcion value() se puede simplificar mucho mas el codigo que se deberia colocar en <input name="..." value="" .. ya que ya no es necesario andar con condicionales sobre si el dato proviene de la base de datos o de... el form recien enviado donde $userdata es un arreglo de objetos que proviene de la consulta al modelo y logicamente $userdata[0] es el objeto que contiene la informacion del registro tal como viene de la DB

Código PHP:
<?= jform_input('fullname','Su nombre:','text'value('fullname',$userdata[0]),'Required'); ?>
Ademas... form_data() limpia el array de $_POST devuelto al enviarse el formulario dejandolo limpio para hacer inserciones, actualizaciones en la DB:

Código PHP:
$userdata form_data();
$this->user_m->user_update($userdata); 
Cabe aclarar que form_close() fue extendida de igual forma que jform_close() para agregar el campo oculto de verificacion de formulario enviado con form_sent()

Gracias amigos...por sus correcciones!
__________________
Salu2!

Última edición por Italico76; 17/07/2011 a las 07:49
  #4 (permalink)  
Antiguo 17/07/2011, 07:59
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: [APORTE] form_helper mejorado con JS

Resumiendo.... las mejoras:

form_close() agrega campo oculto de verificacion de form enviado
form_sent() verifica si el form fue enviado
value() simplifica la asignacion de valores de DB / del FORM en value=""
form_data() devuelve un array limpio para usarse directamente en inserciones / actualizaciones en la DB

jform_open() equivale a form_open() para usar con JOT FORM
jform_input() equivale a form_input()
jform_close equivale a form_close() para usar con JOT FORM

value() puede reemplazar a a set_value() si se le pasa un solo parametro, simplificando mas y generalizando su uso :

Código PHP:
<?= jform_input('username','Apodo: ','text'value('username')); ?>
Código PHP:
/* 
      Si el formulario fue enviado devuelve el valor del campo tal como viene del FORM y sino el pre-determinado (ej: el que proviene de la base de datos) en $userdata
    
      uso: input_value ('campo,arreglo);    
    */
    
function value ($field,$userdata=null){
      
$CI = &get_instance();
      
      if (
$userdata==null){
        return 
$CI->input->post($field);
      }else{      
        return (
form_sent() ? $CI->input->post($field) : $userdata->{$field});
      }    
    } 
__________________
Salu2!

Última edición por Italico76; 17/07/2011 a las 08:37
  #5 (permalink)  
Antiguo 17/07/2011, 08:58
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: [APORTE] form_helper mejorado con JS

GRACIAS POR LA VALORACION NEGATIVA!

El que hace...se equivoca y el que no...
__________________
Salu2!

Última edición por Italico76; 17/07/2011 a las 09:17
  #6 (permalink)  
Antiguo 17/07/2011, 09:20
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: [APORTE] form_helper mejorado con JS

A mi no me parece estupido pero de aporte no le veo nada, el codigo es espantoso, inleible, métodos desaconsejables(clases, php4/5), mezclas funciones, html, Jscript.

Saludos.
__________________
Drupal Argentina
  #7 (permalink)  
Antiguo 17/07/2011, 09:38
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: [APORTE] form_helper mejorado con JS

NUCKLEAR... en cordoba el aire tiene marihuana ?

Cita:
Iniciado por NUCKLEAR Ver Mensaje
métodos desaconsejables(clases, php4/5)
Donde ves una CLASE ? o METODOS ? recordas lo que es un HELPER ?
__________________
Salu2!

Última edición por Italico76; 17/07/2011 a las 10:00
  #8 (permalink)  
Antiguo 17/07/2011, 10:56
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: [APORTE] form_helper mejorado con JS

function form_sent(){
$CI = &get_instance();
return $CI->input->post('sent')=='sent';
}

Aca estas haciendo una referencia(php4) al super objeto CI y usando sus métodos.... En todo caso lo hubieras hecho una librería.

Y esto:

// No remover los <p></p> o el JS deja de funcionar!
return "<p>$label
<input type=\"$type\" size=\"50\" name=\"$name\" $onblur value=\"$value\" /></p>";
}

etc etc....[]

PD: La marihuana de Córdoba ni yo tenemos la culpa de que no sepas programar...
Saludos ;)
__________________
Drupal Argentina
  #9 (permalink)  
Antiguo 17/07/2011, 11:03
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: [APORTE] form_helper mejorado con JS

A ver... sabes cuando usar bibliotecas y cuando helpers ?

Pregunto..que tiene de malo usar get_instance() ???! esta en el manual de la version actual de CI

Y... que culpa si el JS parsea los <p></p> ???? deberia NO DOCUMENTAR ????

Luego... no se programar... pero... lo intento! gracias a todos...por valorar negativamente mis esfuerzos y compartir
__________________
Salu2!
  #10 (permalink)  
Antiguo 17/09/2011, 04:06
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 5 meses
Puntos: 165
Respuesta: [APORTE] form_helper mejorado con JS

Buen aporte,

Poco a poco se ira mejorando, date cuenta que estas haciendo un aporte, que otra gente dice / sabe hacer mejor y no aporta nada.

Un saludo y ánimo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #11 (permalink)  
Antiguo 17/09/2011, 09:58
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: [APORTE] form_helper mejorado con JS

Cita:
Iniciado por miktrv Ver Mensaje
Buen aporte,

Poco a poco se ira mejorando, date cuenta que estas haciendo un aporte, que otra gente dice / sabe hacer mejor y no aporta nada.

Un saludo y ánimo!
Podrías continuar con el aporte y mejorarlo, criticar al "criticon" no es gran merito tampoco.
__________________
Drupal Argentina
  #12 (permalink)  
Antiguo 17/09/2011, 11:02
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 5 meses
Puntos: 165
Respuesta: [APORTE] form_helper mejorado con JS

No te piques, no pasa nada
__________________
Gracias por el Karma :D

empleo ofertas de trabajo

Etiquetas: frameworks-y-php-orientado-a-objetos, js, mejorado, php, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:30.