Foros del Web » Programando para Internet » PHP »

Ayuda, ¿cómo enfrento esta situación?

Estas en el tema de Ayuda, ¿cómo enfrento esta situación? en el foro de PHP en Foros del Web. Hola amigos, soy nuevo en el foro y espero que me puedan ayudar con esto, estoy realizando un script y de la forma como la ...
  #1 (permalink)  
Antiguo 01/02/2010, 18:39
Avatar de Fleon  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 2 meses
Puntos: 3
Ayuda, ¿cómo enfrento esta situación?

Hola amigos, soy nuevo en el foro y espero que me puedan ayudar con esto, estoy realizando un script y de la forma como la estoy programando no me está funcionando, fíjense, tengo un index.php con el siguiente code:

Código PHP:
<?php

// Cargamos las configuraciones...
require_once(dirname(__FILE__) . '/Settings.php');

//Cargamos otras configuraciones importantes...
require_once($sourcedir '/Functions.php');
require_once(
$sourcedir '/Themes.php');

    
// Aquí definimos las acciones a través de $_REQUEST['action'] array - $_REQUEST['action'] => array($file, $function).
    
$actionArray = array(
        
//Zona de secciones
        
'antros' => array('Themes.php''Antros'),
        
'contacto' => array('Themes.php''Contacto'),
        
'libros' => array('Themes.php''Libros'),
        
'musica' => array('Themes.php''Musica'),
        
'teatro' => array('Themes.php''Teatro'),
        
'tecnologia' => array('Themes.php''Tecnologia'),
        
'turismo' => array('Themes.php''Turismo'),
        
//Fin Zona de secciones
    
);
    
   
// Obtenemos el archivo y la función - Si no se encuentra lo mandamos al inicio
    
if (!isset($_REQUEST['action']) || !isset($actionArray[$_REQUEST['action']]))
    {
        
LoadTemplate('Index');
    } else {
        
// De lo contrario si existe pues allá lo enviamos
        
require_once($sourcedir '/' $actionArray[$_REQUEST['action']][0]);
        return 
$actionArray[$_REQUEST['action']][1].'()';    
    }
    
?>
Como verán estoy tratando tener un index con acciones tal que el link quede de esta manera:

Cita:
http://localhost/index.php?action=antros
donde "action=antros" carga una plantilla, como lo muestra en el array $actionArray donde coloco archivo y el nombre de una funcion dentro de ese archivo.

Ahora bien el problema mío es que no puedo cargar una plantilla(HTML), en este caso index.template.php, dicha función que carga la plantilla se llama LoadTemplate() que queda así:

Código PHP:
function LoadTemplate($template_name)
{

$loaded false;

// Cargamos las configuraciones...

    // ¿No hay plantilla que cargar?
    
if ($template_name === false)
        return 
true;
        
    if (
file_exists($template_dir '/' $template_name '.template.php'))
        {        
            
$loaded true;
            include 
$template_dir '/' $template_name '.template.php';    
            break;
        }
        
    if (
$loaded)
    {
        
LoadTemplate($template_name);
    }

Pues al entrar en index.php no me muestra nada, y tengo una plantilla index.template.php con un contenido de texto de prueba, os pongo los demás archivos como lo tengo:

Themes.php

Código PHP:
<?php
function Index()
{
    
LoadTemplate('Index');
}        

?>
Settings.php

Código PHP:
<?php

//Configuramos las localizaciones de los archivos claves
$sourcedir 'C:\AppServ\www\orbe/Sources'//Dirección donde se encuentran los archivos claves
$scripturl 'http://Localhost/orbe/index.php'//URL hacia la Web
$indexpath 'C:\AppServ\www\orbe'//Direccion donde está ubicada el archivo index.php
$imgdir 'C:\AppServ\www\orbe/Images'//Dirección donde se encuentran las imágenes claves
$template_dir 'C:\AppServ\www\orbe/Template'//Dirección donde se encuentran las plantillas claves

?>
¿Cómo me enfrento a este problema?.

Saludos.
  #2 (permalink)  
Antiguo 01/02/2010, 20:18
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Ayuda, ¿cómo enfrento esta situación?

¡Bienvenido al foro!
Mira, le eché unojo a tu código pero muy por arriba. De lo que pude observar: en el index tienes un return que no está dentro de ninguna función, y la función LoadTemplate se llama recursivamente de un modo infinito (una vez que ingresó a la parte recursiva, no tiene un caso de "corte"). ¡Suerte!
  #3 (permalink)  
Antiguo 01/02/2010, 20:26
Avatar de Fleon  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 2 meses
Puntos: 3
Respuesta: Ayuda, ¿cómo enfrento esta situación?

Cita:
Iniciado por dggluz Ver Mensaje
¡Bienvenido al foro!
Mira, le eché unojo a tu código pero muy por arriba. De lo que pude observar: en el index tienes un return que no está dentro de ninguna función, y la función LoadTemplate se llama recursivamente de un modo infinito (una vez que ingresó a la parte recursiva, no tiene un caso de "corte"). ¡Suerte!

Hola ddgluz, caray, tienes razón sobre el index :, lo del LoadTemplate no entiendo lo que me quieres decir, ¿te refieres a un Break?.

Saludos.
  #4 (permalink)  
Antiguo 01/02/2010, 20:54
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Respuesta: Ayuda, ¿cómo enfrento esta situación?

loading............

El loadTemplate lo tienes mal, deberia ser asi.

Código PHP:

function LoadTemplate($template_name=false)
{

// Cargamos las configuraciones...

    // ¿No hay plantilla que cargar?
    
if ($template_name === false)
    {
        return 
true;
    }
    
$template_file=$template_dir '/' $template_name '.template.php';
    if (
file_exists($template_file))
    {        
                include_once 
$template_file;
    }


connection closed.
__________________

Maborak Technologies
  #5 (permalink)  
Antiguo 01/02/2010, 21:04
Avatar de Fleon  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 2 meses
Puntos: 3
Respuesta: Ayuda, ¿cómo enfrento esta situación?

Hola MaBoRak, probé tu versión y aún no me sale nada, ¿puede ser mi Index que esté mal?, ahora mismo lo tengo así:

Código PHP:
<?php

// Cargamos las configuraciones...
require_once(dirname(__FILE__) . '/Settings.php');

//Cargamos otras configuraciones importantes...
require_once($sourcedir '/Functions.php');
require_once(
$sourcedir '/Themes.php');

function 
Main()
{
    
// Aquí definimos las acciones a través de $_REQUEST['action'] array - $_REQUEST['action'] => array($file, $function).
    
$actionArray = array(
        
//Zona de secciones
        
'antros' => array('Themes.php''Antros'),
        
'contacto' => array('Themes.php''Contacto'),
        
'libros' => array('Themes.php''Libros'),
        
'musica' => array('Themes.php''Musica'),
        
'teatro' => array('Themes.php''Teatro'),
        
'tecnologia' => array('Themes.php''Tecnologia'),
        
'turismo' => array('Themes.php''Turismo'),
        
//Fin Zona de secciones
    
);
    
   
// Obtenemos el archivo y la función - Si no se encuentra lo mandamos al inicio
    
if (!isset($_REQUEST['action']) || !isset($actionArray[$_REQUEST['action']]))
    {
        
LoadTemplate('Index');
    } else {
        
// De lo contrario si existe pues allá lo enviamos
        
require_once($sourcedir '/' $actionArray[$_REQUEST['action']][0]);
        return 
$actionArray[$_REQUEST['action']][1].'()';    
    }
}

Main();    
    
?>
Y no sé donde estoy fallando
  #6 (permalink)  
Antiguo 02/02/2010, 09:17
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Ayuda, ¿cómo enfrento esta situación?

Lo que digo es que en la función LoadTemplate, una vez que se corroboró que $template_name es distinto de false, entras en una estructura if que setea un flag ($loaded)... ese mismo flag es luego la única condición para entrar a otra estructura if donde vuelves a llamar a la función con los mismos parámetros. Es decir, en primer lugar que la segunda estructura if (en realidad es la tercera) está de más, porque siempre que entre en la anterior entrará luego en esa. En segundo lugar, que lo que haces dentro de ésta (volver a llamar a la función) crea un flujo recursivo infinito, pues llamas a la función con exactamente los mismos parámetros. El break que pones no hace nada, puesto que el break sólo te permite de salir de estructuras while, do-while, for, foreach y switch (http://php.net/manual/en/control-structures.break.php). De todos modos, no sé si ese es el único error o hay algún otro. ¡Suerte!
  #7 (permalink)  
Antiguo 02/02/2010, 09:23
Avatar de Fleon  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 2 meses
Puntos: 3
Respuesta: Ayuda, ¿cómo enfrento esta situación?

Hola dggluz, gracias de nuevo, la versión del LoadTemplate de MaBoRak es la que tengo ahora pues considero que es mucho más sencillo y más claro :p, por lo que me queda por definir si es en donde estoy fallando en el Index, porque no me muestra ninguna plantilla, no me sale ningún error sólo que se queda en blanco. :(

Saludos.
  #8 (permalink)  
Antiguo 02/02/2010, 11:11
Avatar de Fleon  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 2 meses
Puntos: 3
Respuesta: Ayuda, ¿cómo enfrento esta situación?

De nuevo yo , actualizando, el Index.php quedó así:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function Main()
  4. {
  5. // Cargamos las configuraciones...
  6. require_once(dirname(__FILE__) . '/Settings.php');
  7.  
  8. //Cargamos otras configuraciones importantes...
  9. require_once($sourcedir . '/Functions.php');
  10.  
  11.     // Aquí definimos las acciones a través de $_REQUEST['action'] array - $_REQUEST['action'] => array($file, $function).
  12.     $actionArray = array(
  13.         //Zona de secciones
  14.         'antros' => array('Themes.php', 'Antros'),
  15.         'contacto' => array('Themes.php', 'Contacto'),
  16.         'libros' => array('Themes.php', 'Libros'),
  17.         'musica' => array('Themes.php', 'Musica'),
  18.         'teatro' => array('Themes.php', 'Teatro'),
  19.         'tecnologia' => array('Themes.php', 'Tecnologia'),
  20.         'turismo' => array('Themes.php', 'Turismo'),
  21.         //Fin Zona de secciones
  22.     );
  23.    
  24.    // Obtenemos el archivo y la función - Si no se encuentra lo mandamos al inicio
  25.     if (!isset($_REQUEST['action']) || !isset($actionArray[$_REQUEST['action']]))
  26.     {
  27.         // Fall through to the board index then...     
  28.         Include($template_dir .'/Index.template.php');
  29.     } else {
  30.    
  31.         // De lo contrario si existe pues allá lo enviamos
  32.         require_once($sourcedir . '/' . $actionArray[$_REQUEST['action']][0]);
  33.         return $actionArray[$_REQUEST['action']][1].'()';  
  34.     }
  35. }
  36.  
  37. Main();
  38.    
  39. ?>

Me entra perfecto el primer if con el include pero si coloco el LoadTemplate no me sale nada, claro con el LoadTemplate de MaBoRak, en el else tampoco me sale nada, el objetivo del else es que llame el archivo PHP correspondiente y regrese una funcion dentro de este archivo, por ejemplo, el array es el siguiente "$_REQUEST['action'] array - $_REQUEST['action'] => array($file, $function).":

Código PHP:
Ver original
  1. 'accion' => array('Tema.php', 'Algo');

la cual cual llamo así:

Código PHP:
Ver original
  1. // De lo contrario si existe pues allá lo enviamos
  2.         require_once($sourcedir . '/' . $actionArray[$_REQUEST['action']][0]);
  3.         return $actionArray[$_REQUEST['action']][1].'()';

Lo que quiere decir es que estoy llamando la funcion Algo en el archivo Tema.php, que es así por ejemplo:

Código PHP:
Ver original
  1. function Algo()
  2. {
  3.     print "Algo debe aparecer aquí";
  4. }

Que luego sería:

Código PHP:
Ver original
  1. function Antros()
  2. {
  3.     LoadTemplate('Algo'); //Algo.template.php
  4. }

No sé si se me entiende porque creo que me enredé

Saludos.
  #9 (permalink)  
Antiguo 02/02/2010, 11:11
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Ayuda, ¿cómo enfrento esta situación?

¿La página está completamente en blanco (fíjate en el código fuente)? Porque quizás puedas intentar imprimir algunas palabras entre el código para ver dónde falla. Yo siempre que necesito, imprimo:
Código PHP:
echo "<br />".__LINE__
Y con eso sé hasta qué línea por lo menos llega. Si no, no vas a tener otra opción que ir comentando partes del código para ver cuál es la parte problemática. ¡Suerte!
  #10 (permalink)  
Antiguo 02/02/2010, 11:15
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Ayuda, ¿cómo enfrento esta situación?

Posteamos casi a la vez
Las funciones de PHP no pueden recibir funciones como parámetros (que yo sepa), a diferencia de JavaScript o de (un ejemplo mucho más indicado) Haskell. Lo que sí puede recibir son nombres de funciones, que luego si te las ingenias puedes ejecutar con la función eval. ¡Suerte!
  #11 (permalink)  
Antiguo 02/02/2010, 11:28
Avatar de Fleon  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 2 meses
Puntos: 3
Respuesta: Ayuda, ¿cómo enfrento esta situación?

Hola dggluz, de nuevo muchas gracias buscando eval me encontré con la función call_user_func que ejecuta una función por su nombre y me va de perlas , ahora, sólo me queda el problema del LoadTemplate que no está funcionando, porque no muestra nada ¿alguna otra idea?

Saludos
  #12 (permalink)  
Antiguo 02/02/2010, 11:32
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años
Puntos: 50
Respuesta: Ayuda, ¿cómo enfrento esta situación?

El código de MaBoRaK parece estar bien, ¿por qué no te fijas que no haya errores en esos archivos que quieres incluir? ¡Suerte!
  #13 (permalink)  
Antiguo 02/02/2010, 12:05
Avatar de Fleon  
Fecha de Ingreso: febrero-2010
Mensajes: 138
Antigüedad: 14 años, 2 meses
Puntos: 3
Respuesta: Ayuda, ¿cómo enfrento esta situación?

Cita:
Iniciado por dggluz Ver Mensaje
El código de MaBoRaK parece estar bien, ¿por qué no te fijas que no haya errores en esos archivos que quieres incluir? ¡Suerte!
Ufff, me cansé de buscar cualquier error y no lo encuentro, por el momento creo que obviaré la función, me he dado cuenta que no lo usaré mucho

Saludos y Gracias

Etiquetas: Ninguno
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 10:35.