Laravel ve Bootstrap için aktif link makrosu

Harici kaynaklardan temin ettiğimiz aktif link makroları açılır menülerde (dropdown) işimizi görmüyordu. Şöyle bir makroya ihtiyacımız vardı: Açılır menü altındaki hangi linke tıklayıp o sayfaya gidersek açılır menü ana yazısı aktif olmalıydı. Dolayısı ile birden fazla kontrol yapabilen bir makro ihtiyacı doğuyordu.

Yazdığımız makro route sistemi üzerinden çalışmakta ve route kontrolü yapmaktadır. Tek bir kontrol yapılacağı gibi, sınırsız kontrol de yapılabilir. Kod örneğinde iki alt linki olan bir açılır menümüz vardı. Açılır kutu ana yazısını aktif etmek için tüm alt linklerin route tanımlarını yazıyoruz, her bir alt link için de kendi route tanımını yazıyoruz. Böylece hem açılır kutu ana yazısı hem de alt linkin kendinisinine aktif sınıfı verebiliyoruz.

 

Makro kodları

  // Active nav link class
  // {{ HTML::SetActive('admin.staff.index', 'admin.staff.create') }}
  HTML::macro('SetActive', function($route)
  {
    $active = 'active';

    $args = func_get_args();
    $args_count = func_num_args();

    if ($args_count == 1)
    {
      return Route::is($route) ? $active : '';
    }

    foreach ($args as $i)
    {
      if (Route::is($i))
      {
        return $active;
      }
    }

    return '';
  });

Örnek kullanım

<li class="dropdown {{ HTML::SetActive('admin.staff.index', 'admin.staff.create') }}">
  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Personel <i class="caret"></i></a>
  <ul class="dropdown-menu">
    <li class="{{ HTML::SetActive('admin.staff.index') }}">
      <a href="{{ route('admin.staff.index') }}">Personel listesi</a>
    </li>
    <li class="{{ HTML::SetActive('admin.staff.create') }}">
      <a href="{{ route('admin.staff.create') }}">Personel ekle</a>
    </li>
  </ul>
</li>

Bir Cevap Yazın