Foros del Web » Programando para Internet » PHP »

Pasar como parámetro objetos

Estas en el tema de Pasar como parámetro objetos en el foro de PHP en Foros del Web. Hola, Soy nuevo en PHP y me temo que la respuesta es no, pero mi duda es la siguiente: ¿ Se puede pasar como parámetro ...
  #1 (permalink)  
Antiguo 25/09/2011, 04:40
 
Fecha de Ingreso: septiembre-2011
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Pregunta Pasar como parámetro objetos

Hola,

Soy nuevo en PHP y me temo que la respuesta es no, pero mi duda es la siguiente:
¿ Se puede pasar como parámetro una referencia a un objeto en una URL?

Es decir, desde una página en php cargo otra al hacer click sobre un botón y me gustaría que ésta segunda pudiera manipular un objeto de la primera a través de una referencia para obtener un valor ¿es posible?

El planteamiento completo es el siguiente:

- Cargo dinámicamente una serie de objetos asociados por pares, siendo éstos de tipo botón y tipo caja de texto.
- La única acción que puedo asociar a éste botón, es del tipo:
$button->setAction("javascript: window.open( ... )");

- Problema: Si paso aquí como parámetro el valor, será el valor actual pero no el valor en el momento de pulsar el botón.

Muchas gracias
  #2 (permalink)  
Antiguo 25/09/2011, 07:00
Avatar de Smolky  
Fecha de Ingreso: mayo-2006
Ubicación: Cartagena
Mensajes: 177
Antigüedad: 18 años
Puntos: 14
Respuesta: Pasar como parámetro objetos

Con cada refresco de página (al cambiar de sección) los objetos se pierden por lo que te sería inútil pasar una referencia de un objeto porque dicho objeto en la segunda página no existirá.

En la segunda página tendrás que volver a crear el objeto de cero. Una cosa que puedes hacer es guardar el objeto en sesión para luego recuperarlo aunque seguramente tendrás que realizar opciones con serialize para poder preparar el objeto de forma en que sea almacenable.

¿De cuantos objetos estamos hablando?

P. D: Aquí tienes más información sobre serializar: http://www.php.net/manual/es/languag...ialization.php
__________________
No hay cuerda desafinada sino músico progresivo

Última edición por Smolky; 25/09/2011 a las 07:02 Razón: Añadir más información
  #3 (permalink)  
Antiguo 25/09/2011, 09:05
 
Fecha de Ingreso: septiembre-2011
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Pasar como parámetro objetos

Gracias Smolky, no conocía serialize y tiene buena pinta pero me he encontrado con otro problema al intentar escribir en el fichero, me da problema de permisos a pesar de que he concedido todos (777) en el directorio donde deseo escribir.

Otra opción que había pensado era asociar el valor de la variable php a una de js en la acción del botón pero tampoco parece tener efecto:

$button->setAction("javascript: var variable='<? echo $text->getValue(); ?>'; window.open( ... )");

¿alguna idea?
  #4 (permalink)  
Antiguo 25/09/2011, 10:01
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Pasar como parámetro objetos

Código PHP:
Ver original
  1. $button->setAction("javascript: var variable='<? echo $text->getValue(); ?>'; window.open( ... )");
No es necesario abrir etiquetas PHP, despues de todo ya estas dentro de codigo PHP.
Código PHP:
Ver original
  1. $button->setAction("javascript: var variable='".$text->getValue()."'; window.open( ... )");
  #5 (permalink)  
Antiguo 25/09/2011, 10:23
 
Fecha de Ingreso: septiembre-2011
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Pasar como parámetro objetos

Gracias Ronruby, pero me temo que así, sigo en el mismo caso que al principio. Yo quisiera que esa instrucción cargase el valor de $text->getValue() en el momento de ejecutar la acción pero sustituye el valor (hace la llamada) en el momento asociar la acción ... ¿ alguna alternativa ?
  #6 (permalink)  
Antiguo 26/09/2011, 02:03
Avatar de Smolky  
Fecha de Ingreso: mayo-2006
Ubicación: Cartagena
Mensajes: 177
Antigüedad: 18 años
Puntos: 14
Respuesta: Pasar como parámetro objetos

¿Qué evento es setAction? Es decir, cuando asocias eso al botón cuándo debería dispararse el evento. ¿En un onclick?
__________________
No hay cuerda desafinada sino músico progresivo
  #7 (permalink)  
Antiguo 26/09/2011, 02:05
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Pasar como parámetro objetos

Si es php no se disparará con un evento de la parte cliente, no?
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #8 (permalink)  
Antiguo 26/09/2011, 03:15
 
Fecha de Ingreso: septiembre-2011
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Pasar como parámetro objetos

Sí, setAction asocia la acción a un evento onClick.

Entiendo que el código en el que se hace la asociación de la acción al botón es php, pero el código asociado al botón es js ... ¿no debería ejecutarse? De hecho se ejecuta, pero como deseo tomar el valor de un objeto creado en php, la sustitución del valor se hace al cargar la página y no veo forma de tenerlo disponible en el momento del evento onClick.
  #9 (permalink)  
Antiguo 26/09/2011, 04:03
Avatar de Smolky  
Fecha de Ingreso: mayo-2006
Ubicación: Cartagena
Mensajes: 177
Antigüedad: 18 años
Puntos: 14
Respuesta: Pasar como parámetro objetos

No estoy seguro de entenderte.

Código HTML:
Ver original
  1. <a href="#" onclick="windows.alert ('<?php echo $variable;?>')">Enlace</a>

Esto, salvo algún error de sintaxis que haya puesto, funciona debido a que el HTML es generado después del PHP y al pulsar sobre el enlace se imprimirá el valor de variable

Intentaré ser un poco más claro:
Este es tú código:
Código HTML:
Ver original
  1. <a href="#" onclick="windows.alert ('<?php echo $variable;?>')">Enlace</a>

Este es el código tras la interpretación de PHP suponiendo un valor de $variable
Código HTML:
Ver original
  1. <a href="#" onclick="windows.alert ('esto-vale-la-variable')">Enlace</a>

Por lo que cuando ejecutes el botón imprimirá dicho texto.
__________________
No hay cuerda desafinada sino músico progresivo
  #10 (permalink)  
Antiguo 26/09/2011, 05:01
 
Fecha de Ingreso: septiembre-2011
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Pasar como parámetro objetos

Creo que es un poco más complejo que eso. La definición del botón y la asignación de la acción es de la forma siguiente:

Código PHP:
Ver original
  1. $apply_button= new CButton("applyButton",S_APPLY_BUTTON);
  2. $apply_button->setAction("javascript: var variable='".$text_box->getValue()."';document.write(variable);");

La clase CButton (métodos relevantes) es la siguiente:

Código PHP:
Ver original
  1. <?php
  2. class CButton extends CTag{
  3.     public function __construct($name='button', $caption='', $action=NULL, $submit=true){
  4.         parent::__construct('input','no');
  5.         $this->tag_body_start = '';
  6.        
  7.         $this->attributes['type'] = $submit?'submit':'button';
  8.  
  9.         $this->setAttribute('value', $caption);
  10.         $this->attributes['class'] = 'button';
  11.         $this->attributes['id'] = $name;
  12.         $this->setName($name);
  13.         $this->setAction($action);
  14.     }
  15.  
  16.     public function setAction($value=null){
  17.         $this->addAction('onclick', $value);
  18.     }
  19. }
  20. ?>

El método addAction de CTag de la que hereda:

Código PHP:
Ver original
  1. public function setAttribute($name, $value){
  2.         if(is_object($value)){
  3.             $this->attributes[$name] = unpack_object($value);
  4.         }
  5.         else if(isset($value))
  6.             $this->attributes[$name] = htmlspecialchars(str_replace(array("\r", "\n"), '', strval($value)));
  7.         else
  8.             unset($this->attributes[$name]);
  9.     }

El problema es que no veo forma de referenciar el valor del objeto creado en php desde js en el momento de apretar el botón. Cualquier otra acción funciona perfectamente al presionar el botón (evento onClick) pero no asocia el valor del text_box en ese momento de presionar, si no el valor en el momento de cargar el objeto en la página (no se si ahora se entenderá un poco mejor o todo lo contrario ...)
  #11 (permalink)  
Antiguo 26/09/2011, 05:36
Avatar de Smolky  
Fecha de Ingreso: mayo-2006
Ubicación: Cartagena
Mensajes: 177
Antigüedad: 18 años
Puntos: 14
Respuesta: Pasar como parámetro objetos

¿Podrías también poner el código generado en HTML? Por que deduzco que habrá algún método que sirva para renderizar dicho botón.
__________________
No hay cuerda desafinada sino músico progresivo

Etiquetas: objetos
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 18:03.