2011-06-28 11 views
5

アクティブなメニュータブを実現するためにCodeigniterでどの方法を使用できますか?私はURLがProfileタブは、例えば、背景色を変更することにより、アクティブでなければなりませんdomain.com/profile/some_functionあるプロファイルコントローラにいるときアクティブなメニュータブとコード番号

は、例えば私は、ユーザメニューProfile Friends Messages Logout

を持っています。

私は通常、対応するURLセグメントを確認するためにphpをタブに追加し、アクティブなタブのスタイルを変更します。 Codeigniterではヘルパーを実装する必要がありますか?どの機能をタブで簡単に使用できますか?

答えて

4

あなたが最後の段落で言ったように、私は対応するURIセグメントをチェックし、それに基づいてタブのスタイルを変更します。

あなたは、データベースからあなたのメニューを生成するforeach文を使用しているとしましょう:私はそこにurl_title()を投げた

<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> 

理由は、URIセグメントとして小文字の名前があることや世話をするだろうようにすることですメニュー名および/またはURIセグメントに存在する可能性のあるスペースの数これには、URLヘルパーを有効にする必要があります。一致しない場合は、<li>要素のデフォルトCSSが使用されます。

1

タブのスタイリングはPHPではなくCSSの問題です。色の変更についてはhoverを参照してください。それらはしばしばulのもので行われますが、必ずしもそうではありません。 hereをたくさん学ぶことができます。

リストの生成に関しては、ヘルパーがおそらく良い考えです。おそらく、複数の異なるコントロール/メソッドとビューで同じコードを使用できるようにしたいので、汎用のget_menu()を使用します。またはcreate_menu();ヘルパーファイルには完璧です。それをあなたのMY_html_helper.phpに追加したいかもしれません。

(今後の読者は、コメントを読んでください)

+0

私は同意しません。私が示したタブスタイリングは、PHPに関連しています。 (このページでは、上にある 'questions'タブがどのようにオレンジ色になっているかを知っています。' youarehere'クラスが 'questions' URLセグメントを介してli項目に追加されています。それは良いアイデアです。 – CyberJunkie

+0

AH。 OK。私はあなたが意図した通りにあなたの質問を読まなかった。あなたはかなり正しいです、そして、私は残念です。 – cwallenpoole

+0

lol np。あなたの投稿の後に私の質問を編集しました – CyberJunkie

1

コントローラベースのアクティブなメニューを作成する方法の簡単な例があります。

$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> 

コントローラとメソッドの両方に基づいて、より複雑なナビゲーションメニューを作成できます。

+0

面白いアプローチ。 – CyberJunkie

3

私は同じ問題がありました。ここに私のソリューションです:

<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> 
:コントローラのそれぞれにおいて

は、あなたがナビゲーションバーを持つビューで機能

$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) 

にパラメータを追加し、このようなコードの何かを追加

これは問題を解決するはずです。 問題が解決しない場合は教えてください。

ありがとうございました

関連する問題