laravel adminlte3 使用iframe 實現(xiàn)左側(cè)菜單點擊不隨頁面一起刷新的效果

  1. 修改菜單代碼,給菜單的 >li>a 中添加target屬性為mainiframe扒吁,菜單視圖代碼 left.blade.php 如下:
<!-- Left side column. contains the logo and sidebar -->
<aside class="main-sidebar sidebar-dark-primary elevation-4">
    <!-- Brand Logo -->
    <a href="/home" class="brand-link">
      <img src="/adminlte/dist/img/AdminLTELogo.png" alt="AdminLTE Logo" class="brand-image img-circle elevation-3"
           style="opacity: .8">
      <span class="brand-text font-weight-light">SDK</span>
    </a>

    <!-- Sidebar -->
    <div class="sidebar">
      <!-- Sidebar Menu -->
      <nav class="mt-2">
        <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
          <!-- Add icons to the links using the .nav-icon class
               with font-awesome or any other icon font library -->
          @foreach( Cache::get('cartes'.\Auth::user()->id) as $carte)
          @if($carte['child'])
          <li class="nav-item has-treeview">
            <span href="#" class="nav-link">
              <i class="nav-icon fas fa-tachometer-alt"></i>
              <p>
                {{$carte['name']}}
                <i class="right fas fa-angle-left"></i>
              </p>
            </span>
            <ul class="nav nav-treeview">
              @foreach($carte['child'] as $child)
              <li class="nav-item">
                <!-- 這里添加 mainiframe 的 target 屬性,為了在點擊菜單的時候改變 content 內(nèi)容 -->
                <a href="/{{$child['module']}}/index" class="nav-link" target="mainiframe">
                  <i class="far fa-circle nav-icon"></i>
                  <p>{{ $child['name'] }}</p>
                </a>
              </li>
              @endforeach
            </ul>
          </li>
          @endif
          @endforeach
        </ul>
      </nav>
      <!-- /.sidebar-menu -->
    </div>
    <!-- /.sidebar -->
</aside>
  1. 登陸成功后跳轉(zhuǎn)到 /home 路由室囊,/home路由執(zhí)行控制器方法雕崩,渲染基礎(chǔ)視圖,這個視圖實現(xiàn)基礎(chǔ)的html渲染融撞,視圖代碼如下
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title> adminlte | iframe </title>
    <!-- Font Awesome Icons -->
    <link rel="stylesheet" href="/adminlte/plugins/fontawesome-free/css/all.min.css">
    <!-- IonIcons -->
    <link rel="stylesheet" >
    <!-- Theme style -->
    <link rel="stylesheet" href="/adminlte/dist/css/adminlte.min.css">
    <!-- Google Font: Source Sans Pro -->
    <link  rel="stylesheet">
    <link rel="stylesheet" type="text/css" media="all" href="/adminlte/plugins/daterangepicker/daterangepicker.css" />
    <link rel="stylesheet" href="/adminlte/plugins/datatables-bs4/css/dataTables.bootstrap4.css">
</head>
<body class="hold-transition skin-blue sidebar-mini">
<div class="wrapper">
    <!-- 頁頭視圖 -->
    @include('layouts.header')
    <!-- 左側(cè)菜單視圖 -->
    @include('layouts.left') 
    <div class="content-wrapper">
        <iframe name="mainiframe" id="mainiframe" width="100%"  src="/index"
                frameborder="0" marginwidth="0" marginheight="0" scrolling="auto"
                onload="changeFrameHeight()"
        ></iframe>
    </div>
    <!-- 頁腳視圖 -->
    @include('layouts.footer')
    <div class="control-sidebar-bg"></div>
</div>
<!-- ./wrapper -->
<script src="{{asset('js/app.js')}}"></script>
<script>
    function changeFrameHeight(){
        var ifm= document.getElementById("mainiframe");
        ifm.height=document.documentElement.clientHeight - 50 - 60;
    }
    window.onresize=function(){
        var ua = navigator.userAgent.toLowerCase();

        var screenwidth = window.screen.width;
        // console.log("屏幕寬度為", screenwidth);
        if (!/iphone|ipad|ipod/.test(ua)) {
        } else {
            document.getElementById("mainiframe").width = screenwidth;
        }
        changeFrameHeight();
    }
</script>
</body>
</html>

說明:iframe 的 src="/index" 指當?shù)顷懗晒?redirect 到 /home 渲染出這個基礎(chǔ)視圖盼铁,基礎(chǔ)視圖中 iframe 的內(nèi)容將從 /index 路由中訪問獲取, 相當于初始化 iframe 中 content 的內(nèi)容尝偎,js 方法 changeFrameHeight() 實現(xiàn)iframe的高度控制饶火,ifm.height 的高度需要自己調(diào)試減去多少合適鹏控,減的太少的話html會出現(xiàn)滾動條,這個時候如果 content 中返回的 html 高度也超過瀏覽器的高度肤寝,就會出現(xiàn)兩個滾動條当辐,不美觀。

  1. content的內(nèi)容可以自己定義一個blade模板來使用鲤看,然后view視圖渲染讀取這個模板缘揪,在寫入自己需要的html就好了,例子如下:
    app.blade.php 模板:
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title> adminlte | iframe </title>
    <!-- Font Awesome Icons -->
    <link rel="stylesheet" href="/adminlte/plugins/fontawesome-free/css/all.min.css">
    <!-- IonIcons -->
    <link rel="stylesheet" >
    <!-- Theme style -->
    <link rel="stylesheet" href="/adminlte/dist/css/adminlte.min.css">
    <!-- Google Font: Source Sans Pro -->
    <link  rel="stylesheet">
    <link rel="stylesheet" type="text/css" media="all" href="/adminlte/plugins/daterangepicker/daterangepicker.css" />
    <link rel="stylesheet" href="/adminlte/plugins/datatables-bs4/css/dataTables.bootstrap4.css">

    @yield('links')

</head>
<body class="hold-transition skin-blue sidebar-mini" style="background-color: #ecf0f5;">
    @yield('content')
<div class="control-sidebar-bg"></div>
<!-- ./wrapper -->

<!-- jQuery -->
<script src="/adminlte/plugins/jquery/jquery.min.js"></script>
<!-- Bootstrap -->
<script src="/adminlte/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- AdminLTE -->
<script src="/adminlte/dist/js/adminlte.js"></script>
<script src="/adminlte/plugins/moment/moment.min.js"></script>
<!-- OPTIONAL SCRIPTS -->
<script src="/adminlte/plugins/chart.js/Chart.min.js"></script>
<script src="/adminlte/dist/js/demo.js"></script>
<script src="/adminlte/dist/js/pages/dashboard3.js"></script>
<!-- date-range-picker -->
<script src="/adminlte/plugins/daterangepicker/daterangepicker.js"></script>
<!-- Tempusdominus Bootstrap 4 -->
<script src="/adminlte/plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js"></script>
<!-- Bootstrap Switch -->
<script src="/adminlte/plugins/bootstrap-switch/js/bootstrap-switch.min.js"></script>
<script src="/adminlte/plugins/datatables/jquery.dataTables.js"></script>
<script src="/adminlte/plugins/datatables-bs4/js/dataTables.bootstrap4.js"></script>

@yield('scripts')

</body>

</html>

/index路由 返回的視圖(即/home 路由返回視圖中的 iframe 內(nèi)容 ):

@extends('layouts.app')

@section('links')
@stop

@section('content')
    <div class="content-header">
        <div class="container-fluid">
            <div class="row mb-2">
                <div class="col-sm-6">
                </div>
                <div class="col-sm-6">
                    <ol class="breadcrumb float-sm-right">
                    </ol>
                </div>
            </div>
        </div>
    </div>

    <div class="content">
        <div class="container-fluid">

            <div class="card">
                <div class="card-header">
                    <h3 class="card-title">這個是首頁的content</h3>

                    <div class="card-tools">
                        <button type="button" class="btn btn-tool" data-card-widget="collapse" data-toggle="tooltip" title="Collapse">
                            <i class="fas fa-minus"></i></button>
                        <button type="button" class="btn btn-tool" data-card-widget="remove" data-toggle="tooltip" title="Remove">
                            <i class="fas fa-times"></i></button>
                    </div>
                </div>
                <div class="card-body">
                    <p>歡迎來到后臺管理系統(tǒng)!</p>
                    <p>當前系統(tǒng)時間: {{date('Y-m-d H:i:s',time())}}</p>
                    <p>當前系統(tǒng)時區(qū): {{date_default_timezone_get()}}</p>
                    <p>當前系統(tǒng)版本: Laravel Framework {{app()::VERSION}}</p>
                </div>
                <!-- /.card-body -->
                <div class="card-footer">
                    后臺管理
                </div>
                <!-- /.card-footer-->
            </div>

            <!-- div設(shè)置為透明 避免因為沒有為chart設(shè)置id報錯 -->
            <div style="opacity: 0">
                <canvas id="visitors-chart" height="0"></canvas>
            </div>
            <div style="opacity: 0">
                <canvas id="sales-chart" height="0"></canvas>
            </div>
            <!-- /.row -->
        </div>
        <!-- /.container-fluid -->
    </div>
@stop

@section('scripts')
@stop
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末义桂,一起剝皮案震驚了整個濱河市找筝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慷吊,老刑警劉巖袖裕,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異溉瓶,居然都是意外死亡急鳄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門堰酿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來攒岛,“玉大人,你說我怎么就攤上這事胞锰≡志猓” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵嗅榕,是天一觀的道長顺饮。 經(jīng)常有香客問我,道長凌那,這世上最難降的妖魔是什么兼雄? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮帽蝶,結(jié)果婚禮上赦肋,老公的妹妹穿的比我還像新娘。我一直安慰自己励稳,他們只是感情好佃乘,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驹尼,像睡著了一般趣避。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上新翎,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天程帕,我揣著相機與錄音住练,去河邊找鬼。 笑死愁拭,一個胖子當著我的面吹牛讲逛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岭埠,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼盏混,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了枫攀?” 一聲冷哼從身側(cè)響起括饶,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤株茶,失蹤者是張志新(化名)和其女友劉穎来涨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體启盛,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蹦掐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了僵闯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卧抗。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鳖粟,靈堂內(nèi)的尸體忽然破棺而出社裆,到底是詐尸還是另有隱情,我是刑警寧澤向图,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布泳秀,位于F島的核電站,受9級特大地震影響榄攀,放射性物質(zhì)發(fā)生泄漏嗜傅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一檩赢、第九天 我趴在偏房一處隱蔽的房頂上張望吕嘀。 院中可真熱鬧,春花似錦贞瞒、人聲如沸偶房。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝴悉。三九已至,卻和暖如春瘾敢,著一層夾襖步出監(jiān)牢的瞬間拍冠,已是汗流浹背尿这。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庆杜,地道東北人射众。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像晃财,于是被迫代替她去往敵國和親叨橱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355