Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

problema con llamada xajax entre varias páginas

Estas en el tema de problema con llamada xajax entre varias páginas en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola. Hace un tiempo os pregunté por la forma para incluir páginas externas de funciones, dependiendo de una condición. Eso está superado, pero ahora me ...
  #1 (permalink)  
Antiguo 27/04/2012, 04:36
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
problema con llamada xajax entre varias páginas

Hola.
Hace un tiempo os pregunté por la forma para incluir páginas externas de funciones, dependiendo de una condición.
Eso está superado, pero ahora me ha surgido un problema importante que no entiendo.
Lo primero deciros que tengo un index que llama a una página inicial de funciones, entre las cuales hay una de logueo. Dependiendo del nivel del usuario que se loguee se llama a una página u otra.
Hasta ahí bien.
Tengo, por ejemplo:
index.php
funciones_index.php
funciones_usuario_nivel1.php

index llama solo a funciones_index y ésta es la que se encarga de llamar al resto.
Llama a funciones_usuario_nivel1.php, a una función que muestra un menú. El menú se carga y desde el mismo quiero llamar a otras funciones dependiendo de la opción que se pulse.
Ocurre que boton1 llama a la función funcion1 y si pongo funcion1 en la página funciones_usuario_nivel1 firebug me lanza la advertencia
<b>Warning</b>: call_user_func_array() [<a href='function.call-user-func-array'>function.call-user-func-array</a>]: First argument is expected to be a valid callback, 'funcion1' was given in <b>/var/www/vhosts/mipag.es/ruta1/ruta2/includes/xajax_0.5_compiled/xajax_core/xajaxAIO.inc.php</b> on line <b>1077
En cambio si funcion1 la pongo en funciones_index.php no me da ningún error y la carga correctamente.

Paso a comentaros como tengo estructurada la llamada al framework
Código PHP:
Ver original
  1. //en index.php
  2. <?php
  3. require_once ('includes/xajax_0.5_compiled/xajax_core/xajaxAIO.inc.php');
  4. require('funciones_index.php');
  5. ?>
  6.  
  7. <head>
  8. <?php
  9. $xajax->printJavascript("./includes/xajax_0.5_compiled");
  10. ?>
  11. </head>
  12.  
  13.  
  14. //en funciones_index.php
  15. $xajax = new xajax();
  16. $xajax->setCharEncoding('iso-8859-1');
  17. $xajax->register(XAJAX_FUNCTION, "funcionlogueo");
  18. $xajax->register(XAJAX_FUNCTION, "funcion1");
  19. .
  20. .
  21. .
  22. function funcionlogueo
  23. {
  24. $respuesta = new xajaxResponse();
  25. $response = cargamenu();
  26. $respuesta->loadCommands($response);
  27. return $respuesta;
  28. }
  29. .
  30. .
  31. .
  32.  
  33. $xajax->processRequest();
  34.  
  35. //en funciones_usuario_nivel1.php
  36. .
  37. .
  38. .
  39. function cargamenu()
  40. {
  41. $respuesta = new xajaxResponse();
  42. $response = funcion1();
  43. $respuesta->loadCommands($response);
  44. return $respuesta;
  45. }

Como os decía antes, si función 1 la pongo en funciones_usuario_nivel1.php me lanza el error al debuggearlo. En cambio si la pongo en funciones_index.php lo hace todo correctamente.

Alguien sabe por qué pasa ésto? Qué estoy haciendo mal?
Un saludo!!
  #2 (permalink)  
Antiguo 30/04/2012, 09:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: problema con llamada xajax entre varias páginas

El problema es porque debes de hacer un include siempre que quieras usar una función que este definida en otro archivo, no puedes usar una función que esta definida en otro archivo sin hacer el include correspondiente o te va a dar ese error.

Saludos.
  #3 (permalink)  
Antiguo 02/05/2012, 00:31
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: problema con llamada xajax entre varias páginas

Hola gatorv.
Gracias por tu respuesta.
Ahora mi pregunta es, qué debo incluir? dónde? La página de funciones_usuario_nivel1.php la incluyo con la condición.
Gracias!!
  #4 (permalink)  
Antiguo 02/05/2012, 09:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: problema con llamada xajax entre varias páginas

Pues tienes que incluir desde donde estés llamando la función, ej: sí en pagina1.php estas llamando a funcion1() que esta en funciones.php desde pagina1.php tienes que hacer un require() de funciones.php.

Saludos.
  #5 (permalink)  
Antiguo 03/05/2012, 00:27
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: problema con llamada xajax entre varias páginas

Mmmm, creo que no me he enterado muy bien de lo que dices.

En pagina1.php ya incluyo funciones.php dependiendo de una condición. Y funcion1() me la carga. Pero yo en pagina1.php es donde creo el objeto xajax y registro las funciones.

Entonces, desde pagina1.php he llamado a funcion1() que está en funciones.php y por ejemplo, funcion1() carga un menú asociado al usuario que ha entrado. El menú lo carga. Pero desde el menú quiero llamar a funcion2() que está situada en funciones.php también y declarada en pagina1.php. Es entonces cuando me lanza el error que especifiqué antes y no me carga nada.

He probado llamar a pagina1.php desde funciones.php y, claro, se duplica la declaración de funciones. También he probado crear una página aparte sólo con el registro de las funciones y tampoco.

Mi pregunta era que si funcion1() y funcion2() se encuentran en funciones.php, página que es llamada desde pagina1.php, donde, como he dicho antes, se crea el objeto xajax y se registran las funciones. Por qué funcion1() no puede llamar a funcion2() a no ser que esta última esté en pagina1.php??

Muchas gracias!!

Última edición por aniMAYtions; 03/05/2012 a las 01:02
  #6 (permalink)  
Antiguo 03/05/2012, 08:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: problema con llamada xajax entre varias páginas

Es lo mismo, el error te lo muestra por una razón, y como tu mismo indicas, si pones la función en el mismo archivo funciona, esto es porque no lo estas incluyendo, el include (o require) lo debes de hacer global al inicio del archivo, así todas las funciones van a estar disponibles en el archivo principal, y así no te dará error de que no esta definida.

Saludos.
  #7 (permalink)  
Antiguo 04/05/2012, 01:40
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: problema con llamada xajax entre varias páginas

Pero claro, la condición por la se carga una u otra página no puede ir al principio pues depende del nivel de usuario en el logueo.
Y si hago esa condición es para que no se carguen todas las páginas...
Hay alguna forma de hacer eso?
Gracias de nuevo!!
  #8 (permalink)  
Antiguo 04/05/2012, 11:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: problema con llamada xajax entre varias páginas

Entonces tienes un error en tu diseño, no deberías de condicionar los includes, en base al usuario, más bien tus funciones deberían de aceptar parámetros para que tengas todas las funciones definidas y así actúen de forma diferente, por ejemplo:
Código PHP:
Ver original
  1. function dameMenu($nivel_usuario = 0) {
  2.       // Aquí pones la lógica para poner un menu en base al nivel
  3. }

Así haces tu diseño más extensible, ya que al aceptar parámetros puedes tener diferentes niveles, y todo sin condicionar o no los includes.

Saludos.
  #9 (permalink)  
Antiguo 07/05/2012, 01:29
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: problema con llamada xajax entre varias páginas

Eso ya lo hice, GatorV.
Y tenía una página de funciones de unas 10000 líneas de código. La aplicación iba lentísima y supongo que era por eso mismo, por la cantidad de código a cargar, aunque no se necesitase. Con tanta condición se relentiza mucho todo.
Si no divido las funciones, algunas de ellas pueden ocupar 500 líneas o más.
Me gustaría que se cargaran sólo las propias de cada usuario y que las otras ni ocupasen espacio en el transcurrir de la aplicación.
Si el usuario es de nivel 1 que se carguen sólo las funciones de nivel 1, no las de nivel 2 ni las de nivel 3
  #10 (permalink)  
Antiguo 07/05/2012, 09:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: problema con llamada xajax entre varias páginas

Pues como te digo, el problema es que tienes un error de diseño en tu aplicación, y si no incluyes las funciones correctas en el momento correcto, te va a seguir dando el mismo error, es la forma como trabaja PHP, tienes que forzosamente incluir el archivo donde esta la definición e implementación de la función que quieres llamar antes de llamar a la función.

Otra forma que lo puedes hacer es que uses Programación Orientada a Objetos y uses un Autoloader, que te permite hacer primero la llamada a la clase, y si esta no esta definida hace un callback a un Autoloader para incluir la clase.

Solamente que esa opción solamente funciona con POO, no con funciones planas como lo tienes aquí diseñado.

Saludos.
  #11 (permalink)  
Antiguo 07/05/2012, 09:36
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: problema con llamada xajax entre varias páginas

Aiinsss, ya no tengo tiempo de preparar la aplicación en modo POO.
Para la próxima revisión quizás.
Gracias!!
  #12 (permalink)  
Antiguo 08/05/2012, 06:43
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: problema con llamada xajax entre varias páginas

Bueno, sé que es una "trampa" y no sé hasta dónde podré llegar, pero he encontrado una solución.
He hecho que cuando se loguee el usuario, se recargue la página. Entonces, como se vuelve a llamar a funciones.php, en esta he puesto que si el usuario es de nivel1 se cargue funciones1.php, si es de nivel2 pues se carga funciones2.php y así sucesivamente.
Por ahora funciona y me ha ganado velocidad.
Gracias por todo y un saludo!!

Etiquetas: framework, llamada, páginas, php, xajax
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:11.