0

こことCIユーザーガイドの両方で(数時間)の調査を行った後、私は自分のテザーの終わりにいます。

私が望むものを達成するためにいくつかの答えを組み合わせましたが、期待どおりに機能しますが、<li>をアクティブに設定しません。

意見

<ul class="nav">
              <?php
              $query = $this->db->query('SELECT menu_title, menu_url FROM menus');
               foreach($query->result_array() as $row): ?>
                <li <?php if ( $this->uri->uri_string() == $row['menu_url'] ): ?> class="active"<?php endif; ?>><a href="<?=$row['menu_url'] ?>"><?=$row['menu_title']?></a></li>
                <?php endforeach ?>

            </ul> 

これは、テーブルから一連のナビゲーションオプションを取得してレイアウトします(機能します)が、cssをアクティブにすることはできません。

4

3 に答える 3

0

if条件で両方の変数を出力し、条件が真かどうかを手動で確認すると簡単です..

私はあなたの場合、..テーブルにあるのと同じ場所に戻ってくる/ので、あなたに問題を引き起こしていると思います..$this->uri->uri_string()home/home

これを試して

<?php if ( '/'.$this->uri->uri_string() == $row['menu_url'] ): ?> class="active"<?php endif; ?>
于 2013-02-17T06:47:28.040 に答える
0

これを具体化してみましょう:

モデル:

class Menu_model extends CI_Model{
 public function get_title_and_url ()
 {
  $query = $this->db->query('SELECT menu_title, menu_url FROM menus');
  return $query->result_array();
 }
}

コントローラ:

これにアクセスするにはさまざまな方法がありますが、今のところ、メニューを独自のコントローラーにしました。通常、CI_Controller を拡張するクラスにメニュー ロジックを配置して、別の場所にアクセスできるようにします。

class Menu extends CI_Controller{
 public function __construct ()
 {
   parent::__construct();
   $this->load->model('menu_model','menu');
 }
 public function index ()
 {
   $view['menu_items'] = $this->menu->get_title_and_url();
   $view['current'] = $this->uri->uri_string();
   $this->load->view('menu_view',$view);
 }
}

意見:

<ul class='nav'>
 <?php foreach($menu_items as $m):?>
   <li <?php echo ($m['menu_url'] == $current ? "class='active'" : "");?>>
     <a href='<?php echo $m['menu_url'];?>'><?php echo $m['menu_title'];?></a>
   </li>
 <?php endforeach;?>
</ul>

このようなものを実装する方法はMY_Controller、CI_Controller を拡張するクラスを作成することです。その中に、メニュー HTML を作成するためのロジックがあり、それをメニューを使用するすべてのページのマスター ページ テンプレートに渡します。このようにして、すべてのビューとコントローラーで自分自身を繰り返す必要はありません。

これは一見の価値があります。Phil Sturgeon は、この種のことについて素晴らしいブログ記事を書いています。

于 2013-02-17T05:56:17.670 に答える
0

$row['menu_url'] が /home を返す場合、uri_string は / なしでそれを返すため、一致しません。

これを試して:

<?php
    $query = $this->db->query('SELECT menu_title, menu_url FROM menus');
    foreach($query->result_array() as $row): ?>
    $url = trim($row['menu_url'],"/");
    <li <?php if ( $this->uri->uri_string() == $url): ?> class="active"<?php endif; ?>><a href="<?=$row['menu_url'] ?>"><?=$row['menu_title']?></a></li>
<?php endforeach ?>

個人的には、私はそれを分解し、代わりに三項を使用して、よりクリーンで個人的な好みにします。

<?php
    $query = $this->db->query('SELECT menu_title, menu_url FROM menus');        
    $uri = $this->uri->uri_string();
    foreach($query->result_array() as $row): ?>
    $url = trim($row['menu_url'],"/");
    <li <?php echo ($uri== $url) ? 'class="active"' : ''; ?>><a href="<?=$row['menu_url'] ?>"><?=$row['menu_title']?></a></li>
<?php endforeach ?>
于 2013-02-17T15:41:18.770 に答える