Выделить активную ссылку из массива - PullRequest
1 голос
/ 17 февраля 2012

Я хочу применить class="active" в зависимости от того, на какой странице вы находитесь. Какой лучший способ сделать это?

Например:

В функции конструктора он создает массив ссылок на имя и адрес.

class OrderController extends Controller {

   public $data = array();

   private __construct() {
        $this->data['sidebar'] = array(
            'New Orders' => '/admin/order',
            'Processing Orders' => '/admin/order/processing',
            'Completed Orders' => '/admin/order/completed',
    );


   public function actionIndex($status) {
        $data = $this->data;
        if ($status == "processing") {
         //how to apply class="active" when you on the order/processing page?
         //Apply active in the data['sidebar'] array 
        }

        $view = new view('orders.php', $data);
        $view->render();
    }
  } 

Массив передается в actionIndex() и отображает orders.php

В файле orders.page есть что-то вроде этого:

<?php foreach ($sidebar as $name => $link): ?>
    <li>
      <strong><a href="<?php echo $link; ?>"><?php echo $name; ?></a></strong>
   </li>
<?php endforeach; ?>

Я хочу добавить class="active" в тег li.

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Вы можете построить свой массив:

class OrderController extends Controller {

   public $data = array();

   private __construct() {
        $this->data['sidebar'] = array(
            'New Orders' => array( 'url'=>'/admin/order', 'class'=>'' ),
            'Processing Orders' => array( 'url'=>'/admin/order/processing', 'class'=>'' )
            'Completed Orders' => array( 'url'=>'/admin/order/completed', 'class'=>'' ),
    );


   public function actionIndex($status) {
        $data = $this->data;
        if ($status == "processing") {
          $data['sidebar']['Processing Orders']['class'] = 'active';
        }

        $view = new view('orders.php', $data);
        $view->render();
    }
  }

Теперь вы должны изменить свой foreach:

<?php foreach ($sidebar as $name => $link): ?>
   <li class="<?php echo $link['class']; ?>">
      <strong><a href="<?php echo $link['url']; ?>"><?php echo $name; ?></a></strong>
   </li>
<?php endforeach; ?>
0 голосов
/ 17 февраля 2012

Моя основная идея:

if ($tatus == "processing") {
    data['active'] = 'processing';
}

...........

<?php foreach ($sidebar as $name => $link): ?>
    <li <?php if ($active == $name) echo class="active"; ?>>
      <strong><a href="<?php echo $link; ?>"><?php echo $name; ?></a></strong>
   </li>
<?php endforeach; ?>

Условие, основанное на имени, должно обрабатываться ... чувствоватьсвободно изменять по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...