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.
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.
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 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.
El checkbox tiene id?
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.
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.
En tu desarrollo utilizas algun framework javascript tipo jquery, motools, prototype....
El checkbox tiene id?
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.
## 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.
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.