Una imagen vale más que mil palabras.
![](http://gyazo.com/9a819742073979cb8eee88ca5dd2144c.png)
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;
}
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.