Kohana 3: dinamik bir menü içinde aktif öğeyi bulmak için nasıl

1 Cevap php

Belki en iyi açıklama, ama beni dinle. Ben adlı bir yapılandırma dosyasında aşağıdaki söylüyorlar menu.php:

// Default controller is 'home' and default action is 'index'
return array(
   'items' => array(
      'Home' => '',
      'News' => 'news',
      'Resources' => 'resources',
   ),
);

Ben artık oldukça basit bir menü olarak bu yazdırmak istiyorsanız:

foreach(Kohana::config('menu.items') as $title => $uri)
{
    echo '<li>' . HTML::anchor($uri, $title) . '</li>';
}

Ancak, $uri akım denetleyicisi ve eylem maçlar olduğunu bulmak istiyorum. Ve eylem varsayılan bir veya değilse. Ne ile bitirmek istiyorum bu akım kontrolörünün bağlantı, ancak varsayılan eylem ise menü öğesi id="active-item" sahip olmasıdır. Ve id="active-subitem bu akım kontrolörünün bağlayan ve eylem varsayılan biri değilse. Mantıklı umuyoruz ...

Bana yardım edebilir herkes? Hem Kohana 3 bunu ve nasıl da nasıl should Ben birçok yolu vardır eminim. Kohana 3. yapılabilir, ama evet ... herhangi bir yardım bekliyoruz :) olduğunu


Örnekler:

  • domain.com - varsayılan denetleyici olduğundan Home active-item olmalıdır
  • domain.com / home - Home olmalıdır active-item
  • domain.com / home / index - index varsayılan eylem olduğundan Home active-item olmalıdır
  • domain.com / kaynaklar - Resources olmalıdır active-item
  • domain.com/resources/get/7 - get varsayılan eylem olmadığı Resources active-subitem olmalıdır

1 Cevap

Bunu birkaç yolu yapabilirdi

CSS

Ben sık sık bu yöntemi kullanın. Ben tanımlamak için her sayfanın gövde öğesi için bir sınıf eklemek.

HTML

<style type="text/css">
body.home #home-link {
    border: 3px solid red;
}
</style>

<body class="home">
<ul>
    <li id="home-link">Home</li>
</ul>
</body>

Avantajları bunu uygulamak için basit vardır. Dezavantajları Eğer seçiciler, her bölüm (bir küçük broşür sitede böyle bir sorun) için bir çok listelemek için ihtiyacı vardır.

Add via Controller

Ayrıca kontrolör üzerinden ekleyebilir

Controller

public function action_about() {

    $this->template->active = 'about';

}

View

foreach(Kohana::config('menu.items') as $title => $uri)
{
    echo '<li' . (($active === $uri) ? ' class="active"' : NULL) . '>' . HTML::anchor($uri, $title) . '</li>';
}

Sonra tabii ki, sadece active sınıfı ile liste elemanı stil. Avantajları sadece bir kez CSS tanımlamak vardır.