Efecto en un checkbox.

75 views
Skip to first unread message

Pablo Braulio

unread,
Sep 3, 2009, 9:41:31 AM9/3/09
to symfo...@googlegroups.com
Hola a todos.

Intento hacer un efecto que me muestre un campo en un formulario tras
activar un checkbox. Es decir, dicho campo permanece oculto si el
checkbox no está activado.

¿Alguien sabría ponerme un ejemplo de como hacer esto con symfony?. No
lo he hecho nunca.
--
Saludos cordiales.
Pablo.

Mario Nunes

unread,
Sep 3, 2009, 10:12:09 AM9/3/09
to symfo...@googlegroups.com
Necesariamente tiene que ser con Symfony? entiendo que el formulario tiene todos los campos otra cosa es que se muestren todos en el template, es una funcionalidad que le puedes poner en marcha utilizando javascript.

La lógica es sencilla, si está checked mostrar tal, en JS son 3 lineas :-) luego en la parte del servidor si las validaciones son diferentes si ha seleccionado el checked es otra cosa... no se si con el plugin este para extender los formularios se puede hacer eso.

Te una mini función JS que te de esa funcionalidad? o tiene que ser necesariamente con Symfony???

Pablo Braulio

unread,
Sep 3, 2009, 10:20:14 AM9/3/09
to symfo...@googlegroups.com
Yo lo decía porque según veo en el capitulo 11 del libro (versión 1.0),
symfony tiene ya preparado un framework de javascript. La cuestión es
que no lo he usando nunca y por eso preguntaba.

Pero ya que lo has mencionado, ¿a que plugin te refieres con el de
extender formularios?.

Gracias por el comentario.

Mario Nunes escribió:


> Necesariamente tiene que ser con Symfony? entiendo que el formulario
> tiene todos los campos otra cosa es que se muestren todos en el
> template, es una funcionalidad que le puedes poner en marcha utilizando
> javascript.
>
> La lógica es sencilla, si está checked mostrar tal, en JS son 3 lineas
> :-) luego en la parte del servidor si las validaciones son diferentes si
> ha seleccionado el checked es otra cosa... no se si con el plugin este
> para extender los formularios se puede hacer eso.
>
> Te una mini función JS que te de esa funcionalidad? o tiene que ser
> necesariamente con Symfony???
>


--
Saludos cordiales.
Pablo.

Mario Nunes

unread,
Sep 3, 2009, 10:32:44 AM9/3/09
to symfo...@googlegroups.com
El que aparece en Jobeet 1.2 Doctrine, sfFormExtraPlugin, con más widgets para los formularios.

Llevo poco con symfony para saber si lo que demandas se puede hacer con alguna utilidad del framework, pero si la logica para la validación la tienes hecha el mostrar/ocultar un campo es sencillo con js.

Salu2.

Pablo Braulio

unread,
Sep 3, 2009, 10:44:54 AM9/3/09
to symfo...@googlegroups.com
Parece ser que el plugin que dices es para las versiones 1.1 y 1.2, no
para la 1.1.

Gracias de todos modos.

Mario Nunes escribió:


> El que aparece en Jobeet 1.2 Doctrine, sfFormExtraPlugin, con más
> widgets para los formularios.
>


--
Saludos cordiales.
Pablo.

Mario Nunes

unread,
Sep 3, 2009, 10:47:33 AM9/3/09
to symfo...@googlegroups.com
Si, por eso te comento que lo he conocido en Jobeet 1.2 y estoy usando symfony 1.2.8. Pero si quieres puedo darte una solución para el problema que tienes fuera de symfony con la explicación que te he comentado antes.

Salu2.

Pablo Braulio

unread,
Sep 3, 2009, 10:50:46 AM9/3/09
to symfo...@googlegroups.com
Sería de agradecer.

Mario Nunes escribió:


> Si, por eso te comento que lo he conocido en Jobeet 1.2 y estoy usando
> symfony 1.2.8. Pero si quieres puedo darte una solución para el problema
> que tienes fuera de symfony con la explicación que te he comentado antes.
>
> Salu2.
>

--
Saludos cordiales.
Pablo.

Mario Nunes

unread,
Sep 3, 2009, 11:35:38 AM9/3/09
to symfo...@googlegroups.com
En tu desarrollo utilizas algun framework javascript tipo jquery, motools, prototype....

El checkbox tiene id?

Pablo Braulio

unread,
Sep 3, 2009, 11:58:53 AM9/3/09
to symfo...@googlegroups.com
No, no he usado hasta la fecha ninguno.

Creo que symfony ya viene con prototype.

El checkbox tiene el id que le asigna symfony al usar el helper
checkbox_tag(), que es el mismo que el nombre.

He probado con esto, pero no me funciona:

<?php use_helper('Javascript'); ?>
<?php echo javascript_tag(
'function mostrar(){
campo= document.getElementById(\'gruposEmpresa\');
campo.style.visibility= visible;
}'
);
?>

...........

<?php echo checkbox_tag('compartir_empleados',
$configurar_empresa->getCompartirEmpleados(), 0,
array('onclick'=>'mostrar()')) ?>

<div id="gruposEmpresa" style="visibility:hidden"><?php
echo object_select_tag($configurar_empresa,
'getGruposCompartirEmpleados', array(
'control_name' => 'compartirEmpleados',
'related_class' =>'Grupos',
'include_custom' => 'Ninguno',
'peer_method' => 'gruposEmpresas')) ?>
</div>

Mario Nunes escribió:


> En tu desarrollo utilizas algun framework javascript tipo jquery, motools, prototype....
>
> El checkbox tiene id?
>

--
Saludos cordiales.
Pablo.

Pablo Braulio

unread,
Sep 3, 2009, 12:20:46 PM9/3/09
to symfo...@googlegroups.com
Hola de nuevo.

Como ya he puesto en un mensaje anterior, estoy tratando de mostrar un
campo al activar un checkbox.

La cuestión es que según veo el libro de symfony 1.0 Prototype viene
incluido en symfony, concretamente en el directorio web/sf/prototype.
Pero en mi caso no existe dicho directorio.

¿Está mal el libro o hay que instalarlo?.

--
Saludos cordiales.
Pablo.

Carlos Martínez

unread,
Sep 3, 2009, 12:24:21 PM9/3/09
to symfo...@googlegroups.com

Entiendo que estas trabajando con 1.0
 
 
ahi describe el checkbox_tag con la opcion onclick para agregar tu método javascript que hara q se muestre lo que esta oculto
 
intenta algo asi
 
<?php echo checkbox_tag('compartir_empleados',
$configurar_empresa->getCompartirEmpleados(), 0,
array('onclick'=>"Effect.toggle('gruposEmpresa','slide', { delay: 0.5 });")) ?>
 
<div id="gruposEmpresa" style="display:none">
  <div>
   <?php         echo object_select_tag($configurar_empresa,'getGruposCompartirEmpleados',
                        array(
                              'control_name' => 'compartirEmpleados',
                             'related_class' =>'Grupos',
                             'include_custom' => 'Ninguno',
                             'peer_method' => 'gruposEmpresas')) ?>
  </div>
</div>
Effect.toggle viene incluido en symfony, ya que es parte de script.aculo.us, pero de igual forma verifica si necesitas declarar explicitamente el uso de algun helper.
El 3 de septiembre de 2009 11:35, Mario Nunes <ma...@pensandoenred.com> escribió:
En tu desarrollo utilizas algun framework javascript tipo jquery, motools, prototype....

El checkbox tiene id?



--
Carlos Martínez Sánchez
Ing. Ejec. Informática
(09) - 2657574

Carlos Martínez

unread,
Sep 3, 2009, 12:39:07 PM9/3/09
to symfo...@googlegroups.com
ese directorio esta en la instalacion de symfony
tienesdos opciones
copiarlo y dejarlo en tu carpeta web del proyecto o hacer un enlace simbolico

2009/9/3 Pablo Braulio <bru...@gmail.com>

Carlos Martínez

unread,
Sep 3, 2009, 12:40:19 PM9/3/09
to symfo...@googlegroups.com
me refiero a que copies toda la carpeta sf a tu carpeta web del proyecto no solo lo de prototype

2009/9/3 Carlos Martínez <carlos.f....@gmail.com>

Pablo Braulio

unread,
Sep 4, 2009, 4:24:39 AM9/4/09
to symfo...@googlegroups.com
Esto es una odisea.

Tengo este código.

<?php use_helper('Object', 'Javascript'); ?>


<?php echo javascript_tag(
"function mostrar(){

var campo= document.getElementById('gruposEmpresa');
if(campo.checked= 1){
campo.style.visibility= 'visible';
}
else{
campo.style.visibility= 'hidden';
}
}"); ?>

<div class="content">


<?php echo checkbox_tag('compartir_empleados',
$configurar_empresa->getCompartirEmpleados(), 0,

array('onclick'=>"mostrar();")) ?>
</div>
</div>
<div id="gruposEmpresa" style="visibility:hidden"><?php

echo object_select_tag($configurar_empresa,
'getGruposCompartirEmpleados', array(
'control_name' => 'compartirEmpleados',
'related_class' =>'Grupos',
'include_custom' => 'Ninguno',
'peer_method' => 'gruposEmpresas')) ?>
</div>

Esto funciona a medias. Es decir, si pulsas el checkbox se hace visible
la capa del select, pero si lo desactivas no se oculta. Ese es uno de
mis problemas.

Ahora probando con prototype.

Cambio el

var campo= document.getElementById('gruposEmpresa');

por

var campo= $('gruposEmpresa');

Resultado: no funciona.

He copiado la carpeta /usr/share/php/data/symfony/web/sf al directorio
web de mi proyecto.

He puesto en el archivo view.yml del módulo donde quiero ejecutar esto:

all:
stylesheets: [form]
javascripts: [%SF_PROTOTYPE_WEB_DIR%/sf/prototype]

Tambien he probado con:

all:
stylesheets: [form]
javascripts: [%SF_WEB_DIR%/sf/prototype]

El resultado es el mismo.

Ya no se que mas hacer.

Gracias por los comentarios.

Carlos Martínez escribió:


> me refiero a que copies toda la carpeta sf a tu carpeta web del proyecto
> no solo lo de prototype
>


--
Saludos cordiales.
Pablo.

KNO

unread,
Sep 4, 2009, 4:41:48 AM9/4/09
to symfo...@googlegroups.com
Lo primero, si no lo has hecho ya: firebug.
Con firebug, mira a ver si te ha cargado prototype (pestaña scripts y eliges prototype). Tiene que salir el código de prototype (ya sea comprimido o no) pero no html. Si te sale html, lo más probable es que sea la página 404, revisa la ruta que te está creando y si ahí puedes encontrar el .js

Si estás seguro que te está cargando prototype y sigues teniendo problemas, nos cuentas.

Sobre el fallo:
Para comparar usa doble "=":
if(campo.checked== 1){

kNo

2009/9/4 Pablo Braulio <bru...@gmail.com>

Pablo Braulio

unread,
Sep 4, 2009, 5:26:19 AM9/4/09
to symfo...@googlegroups.com
Hola.
Usando firebug, con esto en view.yml:

## YAML Template.
---


all:
stylesheets: [form]
javascripts: [%SF_PROTOTYPE_WEB_DIR%/sf/prototype]


En firebug, puls## YAML Template.
---
all:
stylesheets: [form]
javascripts: [%SF_WEB_DIR%/sf/prototype/js]o "scripts" y luego edit y
selecciono prototype.js. Esto es lo que muestra:

html><head>
3<title>404 Not Found</title>
4</head><body>
5<h1>Not Found</h1>
6<p>The requested URL /sf/prototype/sf/prototype.js was not found on
this server.</p>
7<hr>
8<address>Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.2 with Suhosin-Patch
mod_ssl/2.2.11 OpenSSL/0.9.8g Server at aldiges Port 443</address>
9</body></html>

Creo que es lo que tu decías.

Si cambio view.yml a esto:

## YAML Template.
---


all:
stylesheets: [form]
javascripts: [%SF_WEB_DIR%/sf/prototype]


El resultado:
1<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2<html><head>
3<title>404 Not Found</title>
4</head><body>
5<h1>Not Found</h1>
6<p>The requested URL
/home/pablo/NetBeansProjects/aldiges/trunk/web/sf/prototype/js.js was
not found on this server.</p>
7<hr>
8<address>Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.2 with Suhosin-Patch
mod_ssl/2.2.11 OpenSSL/0.9.8g Server at aldiges Port 443</address>
9</body></html>

La carpeta prototype contiene dos: css y js

Cambio de nuevo el view.yml:
## YAML Template.
---
all:
stylesheets: [form]
javascripts: [%SF_WEB_DIR%/sf/prototype/js]

Y el resultado:

1<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
2<html><head>
3<title>404 Not Found</title>
4</head><body>
5<h1>Not Found</h1>
6<p>The requested URL
/home/pablo/NetBeansProjects/aldiges/trunk/web/sf/prototype/js.js was
not found on this server.</p>
7<hr>
8<address>Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.2 with Suhosin-Patch
mod_ssl/2.2.11 OpenSSL/0.9.8g Server at aldiges Port 443</address>
9</body></html>

No lo carga de ninguna de las maneras.

Respecto a lo del error que dices que hay que poner ==1 en lugar de =1,
yo tengo entendido que con un sólo = lo que haces es asignar en lugar de
comparar, pero es que con dos iguales no funciona. La primera vez que
veo esto, pero así es.


KNO escribió:


> Lo primero, si no lo has hecho ya: firebug.
> Con firebug, mira a ver si te ha cargado prototype (pestaña scripts y
> eliges prototype). Tiene que salir el código de prototype (ya sea
> comprimido o no) pero no html. Si te sale html, lo más probable es que
> sea la página 404, revisa la ruta que te está creando y si ahí puedes
> encontrar el .js
>
> Si estás seguro que te está cargando prototype y sigues teniendo
> problemas, nos cuentas.
>
> Sobre el fallo:
> Para comparar usa doble "=":

> if(campo.checked*==* 1){
>
> kNo
>

--
Saludos cordiales.
Pablo.

KNO

unread,
Sep 4, 2009, 5:30:14 AM9/4/09
to symfo...@googlegroups.com
Prueba 
all:
  stylesheets: [form]
  javascripts: [%SF_WEB_DIR%/sf/prototype/js/prototype.js]

Lo del = me deja anonadado. Efectivamente debería ser una asignación, que, salvo que la apliques sobre "algo" que no pueda ser asignado (una función por ejemplo) debería dar siempre true.

Nos cuentas,

kNo

2009/9/4 Pablo Braulio <bru...@gmail.com>

Pablo Braulio

unread,
Sep 4, 2009, 5:42:23 AM9/4/09
to symfo...@googlegroups.com
Bueno.

Solucionado a medias.

En view.yml:

## YAML Template.
---
all:
stylesheets: [form]

javascripts: [%SF_PROTOTYPE_WEB_DIR%/js/prototype.js]

Lo que dice firebug:

/* Prototype JavaScript framework, version 1.5.0
2 * (c) 2005-2007 Sam Stephenson
3 *
4 * Prototype is freely distributable under the terms of an MIT-style
license.
5 * For details, see the Prototype web site: http://prototype.conio.net/
6 *
7/*--------------------------------------------------------------------------*/
8
9var Prototype = {
10 Version: '1.5.0',
11 BrowserFeatures: {
12 XPath: !!document.evaluate
13 }, ................

Ahora si.

Como complemento tengo que decir que no hace falta copiar la carpeta de
prototype en web.

Ahora en el código javascript, cambio el document.getElementById() por
$() y funciona. Pero lo del igual sigue dando problemas.

Gracias por la ayuda.

KNO escribió:


> Prueba
> all:
> stylesheets: [form]
> javascripts: [%SF_WEB_DIR%/sf/prototype/js/prototype.js]
>
> Lo del = me deja anonadado. Efectivamente debería ser una asignación,
> que, salvo que la apliques sobre "algo" que no pueda ser asignado (una
> función por ejemplo) debería dar siempre true.
>
> Nos cuentas,
>
> kNo
>

--
Saludos cordiales.
Pablo.

Pablo Braulio

unread,
Sep 4, 2009, 5:48:51 AM9/4/09
to symfo...@googlegroups.com
Ya está solucionado lo del ==.

Era un error tonto. Me había equivocado de ID.

El código se queda de este modo:

<?php use_helper('Object', 'Javascript'); ?>
<?php echo javascript_tag(
"function mostrar(){
var check= $('compartir_empleados');
var campo= $('gruposEmpresa');
if(check.checked== true){
campo.style.visibility= 'visible';
}
else{
campo.style.visibility= 'hidden';
}
}"); ?>
<div class="content">
<?php echo checkbox_tag('compartir_empleados',
$configurar_empresa->getCompartirEmpleados(), 0,
array('onclick'=>"mostrar();")) ?>
</div>
</div>
<div id="gruposEmpresa" style="visibility:hidden"><?php
echo object_select_tag($configurar_empresa,
'getGruposCompartirEmpleados', array(
'control_name' => 'compartirEmpleados',
'related_class' =>'Grupos',
'include_custom' => 'Ninguno',
'peer_method' => 'gruposEmpresas')) ?>
</div>

Supongo que se podría hacer de un modo mas elegante, pero bueno.

Muchas gracias por la ayuda.

KNO escribió:
> Prueba
> all:
> stylesheets: [form]
> javascripts: [%SF_WEB_DIR%/sf/prototype/js/prototype.js]
>
> Lo del = me deja anonadado. Efectivamente debería ser una asignación,
> que, salvo que la apliques sobre "algo" que no pueda ser asignado (una
> función por ejemplo) debería dar siempre true.
>
> Nos cuentas,
>
> kNo
>
> 2009/9/4 Pablo Braulio <bru...@gmail.com <mailto:bru...@gmail.com>>
--
Saludos cordiales.
Pablo.
Reply all
Reply to author
Forward
0 new messages