Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] devolver desde una funcion una cadena de texto que llame a otra función

Estas en el tema de devolver desde una funcion una cadena de texto que llame a otra función en el foro de PHP en Foros del Web. Buenos días a tod@s. Tengo un campo input de formulario y un botón. Cuando pulso sobre este último me aparece un calendario y cuando pulso ...
  #1 (permalink)  
Antiguo 17/09/2014, 05:51
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 10 meses
Puntos: 0
devolver desde una funcion una cadena de texto que llame a otra función

Buenos días a tod@s.

Tengo un campo input de formulario y un botón. Cuando pulso sobre este último me aparece un calendario y cuando pulso sobre cualquiera de los días ese valor pasa al campo input.
Mas o menos el código es así:

Código PHP:
<p>
                <label>Fecha de Alta&nbsp;&nbsp;<a onclick="show_calendar()" style="cursor: pointer;"><small><img src="images/calendario.jpg" /></small></a><br />
                <input readonly="readonly" class="text" type="text" name="per_fecha_alta" id="per_fecha_alta" value="<?php echo convierte_fecha_a_spanish($personal["per_fecha_alta"])?>" />
                <div id="calendario" class="calendario_izquierda" style="display:none;position:relative;background-color: white"><?php calendar_html(); ?></div>
                </label>
            </p>
Como veis en este código se llama a otra función: calendar_html().
Como este tipo de campos son bastante comunes en el programa que estoy usando he pensado en hacer una función a la que llamo y esta me debería devolver el código de arriba, de esta
forma yo solo llamo a la función y automáticamente me carga el texto por pantalla, y así me evito escribir tantas veces siempre lo mismo.
La llamada a la función quedaría así:

echo muestra_campo_fecha("Fecha de Alta", convierte_fecha_a_spanish($personal["per_fecha_alta"]), "per_fecha_alta");

Y la función sería algo así:

function muestra_campo_fecha($p_texto, $p_valor, $p_nombre_campo){

Código PHP:
$v_html '<p>
                <label>'
.$p_texto.'&nbsp;&nbsp;<a onclick="show_calendar()" style="cursor: pointer;"><small><img src="images/calendario.jpg" /></small></a><br />
                <input readonly="readonly" class="text" type="text" name="'
.$p_nombre_campo.'" id="'.$p_nombre_campo.'" value="'.$p_valor.'" />
                <div id="calendario" class="calendario_izquierda" style="display:none;position:relative;background-color: white">'
.calendar_html().'</div>
                </label>
            </p>'
;
    return 
$v_html;

El problema es que calendar_html llama es otra función y es ahí cuando se me estropea todo el código. ¿Exsite alguna función propia de php para estos casos?
Para salir del paso he podido hacer una especie de arreglo y en vez de llamar a una función primero defino las varialbes y después llamo a un include, quedaría de esta forma:

Código PHP:
<?php
    $v_texto 
"Fecha de Nacimiento";
    
$v_valor $personal["per_fecha_nacimiento"];
    
$v_campo "per_fecha_nacimiento";
    
    include(
"fechas.php"); 
    
?>
Donde fechas.php lleva únicamente el siguiente código:

Código PHP:
        <p>
            <label><?php echo $v_texto?>&nbsp;&nbsp;<a onclick="show_calendar()" style="cursor: pointer;"><small><img src="images/calendario.jpg" /></small></a><br />
            </label>

          <input readonly="readonly" class="text" type="text" name="<?php echo $v_campo?>" id="<?php echo $v_campo?>" value="<?php echo convierte_fecha_a_spanish($v_valor)?>" />
          <div id="calendario" class="calendario_izquierda" style="display:none;position:relative;background-color: white"><?php calendar_html(); ?></div>
        </p>
Pero aunque funcione perfectamente no lo veo limpio y me gustaría saber si alguien sabe como hacer que funcione el problema que tengo, en resumidas cuentas sería:
¿como devolver desde una funcion una cadena de texto que llame a otra función?

Muchas gracias
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #2 (permalink)  
Antiguo 17/09/2014, 07:31
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: devolver desde una funcion una cadena de texto que llame a otra función

no veo la necedidad de hacer lo que queers hacer, le estas buscando el pelo al huevo.

igual se puede:
Código PHP:
Ver original
  1. <?
  2. $fx = "mi_funcion()";
  3. eval($fx);
  4. ?>

http://php.net/manual/es/function.eval.php
  #3 (permalink)  
Antiguo 17/09/2014, 09:09
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: devolver desde una funcion una cadena de texto que llame a otra función

Casi pero no.
El problema está en que dentro de la funcion se llama a otra función y esta no está dentro de ella.
Realmente lo que necesito es obtener el mismo resultado que conseguiría con el ejemplo que he puesto del include pero haciendo con funciones para que quede mas limpio
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #4 (permalink)  
Antiguo 17/09/2014, 09:11
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: devolver desde una funcion una cadena de texto que llame a otra función

Muchas gracias Patriarka por responder tan pronto
Casi pero no.
El problema está en que dentro de la funcion se llama a otra función y esta no está dentro de ella.
Realmente lo que necesito es obtener el mismo resultado que conseguiría con el ejemplo que he puesto del include pero haciendo con funciones para que quede mas limpio
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #5 (permalink)  
Antiguo 17/09/2014, 09:36
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: devolver desde una funcion una cadena de texto que llame a otra función

y hacelo en una clase, deberias tener todo encapsulado
  #6 (permalink)  
Antiguo 17/09/2014, 10:29
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: devolver desde una funcion una cadena de texto que llame a otra función

Esta todo en clases, he hablado de funciones y he puesto el código de estas para abreviar.
Aún así sigue sin darme el resultado que quiero la función eval que comentas... ¿mas ideas?
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #7 (permalink)  
Antiguo 17/09/2014, 13:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: devolver desde una funcion una cadena de texto que llame a otra función

Creo que el problema básicamente se encuentra en la función calendar_html(), porque si dicha función no devuelve (usando return) una cadena de HTML entonces no importa cuantos trucos hagas pues jamás devolverá nada.

Aunque bueno, si la función tampoco devuelve nada pero sí imprime código HTML entonces puedes usar buffers para capturar toda la salia que genera y al final devolverla con return:

Código PHP:
Ver original
  1. function algo() {
  2.   ob_start();
  3.  
  4.   echo 'algo de html';
  5.  
  6.   aqui_invoco_cualquier_funcion_aunque_no_devuelva_nada();
  7.  
  8.   return ob_get_clean();
  9. }

¿Será?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 17/09/2014, 23:10
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: devolver desde una funcion una cadena de texto que llame a otra función

Gracias por responder pateketrueke.
Al final lo he solucionado con el sistema que me indicó patriarka, Muchas gracias.

Por si alguien le pasa:
El problema lo tenía en la respuesta de la función calendar_html en el que el texto devuelto contenía tanto comillas simples (') como dobles (") y al hacer eval se confundía y no sacaba nada por pantalla.
Para solucionarlo he cargado en una variable la información de la función, luego he realizado un replace y dicha variable la he añadido al código que se le pasa a eval, os dejo el código:

Código PHP:
Ver original
  1. $v_calendario = str_replace("'", "'", calendar_html());
  2. //echo $v_calendario;
  3.     return "echo '<p>
  4.             <label>$p_texto&nbsp;&nbsp;<a onclick=\"show_calendar()\" style=\"cursor: pointer;\"><small><img src=\"images/calendario.jpg\" /></small></a><br />
  5.             </label>
  6.           <input readonly=\"readonly\" class=\"text\" type=\"text\" name=\"$p_campo\" id=\"$p_campo\" value=\"$p_valor\" />
  7.           <div id=\"calendario\" class=\"calendario_izquierda\" style=\"display:none;position:relative;background-color: white\">$v_calendario</div>
  8.         </p>';";

Como veis el "truco" consiste en escapar las comillas del código que le pasas a eval!!!

Nota: La función show_calendar() no es necesario tocarla ya que es una llamada a javascript

Gracias a todos!!!!
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #9 (permalink)  
Antiguo 18/09/2014, 21:03
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: devolver desde una funcion una cadena de texto que llame a otra función

si igual sigo pensando que hacés las cosas de una manera muy complicada e innecesaria

Etiquetas: cadena, devolver, fecha, formulario, funcion, html
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 15:18.