2011-06-28 10 views
5

Którą metodę można zastosować w Kodzie sygnalizacyjnym w celu uzyskania aktywnych zakładek menu?Aktywne karty menu z podpisem kodu

Na przykład mam menu użytkownika Profile Friends Messages Logout

Kiedy jestem w kontrolerze profilu URL jest domain.com/profile/some_function Zakładka Profile powinien być aktywny przez zmianę koloru tła na przykład.

Zwykle dodawałem php do zakładek, aby sprawdzić ich segmenty adresów URL i chciałbym zmienić styl aktywnej karty. W Codeigniter powinienem wdrożyć pomocnika? Jaką funkcję mogę łatwo wykorzystać w zakładkach?

Odpowiedz

4

Tak jak powiedziałeś w poprzednim akapicie, po prostu sprawdziłbym odpowiedni segment URI i zmieniam styl karty na podstawie tego.

Powiedzmy używasz foreach oświadczenie wygenerować menu z bazy danych:

<ul> 
<?php foreach($menu_items as $menu_item):?> 
    <li<?php if($this->uri->segment(2) == url_title($menu_item->name, dash, TRUE)):?> class="active"><?php else:?>><?php endif;?><a href="<?=$menu_item->url;?>"><?=$menu_item->name;?></a></li> 
<?php endforeach;?> 
</ul> 

Powodem Rzuciłem url_title() tam jest, aby nazwę małymi literami jako segmencie URI byłoby i dbać wszelkich możliwych spacji, które mogą znajdować się w nazwie menu i/lub segmencie URI. To wymagałoby włączenia pomocnika URL. Jeśli nie pasują, zostaną użyte domyślne elementy CSS dla <li>.

1

Stylizacja kart nie jest zagadnieniem PHP, ale CSS. Wyszukaj zmiany kolorów w ustawieniu hover. Często są wykonywane z ul, ale nie zawsze. Możesz się wiele nauczyć here.

Jeśli chodzi o generowanie listy, pomocnik byłby prawdopodobnie dobrym pomysłem. Prawdopodobnie będziesz chciał, aby ten sam kod był dostępny dla wielu różnych kontrolek/metod i widoków, więc mając ogólny get_menu(); lub create_menu(); byłby idealny w pliku pomocniczym. Możesz dodać go do swojego MY_html_helper.php.

(Przyszłe czytelnicy, proszę przeczytać komentarze)

+0

Nie zgadzam się. Zilustrowane logo tabulacji jest związane z PHP. (Zauważ na tej stronie, że zakładka 'questions' na górze jest pomarańczowa, klasa' youarehere' została dodana do elementu LI przez segment adresu 'question', o którym myślę.) To jest to, o czym mówię.) Funkcja menu to dobry pomysł. – CyberJunkie

+0

AH. Ok.Nie przeczytałem twojego pytania tak, jak zamierzałeś. Jesteś całkiem poprawny i przykro mi. – cwallenpoole

+0

lol np. Zmieniłem moje pytanie na wyjaśnienie po Twoim wpisie. – CyberJunkie

1

Istnieje prosty przykład jak stworzyć kontroler aktywnego menu oparte.

$ci =& get_instance(); 

    // get the current controller 
    $controller = $ci->router->fetch_class(); 

    // you can generate this array dynamically 
    $resources = array(0 => array("controller" => "home", "title" => "Home"), 
         1 => array("controller" => "products", "title" => "Products"), 
         2 => array("controller" => "services", "title" => "Services"), 
     ); 
    <ul> 
    <?php foreach($resources as $resource): ?> 
    <?php $class = ($controller == strtolower($resource["controller"]) ? 'active' : 'inactive'); ?> 
     <li><a href="<?php echo site_url($resource["controller"]) ?>" class="<?php echo $class; ?>"><?php echo $resource["title"] ?></a></li> 
    <?php endforeach; ?> 
    </ul> 

Oczywiście, można tworzyć bardziej rozbudowane menu nawigacyjnego opartego na obu kontrolerów i metod.

+0

Interesujące podejście. – CyberJunkie

3

Miałem ten sam problem. Oto moje rozwiązanie:

W każdym z kontrolerów, dodać parametr w funkcji

$data['activeTab'] == "profile"; 
$this->load->view('viewname',$data); (Profile controller) 

$data['activeTab'] == "friends"; 
$this->load->view('viewname',$data); (Friends controller) 

$data['activeTab'] == "messages"; 
$this->load->view('viewname',$data); (Messages controller) 

W widoku gdzie masz pasek nawigacyjny, dodać kod jest coś takiego:

<ul id="menu"> 
        <li class="<?php echo ($activeTab == "profile") ? "active" : ""; ?>"><a href="<?php echo base_url(); ?>profile">PROFILE</a></li> 
        <li class="<?php echo ($activeTab == "friends") ? "active" : ""; ?>"><a href="<?php echo base_url(); ?>friends">FRIENDS</a></li> 
        <li class="<?php echo ($activeTab == "messages") ? "active" : ""; ?>"><a href="<?php echo base_url(); ?>messages">MESSAGES</a></li> 
    </ul> 

To powinno rozwiązać problem. Powiedz, czy problem nadal występuje.

Dzięki

Powiązane problemy