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

Problema con xajax+smarty+web modular

Estas en el tema de Problema con xajax+smarty+web modular en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, Uso suse linux y firefox. Mi programacion en php es modular con smarty, y quiero implementar xajax para ciertas cosas, tengo un modulo llamado ...
  #1 (permalink)  
Antiguo 19/07/2006, 16:08
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Problema con xajax+smarty+web modular

Hola,

Uso suse linux y firefox.
Mi programacion en php es modular con smarty, y quiero implementar xajax para ciertas cosas, tengo un modulo llamado galeria, el cual se estructura de la siguiente manera:

url: http://localhost/inmob/index.php?mod...ria&accion=zzz

index.php
Código PHP:
function principal(){

}

function 
xxx(){

}

function 
yyy(){

}

function 
zzz(){

}

switch(
$accion) {
   case 
"xxx":
    
xxx();
    break;
   case 
"yyy":
    
yyy();
    break;
   case 
"zzz":
    
zzz();
    break;
    default:
    
principal();
    break;

el problema es cuando quiero implementar xajax dentro de la función zzz()
es decir:
Código PHP:
function principal(){

}

function 
xxx(){

}

function 
yyy(){

}

function 
zzz(){

require_once(
"includes/xajax/xajax.inc.php");
$xajax = new xajax();
$xajax->debugOn(); // Uncomment this line to turn debugging on
$xajax->statusMessagesOn();
$xajax->registerFunction("MuestraImagen");
$xajax->processRequests();
//$xajax->printJavascript();
$smarty -> assign('xajax_javascript',$xajax->getJavascript('includes/xajax/'));

}

function 
MuestraImagen($image)
{
    require_once(
"includes/xajax/xajax.inc.php");
    
// do some stuff based on $arg like query data from a database and
    // put it into a variable like $newContent
    
$newContent  "<A HREF=\"javascript:popUp('modulos/galeria/images/$image')\" TITLE=\"Ver a tamano completo\">";
    
$newContent .= '<img  border=0 src="modulos/galeria/genthumbs.php?image='.$image.'&w=225" alt="'.$txtalt.'"><br>'.$descripcion.'<br><br>';

    
// FIN IMAGEN GRANDE    
    // Instantiate the xajaxResponse object
    
$objResponse = new xajaxResponse();
    
    
// add a command to the response to assign the innerHTML attribute of
    // the element with id="SomeElementId" to whatever the new content is
    
$objResponse->addAssign("SomeElementId","innerHTML"$newContent);
    
ob_end_clean();
    
//return the  xajaxResponse object
    
return $objResponse;
}
$accion=$_REQUEST['accion'];
switch(
$accion) {
   case 
"xxx":
    
xxx();
    break;
   case 
"yyy":
    
yyy();
    break;
   case 
"zzz":
    
zzz();
    break;
    default:
    
principal();
    break;

No funciona, me parece que el problema tiene relación al buffer de salida, no he podido solicionarlo. He probado con ob_end_clean(); pero no soliciona el problema.

me arroja el siguiente mensaje:

Código:
Error: the XML response that was returned from the server is invalid.
Received:
<html>
<head>
etc...
gracias por cualquier ayuda.

Última edición por zsamer; 19/07/2006 a las 19:07
  #2 (permalink)  
Antiguo 19/07/2006, 16:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
mmm mira no he jugado mucho con el xAjax, pero a mi parecer el problema reside en que solo estas definiendo el javascript nescesario cuando se manda llamar a zzz();

Entonces lo que tendrias que hacer es tu funcion MuestraImagen mandar llamar a zzz(); antes para que defina las variables y despues ya procesar el resultado.
  #3 (permalink)  
Antiguo 19/07/2006, 19:06
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
gracias GatorV, la funcion zzz muestra el detalle de la imagen, en el fondo es una funcion que muestra contenido del detalle de la imagen, por eso definí xajax dentro de la función zzz ya que en el contenido que muestra la esta funcion es donde quiero aplicar xajax.

Quizas este mal mi criterio, mi duda es si es correcto definir xajax dento de la función zzz o tendría que definirlo afuera.

gracias,

salu2
  #4 (permalink)  
Antiguo 19/07/2006, 21:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Segun los ejemplos que he visto va en un archivo por separado y tu solo llamas al file por su URL, porque aqui el problema que yo veo es que en tu primer llamada a zzz() va a dejinir el codigo.

Pero despues cuando llamas a tu metodo ajax, y trata de leer, ya no encuentra la definicion porque ya no esta creada (hay que llamar a zzz() primero).
  #5 (permalink)  
Antiguo 19/07/2006, 23:13
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
ok, gracias voy ver como lo resuelvo.
  #6 (permalink)  
Antiguo 20/07/2006, 04:06
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
A mi me ha dado muchos problemas del estilo "xml mal formado" simplemente por "tonterías" del propio Xajax . Por ejemplo, si estás dentro de la función que vas a usar dentro de Ajax, no puedes tener ninguna salida de error en pantalla, porque todo lo que salga será interpretado como parte del xml, y esto hará que sea "mal formado". De la misma forma, me pasó que por un "espacio en blanco" al final de un clase que era invocada por el fuente de xajax (era la que hacía la abstracción de la base de datos), me daba el mismo mensaje de error, cuando nunca había tenido problemas antes con esa clase (y perdí horas para encontrarlo).

Lo que te recomiendo es que veas la salida de debug del xajax y busques en que parte del código xml se inicia el error. Ayúdate también usando algún debug para javascripts que puedas instalar en Firefox.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 20/07/2006, 08:58
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
gracias, finalmente lo he solucionado.

alguien sabe como poder ocultar un contenedor o div (que se muestra por defecto) al momento de que carge un nuevo div con xajax.

salu2
  #8 (permalink)  
Antiguo 20/07/2006, 09:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por zsamer
gracias, finalmente lo he solucionado.

alguien sabe como poder ocultar un contenedor o div (que se muestra por defecto) al momento de que carge un nuevo div con xajax.

salu2
El tratamiento sería con javascript/DHTML en principio (por el efecto "visual" del lado del cliente) cualquier otra iteracción con el servidor (como para "informar" a tu script del lado del servidor que tal acción se produjo) sería con uso de Ajax. En ningún caso con "PHP por médio" .. (

Intenta exponer tu problema en el foro de "Javascript y/o Ajax" .. pero yo empezaría por el de javascript (e incluso algo de CSS por propiedades .. pero el evento en sí lo disparas con javascript y lo que tengas que ajustar tal vez sea CSS ..).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 20/07/2006, 10:04
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Como "retorno" y para que quede documentado para otros que puedan pasar por el mismo problema, comenta claramente cual fue el problema y como lo solucionaste.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 20/07/2006, 10:43
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
simplement la solucion fue crear el objeto xajax y registrar las funciones fuera de la función que muestra el detalle de las imagenes.
  #11 (permalink)  
Antiguo 20/07/2006, 10:43
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
El problema fue con el retorno del XML, el cual no le generaba correctamente, no me quedó muy claro el porque, pero lo solucioné creando el objeto xajax y registrar sus funciones fuera de la función que muestra el detalle de las imagenes (funcion zzz).

la estructura quedó de la siguiente forma:

modulo/galeria/index.php
Código PHP:
require_once("includes/xajax/xajax.functions.php");

function 
principal(){

}

function 
xxx(){

}

function 
yyy(){

}

function 
zzz(){


$smarty -> assign('xajax_javascript',$xajax->getJavascript('includes/xajax/'));
$smarty -> assign('fotos',$fotos);
$smarty -> assign('arrays_fotos',$arrays_fotos);
$smarty -> assign('arrays_plano',$arrays_plano);
$smarty -> assign('detalles',$detalles);
$smarty -> display('modulos/mod_galeria_detalle.tpl');
}

$accion=$_REQUEST['accion'];
switch(
$accion) {
   case 
"xxx":
    
xxx();
    break;
   case 
"yyy":
    
yyy();
    break;
   case 
"zzz":
    
zzz();
    break;
    default:
    
principal();
    break;

donde el archivo
xajax.functions.php :
Código PHP:
require_once("includes/xajax/xajax.inc.php");
$xajax = new xajax();

function 
MuestraImagen($image)
{
    require_once(
"includes/xajax/xajax.inc.php");
    
// do some stuff based on $arg like query data from a database and
    // put it into a variable like $newContent
    
$newContent  "<A HREF=\"javascript:popUp('modulos/galeria/images/$image')\" TITLE=\"Ver a tamano completo\">";
    
$newContent .= '<img  border=0 src="modulos/galeria/genthumbs.php?image='.$image.'&w=225" alt="'.$txtalt.'"><br>'.$descripcion.'<br><br>';

    
// FIN IMAGEN GRANDE    
    // Instantiate the xajaxResponse object
    
$objResponse = new xajaxResponse();
    
    
// add a command to the response to assign the innerHTML attribute of
    // the element with id="SomeElementId" to whatever the new content is
    
$objResponse->addAssign("default""style.display""none");
    
$objResponse->addAssign("SomeElementId","innerHTML"$newContent);
    
ob_end_clean();
    
//return the  xajaxResponse object
    
return $objResponse;
}

$xajax->debugOn(); // Uncomment this line to turn debugging on
$xajax->statusMessagesOn();
$xajax->registerFunction("MuestraImagen");
$xajax->processRequests(); 

Última edición por zsamer; 20/07/2006 a las 11:37
  #12 (permalink)  
Antiguo 20/07/2006, 11:35
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
También logré ocultar el contenedor o div por defecto, de la siguiente forma:

Código PHP:
$objResponse->addAssign("default""style.display""none"); 
donde default es el nombre del div a ocultar.
  #13 (permalink)  
Antiguo 20/07/2006, 13:26
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Impecable, ahora si quedó "didáctico"
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:53.