2012-09-02 2 views
0

사이트 탐색 막대에서 사용자가 현재보고있는 페이지를 결정하고 해당 메뉴 항목에 .active 클래스를 제공하는 논리가 있습니다.CI 활성 탐색 항목

매우 우아하지는 않지만 필자가 생각해 낸 코드는 작동합니다. 이것을 더 잘 할 수있는 방법을 생각해 볼 수 있습니까? 어떻게 논리를보기에서 컨트롤러로 옮길 수 있습니까? 어떻게 반복 할 수 있습니까?

컨트롤러 :

<?php 

class Pages extends CI_Controller { 

    public function view ($page = 'home') { 

     if (!file_exists('application/views/pages/'.$page.'.php')) 
      show_404(); 

     $data['active'] = $page; 

     $this->load->view('templates/header', $data); 
     $this->load->view('pages/'.$page, $data); 
     $this->load->view('templates/footer', $data); 

    } 
} 

?> 

뷰 : 어쩌면

<ul class="nav"> 
    <li class="<?php echo($active=='home')?'active':''; ?>"><a href="./">blog</a></li> 
    <li class="<?php echo($active=='about')?'active':''; ?>"><a href="about">about</a></li> 
    <li class="<?php echo($active=='projects')?'active':''; ?>"><a href="projects">projects</a></li> 
    <li class="<?php echo($active=='lab')?'active':''; ?>"><a href="lab">lab</a></li> 
    <li class="<?php echo($active=='contact')?'active':''; ?>"><a href="contact">contact</a></li> 
</ul> 
+0

http://codereview.stackexchange.com에 있어야합니다. –

+0

CR에 새로운 질문을 만들어야합니까? 아니면 누군가이 질문을 움직일 것입니까? –

+0

개인적으로 당신이 가진 것은 입찰 거래가 아닙니다. PHP를 특정 변수로 바꾸는 "우아한"방법이있을 수 있습니다 ('onload' Javascript?). 또 다른 방법은 메뉴 목록을 동적으로 만들고 그 안에 값을 설정하는 것입니다. 반 다스 ... –

답변

1

더 우아한?

function is_active($item) { 
     return strpos(uri_string(), $item)!==FALSE ? 'active':''; 
    } 


    <li class="<?=is_active('blog')?>"><a href="./">blog</a></li> 

이 방법은 귀하의 위도에 따라 다릅니다.

1

CSS로 시도해 볼 수 있습니다. 예 : '정보'페이지에 있으면 body 태그는 <body id="about">이됩니다. 귀하의 CSS :

#about .nav li.about, #contact .nav li.contact, /* etc */ { color: red; } 

이것은 각 .nav li의 클래스 이름 (이 경우 "about")을 의미합니다. CSS 파일에는 반복이있을 수 있지만 (속성 선언 전에 모든 li 클래스 이름을 쉼표로 구분하는 것이지만)보기는 깨끗하게 유지됩니다.

관련 문제