2012-03-08 3 views
0

У меня есть такой подход сейчас:Лучше динамическое меню навигации

ctop = $cnew = $cmine = ''; 
    if($actual == 'top') $ctop = 'class="active"'; 
    if($actual == 'last') $new = 'class="active"'; 
    if($actual == 'mine') $cmine = 'class="active"'; 
    $html = '<aside class="panel_derecho"> 
       <div class="tabs"><h4>$donde</h4> 
        <ul>'; 
           $js = "refrescar_submenu('last_$donde')"; 
           $js_t = "refrescar_submenu('top_$donde')"; 
           $js_r = "refrescar_submenu('mine_$donde')"; 
         $html .= '<li '.$ctop.'><a href="#sub_menu" onclick="'.$js_t.'">top</a></li>'; 
         $html .= '<li '.$cnew.'><a href="#sub_menu" onclick="'.$js.'">ultimos</a></li>'; 
         $html .= '<li '.$mine.'><a href="#sub_menu" onclick="'.$js_r.'">like</a></li>'; 
    $html .= '  </ul> 
      </aside>'; 
    return $html; 

которым работают, как ожидалось:

Он генерирует список с требуемой копией, требуемым параметром Javascript функции и активным классом (для желаемого)

Но я чувствую, что это может быть менее повторяющимся; и я уже вижу, что это будет дорого, чтобы добавить/редактировать/удалить Копирует, Params, элементы и т.д .. я просто не знаю, где Beggin ..

В случае это помогает:

  1. $donde представляет тип данных (статьи, песни, видео, ..)
  2. $actual представляет собой одну atribute (новые статьи, топ статей, статьи я люблю)
+0

Я не уверен, что вы используете фреймворк или нет, но если вы используете любую форму MVC, вы всегда можете назначить активный класс в контроллере, а затем передать его в представление. Это не намного эффективнее, чем то, что вы делаете. – Rooster

+0

Я думаю, что, возможно, мне следует сделать асоциативные массивы со значениями, которые должны быть заполнены $ фактическим и $ donde? –

ответ

2
// Menu: link => text 
$menu = array(
    "top" => "top", 
    "last" => "ultimos", 
    "mine" => "like" 
); 

$html = '<aside class="panel_derecho"> 
      <div class="tabs"><h4>$donde</h4> 
       <ul>'; 
foreach ($menu as $link => $text) 
{ 
    $html .= '<li '.($link==$actual ? 'class="active"' : '').'><a href="#sub_menu" onclick="refrescar_submenu(\''.$link.'_'.$donde.'\')">'.$text.'</a></li>'; 
} 
$html .= '  </ul> 
     </aside>'; 
return $html; 
+0

Мне нравится этот мужчина :) –

+0

, когда у вас есть повторный список, вы должны использовать какой-то массив для его обработки :) –

+0

+1 в основном такая же, как моя идея, но вы ответили быстрее. – Travesty3

2
$attributes = array("top" => "top", "last" => "ultimos", "mine" => "like"); 
    $html = "<aside class=\"panel_derecho\"> 
    <div class=\"tabs\"><h4>{$donde}</h4> 
     <ul>"; 
    foreach ($attributes as $key=>$value) 
     $html .= "   <li ". ($actual == $key ? "class=\"active\"" : "") ."><a href=\"#sub_menu\" onclick=\"refrescar_submenu('{$key}_{$donde}'\">{$value}</a></li>"; 
    $html .= "  </ul> 
    </div> 
</aside>"; 

    return $html; 
Смежные вопросы