Foros del Web » Programando para Internet » PHP »

[Sugerencias] Ruta pagina en un sitio

Estas en el tema de [Sugerencias] Ruta pagina en un sitio en el foro de PHP en Foros del Web. El titulo no es demasiado descriptivo así que intentaré describir lo mejor posible mi caso. Una imagen vale más que mil palabras. El caso es ...
  #1 (permalink)  
Antiguo 07/07/2013, 11:41
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Información [Sugerencias] Ruta pagina en un sitio

El titulo no es demasiado descriptivo así que intentaré describir lo mejor posible mi caso.

Una imagen vale más que mil palabras.


El caso es que estoy implementándole mejoras a la navegación de un sitio que tengo y estoy tratando de generar una ruta similar a la de la imagen haciendo una llamada a una función que me lo haga de manera automática.

Para ello me baso en la URL (Es amigable por cierto) y en base a los parametros que me ofrece la url nutro la función para sacar la ruta.

El caso es que viendo la función acabada creo que debe haber más de un modo distinto y mejor para hacer esta función y me gustaría que si alguien tiene alguna idea o ha hecho algo similar, lo compartiese.3

Código PHP:
    public static function getSitePath() {
        
$sql_query_selects '';
        
$sql_query_tables '';
        
$sql_query_conditions '';
        
$campos = array();
        
$links = array();
        if(isset(
$_REQUEST['id_platform']))
        {
            
$campos[0] = array('platform','platformaname','platformatag'); // SIEMPRE ULTIMO EL TAG
            
$sql_query_selects .= ', P.tag AS ' $campos[0][2] . ', P.name AS ' $campos[0][1] . '';
            
$sql_query_tables .= ', ' .PLATFORMS_TABLE ' AS P';
            
$sql_query_conditions .= 'AND P.visible = \'1\' AND P.id = \'' $_REQUEST['id_platform'] . '\'';
        }
        if(isset(
$_REQUEST['id_game']))
        {
            
$campos[1] = array('game','gamename','gametag'); // SIEMPRE ULTIMO EL TAG
            
$sql_query_selects .= ', G.short AS ' $campos[1][2] . ', G.name AS ' $campos[1][1] . '';
            
$sql_query_tables .= ', ' .GAMES_TABLE ' AS G';
            
$sql_query_conditions .= 'AND G.visible = \'1\' AND G.id = \'' $_REQUEST['id_game'] . '\'';
        }
        if(isset(
$_REQUEST['id_competition']))
        {
            
$campos[2] = array('competition','competitionname'); // SIEMPRE ULTIMO EL TAG
            
$sql_query_selects .= ', C.' web::getLanguage() . '_name AS ' $campos[2][1] . '';
            
$sql_query_tables .= ', ' .COMPETITIONS_TABLE ' AS C';
            
$sql_query_conditions .= 'AND C.id = \'' $_REQUEST['id_competition'] . '\'';
        }
        if(empty(
$sql_query_selects))
            return 
false;
        
$query db::query('SELECT ' substr($sql_query_selects,2) . ' FROM ' substr($sql_query_tables,2) . ' WHERE ' substr($sql_query_conditions,4));
        
$result db::fetch_assoc($query);
        
$return '';
        foreach(
$campos as $ruta => $campo)
        {
            switch(
$campo[0])
            {
                case 
'platform':
                    
$link_vars = array('id'=>$_REQUEST['id_platform'],'name'=>$result[$campo[1]]);
                    break;
                case 
'game':
                    
$link_vars = array('id_platform'=>$_REQUEST['id_platform'],'name_platform'=>$result[$campos[0][1]],'id'=>$_REQUEST['id_game'],'title'=>$result[$campo[1]]);
                    break;
                case 
'competition':
                    
$link_vars = array('id_platform'=>$_REQUEST['id_platform'],'name_platform'=>$result[$campos[0][1]],'id_game'=>$_REQUEST['id_game'],'name_game'=>$result[$campo[1]],'id_competiton'=>$_REQUEST['id_competition'],'name_competition'=>$result[$campo[1]]);
                    break;
            }
            
$template = new templates('path_part');
            
$template->parameters(array(
                
'pathIcon'        => (isset($campo[2]) && isset($result[$campo[2]]) && file_exists(PATH_ICONS_PATH 'icono-' .strtolower(web::stringToURL($result[$campo[2]])) . '.png')) ? '<img src="' PATH_ICONS_PATH 'icono-' strtolower(web::stringToURL($result[$campo[2]])) . '.png' '" alt="' $result[$campo[2]] . '">' '',
                
'pathName'        => $result[$campo[1]],
                
'link'            => web::generateLink($campo[0],$link_vars),
            ));
            
$return .= $template->show(false);
        }
        return 
$return;
    } 
Aquí tenéis la función en cuestión, como ya dije es muy ruda y quisiera poder depurarla y mejorarla en la medida de lo posible.

Como podeis observar, simplemente comprueba si esta declarada una variable de URL y si lo está añade lo necesario para luego montar la SQL.

Lo de abajo son los datos necesarios para montar los enlaces, es decir, en $link_vars va un array con los datos necesarios para montar el enlace.
  #2 (permalink)  
Antiguo 07/07/2013, 12:16
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: [Sugerencias] Ruta pagina en un sitio

@bNd170: amigo no entiendo bien que necesitas...... pero esta funcion no recibe ningun parametro y todo lo que haces es para un caso totalmente particular o sea no resuelve ningun problema mas que es la idea de la modularizacion.

Como sugerencia.... admite parametros que te permitan generalizar casos y que sea mas util en otros sitios tuyos.

Tambien podrias encapsularla en una clase posiblemente con metodos estaticos
__________________
Salu2!
  #3 (permalink)  
Antiguo 07/07/2013, 14:47
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: [Sugerencias] Ruta pagina en un sitio

Os he puesto mi idea para que me planteéis alternativas indicandoós cual es la funcionalidad final que quiero obtener.

Mi idea es que llamando a esta funcion desde cualquier zona de la página, me creé de manera automática la ruta y la devuelva en su correspondiente HTML
  #4 (permalink)  
Antiguo 07/07/2013, 16:48
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: [Sugerencias] Ruta pagina en un sitio

Bueno,

1) El procesamiento de los $_REQUEST los hace un tipo de Controlador llamado Front Controller pero ademas usar $_REQUEST es sumante peligroso, debes usar $_GET y $ POST para formularios

2) Lee sobre MVC o Modelo Vista Controlador ya que esa funcion no puede hacer todo, debes separar en distintos archivos, por ejemplo el acceso a la db lo hace el MODELO
__________________
Salu2!
  #5 (permalink)  
Antiguo 07/07/2013, 18:04
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: [Sugerencias] Ruta pagina en un sitio

A ver Italico, tengo todo mi sitio ya programado, solo estoy dándole mas accesibilidad a ciertos módulos con rutas en cascada.

La variable $_REQUEST no es peligrosa en absoluto, es un comodín que si lo controlas bien es eficaz tanto o mas que los otros dos métodos de captura de datos.

Dicho esto, agradecería que si no vas a plantear una respuesta directa a mi pregunta te ahorrases el tiempo (Lo digo con toda la buena intención del mundo) de contestar este tipo de cosas puesto que estas hablando de manzanas cuando he preguntado por peras.

Muchas gracias de todos modos por la molestia y dejo abierta aun la consulta, si alguien conoce un método mejor estoy ansioso por escucharlo.
  #6 (permalink)  
Antiguo 07/07/2013, 19:01
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: [Sugerencias] Ruta pagina en un sitio

@bNd170: vale... sigue usando $_REQUEST que esta obsoleto y es por algo y no me molesto mas en tratar de ayudarte, ese diseño que tienes es terrible pero siguelo usandolo

Y por favor no te molestes entonces en leer nada sobre Front Controller o MVC esas son cosas diseñadas por gente que no tenia nada que hacer y seguro no tienen aplicacion en tu problema.
__________________
Salu2!

Última edición por Italico76; 07/07/2013 a las 21:25
  #7 (permalink)  
Antiguo 09/07/2013, 12:43
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 8 meses
Puntos: 13
Respuesta: [Sugerencias] Ruta pagina en un sitio

A ver amigo, porque amen de este desprecio mostrado creo que aun no has entendido cual es el propósito de este hilo.

Ésta es la idea BASICA de una función que intento optimizar, creando una ruta orientativa en forma de cascada para que mis usuarios tenga más accesibilidad al sitio.

La función comprueba que existen X valores pasados por la url de la peticion al servidor, de ahí los request (Que insisto estás equivocado diciendo que está obsoleto, que a ti no te agrade usarlo es cosa distinta y que no atiende al tema en cuestión), comprobando que están declarados dichos índices que envío desde la URL mediante la regla de reescritura de Apache.

Dependiendo de que valores obtenga, genero una consulta SQL distinta para cada casa y poder así obtener la ruta desde el INICIO de la página hasta el sitio en el que actualmente está el usuario.

La función es ruda y primitiva, de ahí que pida IDEAS para optimizarla lo máximo posible y dejarla así al nivel de todo el sitio.

Las ironías sobran :)

PD: Mero detalle, llevo usando Front Controller desde que me inicié en PHP.
  #8 (permalink)  
Antiguo 09/07/2013, 14:45
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: [Sugerencias] Ruta pagina en un sitio

Cita:
Iniciado por bNd170 Ver Mensaje
A ver amigo, porque amen de este desprecio mostrado creo que aun no has entendido cual es el propósito de este hilo.

Ésta es la idea BASICA de una función que intento optimizar, creando una ruta orientativa en forma de cascada para que mis usuarios tenga más accesibilidad al sitio.
Para eso estan las url amigables y el front controller

Cita:
mi_sitio.com/controller/action/param1/..parami/...paramn
Y sino les das un BUSCADOR que tambien funcionaria similar:

Cita:
mi_sitio.com/buscador/keyword1+keyword2+....

Sobre $_REQUEST lee lo que dice el manual:

Cita:
Nota:
Las variables en $_REQUEST se proporcionan al script a través de los mecanismos de entrada GET, POST, y COOKIE y por lo tanto pueden ser manipulados por el usuario remoto y no debe confiar en el contenido. La presencia y el orden de las variables listadas en este array se definen según la directiva de configuración PHP

Ahora.. tu buscador funciona porque tienes urls amigables + front controller (si haces las cosas bien) + modelo que accede a la DB + controller donde procesas la vista + vista (MVC)

El Front Controller es quien te direcciona al buscador y a su vez el "modulo" buscador es quien hace que el usuario pueda encontrar los resultados de paginas internas a tu site.

Por otro lado puedes mostrar un Mapa del sitio.

REVISA EN SERIO... tu idea porque es un buscador y entonces debes SEPARAR lo que es la logica del buscador con el acceso a DB con el procesamiento de los REQUESTs
__________________
Salu2!

Última edición por Italico76; 09/07/2013 a las 15:44

Etiquetas: ruta, select, sql, variable
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 09:11.