Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/07/2013, 11:41
Avatar de bNd170
bNd170
 
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 15 años, 5 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.