LoginSignup
0
1

More than 3 years have passed since last update.

【Laravel AdminLTE】URLが前方一致する場合、left sidebarがactiveになるようにする

Posted at

手順

  1. ViewComposerを導入する
  2. 「adminlte::partials.sidebar.menu-item」で使用するviewcomposer「SidebarMenuItemComposer」を作成する
  3. $item['class']に「active」が追加されるようにする
  4. 「SidebarMenuItemComposer」を「adminlte::partials.sidebar.menu-item」に関連付ける

以下コード

/app/Http/ViewComposers/SidebarMenuItemComposer.php
<?php

namespace App\Http\ViewComposers\User\Worker;

use Auth;
use Illuminate\View\View;

/**
 * Class ModalSearchCemeteryComposer
 * @package App\Http\ViewComposers\User\Worker
 */
class SidebarMenuItemComposer
{
    /**
     * @param View $view
     */
    public function compose(View $view)
    {
        // 現在のページに応じて左メニューをactiveにする
        $path = request()->path();
        $host = request()->getHttpHost();
        $http = $this->isSsl() ? 'https' : 'http';

        $item = $view->getData('item'); 
        $pattern = str_replace($http.'://'.$host.'/', '', $item['item']['href']);
        if (!$item['item']['active'] && ($pattern === $path || strpos($path, $pattern.'/') === 0)) {
            $item['item']['class'] .= ' active ';
        }
        $view->with(['item' => $item['item']]);
    }

    //Webサーバー毎にキーと値で判別
    private function isSsl()
    {
        if (isset($_SERVER['HTTPS']) === true ) // Apache
        {
            return ($_SERVER['HTTPS'] === 'on' or $_SERVER['HTTPS'] === '1' );
        }
        elseif (isset($_SERVER['SSL']) === true ) // IIS
        {
            return ($_SERVER['SSL'] === 'on' );
        }
        elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) === true ) // Reverse proxy
        {
            return (strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https' );
        }
        elseif (isset($_SERVER['HTTP_X_FORWARDED_PORT']) === true ) // Reverse proxy
        {
            return ($_SERVER['HTTP_X_FORWARDED_PORT'] === '443' );
        }
        elseif (isset($_SERVER['SERVER_PORT']) === true )
        {
            return ($_SERVER['SERVER_PORT'] === '443' );
        }

        return false;
    }
}
/app/Providers/ViewComposerServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use View;

class ViewComposerServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        View::composers([
            \App\Http\ViewComposers\User\Worker\SidebarMenuItemComposer::class => 'adminlte::partials.sidebar.menu-item',
        ]);
    }
}

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1