BootStrap的.container
預設顯示區為1140px,扣除左右的15px實際顯示為1110px
套用內容之後會發現版面擁擠,左右可能又空太大,因此,可以自行調大。
請將各個.container
後面加上.my-container-width
<div class="container my-container-width">
接著修改css/style.css
,利用max-width
調整想要的版面大小:
.my-container-width { max-width: 1430px; }
若想當畫面大時分三欄,畫面小一點時,分兩欄,手機畫面變一欄,那麼,我們可以利用斷點,搭配order來自動調整中間區域的布局:
<aside class="col-xl order-xl-1 col-md-6 order-md-2" id="canvas_left">
<{includeq file="$xoops_rootpath/themes/$my_theme/xotpl/canvas_left.tpl"}>
</aside>
<div class="col-xl-7 order-xl-2 col-md-12 order-md-1" id="page_center">
<{includeq file="$xoops_rootpath/themes/$my_theme/xotpl/page_center.tpl"}>
</div>
<aside class="col-xl order-xl-3 col-md-6 order-md-3" id="canvas_right">
<{includeq file="$xoops_rootpath/themes/$my_theme/xotpl/canvas_right.tpl"}>
</aside>
當螢幕解析度高於1200時 xl
斷點才會起作用:
.col-xl-7
表示中間佔7等份,左右用.col-xl代表左右均分。
.order-xl-1
表示順序1(由上至下,由左至右),其餘依此類推
當螢幕解析度低於1200時,且高於768時,md
斷點才會起作用:
.col-md-12
表示中間佔12等份,也就是滿版,且.order-md-1
表示順序1,也就是會出現在最上面
左右用.col-md-6
代表左右各佔一半,且左區域.order-md-2
、右區域.order-md-3
會自動被擠到下方,變成兩欄的狀態。
https://bootstrap.hexschool.com/docs/4.2/layout/grid/#reordering
tad_themes
模組可以讓使用者很輕鬆的透過瀏覽器來設定佈景
要讓佈景可以搭配tad_themes
模組,必須至少要有一個config.php
檔案,且樣板檔需導入get_var.tpl
以取得站長填設定的值,以便將設定值套用到樣板中。
先產生config.php
檔案(可直接從school2019
複製過來)
修改config.php
設定,關閉不需要的大項目(不關也沒關係,只是會變成設了也沒用)
$config_tabs[1] = 0; //不使用tabs-1 版面基礎設定
$config_tabs[2] = 0; //不使用tabs-2 背景圖
$config_tabs[3] = 1; //使用tabs-3 滑動圖片
$config_tabs[4] = 0; //不使用tabs-4 logo圖
$config_tabs[5] = 0; //不使用tabs-5 區塊標題列
$config_tabs[6] = 0; //不使用tabs-6 導覽工具列
開啟的大項中,還有各個小項,也可以依據需求開啟或關閉,如:
$config_enable['slide_width'] = ['enable' => '0', 'min' => '', 'max' => '', 'require' => '0', 'default' => '12'];
$config_enable['slide_height'] = ['enable' => '0', 'min' => '', 'max' => '', 'require' => '0', 'default' => '0'];
$config_enable['use_slide'] = ['enable' => '1', 'min' => '', 'max' => '', 'require' => '0', 'default' => '1'];
enable
:是否啟用該設定項目,1為啟用,0為不使用
min
:最小值(搭配require
使用,限數字)
max
:最大值(搭配require
使用,限數字)
require
:是否為必填,1為必填,0為不限
default
:該設定項目的預設值,沒有可留空
先在<head>
中,引入此共同樣板檔,如此,便可抓到所有佈景變數的設定值
<{includeq file="$xoops_rootpath/modules/tadtools/themes_common/get_var.tpl"}>
接著在下方的</body>
之前加入以下這段,即可顯示所有可的佈景變數
<{includeq file="$xoops_rootpath/modules/tadtools/themes_common/show_var.tpl"}>
Tad Themes 偏好設定中有個「顯示主選單下拉選單」的設定項,若設為「是」,<{$auto_mainmenu}>
的值將會是 1,此時,導覽列應該要能顯示主選單內容。
主選單的所有內容會放在<{$main_menu_var}>
中,是一個陣列,故先用<{if}>
判斷有無顯示主選單,若有才用<{foreach}>
讀取主選單陣列。
<{if $auto_mainmenu}>
<li>
<a href="#"><i class="fa fa-play-circle"></i> 主選單</a>
<ul>
<{foreach from=$main_menu_var item=opt}>
<li>
<a href="<{$opt.url}>">
<i class="fa fa-play-circle"></i> <{$opt.title}>
</a>
</li>
<{/foreach}>
</ul>
</li>
<{/if}>
選項陣列包含id
、title
、url
、target
、icon
、img
、read_group
等索引,但重要的只有:
title
:選項文字,是主要的呈現部份
url
:連結位置,點擊選項後要連往何處
自訂選單的變數名稱為<{$menu_var}>
流程和主選單差不多,但自訂選單的變數多了幾個會用到的陣列索引:
target
:_self
(本視窗)、_blank
(新視窗)、popup
(燈箱效果)
icon
:自定義的Fontawesome 4.7圖示
submenu
:子選項,若有,也一樣是陣列格式,最多只有三層。
選項部份可寫成如下,並請存成xotpl/opt.tpl
:
<a href="<{$opt.url}>" target="<{$opt.target}>">
<i class="fa <{if $opt.icon}><{$opt.icon}><{else}>fa-play-circle<{/if}>"></i>
<{$opt.title}>
</a>
接著在xotpl/nav.tpl
中加入自訂選單的部份:
<{foreach from=$menu_var item=opt}>
<{includeq file="$xoops_rootpath/themes/$my_theme/xotpl/menu.tpl"}>
<{/foreach}>
由於子選單可能會有三層,若要一層一層的寫,整個樣板檔會很複雜,因此,可以做成獨立樣板,讓同一串語法可以不斷的重複被引用。
建立 xotpl/menu.tpl
:
<li>
<{includeq file="$xoops_rootpath/themes/$my_theme/xotpl/opt.tpl"}>
<{if $opt.submenu}>
<ul>
<{foreach from=$opt.submenu item=opt}>
<{includeq file="$xoops_rootpath/themes/$my_theme/xotpl/menu.tpl"}>
<{/foreach}>
</ul>
<{/if}>
</li>
先載入 xotpl/opt.tpl
以呈現目前選項。
接著用<{if}>
判斷目前傳進來的選項有無子選項$opt.submenu
若有,就在選項下方加入<ul>
以做一個子選單,然後再利用$opt.submenu
跑一次迴圈,重複同樣的動作。
我們可以利用<{$xoops_isuser}>
來判斷目前的操作者是否有登入,若有,可以加入會員選單(以取代會員選單區塊)
<{if $xoops_isuser}>
<li>
<a href="#">
<i class="fa fa-user-circle-o"></i>
歡迎:<{$xoops_name}>
</a>
</li>
<{/if}>
其中<{$xoops_name}>
為使用者真實姓名,亦可用<{$xoops_uname}>
帳號
若是想讓該選項跑到右邊,可以利用CSS的浮動功能來做,例如:float:right;
但若是在手機狀態下,我們希望所有選項都在左邊,因此,可改用BootStrap4的浮動樣式來做,並加上斷點判斷,如.float-md-right
就是螢幕在768px以上才會浮動到右邊的意思。
<li class="float-md-right">
下方我們可以加入會員選單,我們先利用<{$xoops_isadmin}>
來判斷該用戶是否為管理員,若是,則利用<{foreach}>
迴圈讀取<{$admin_menu_var}>
,並產生管理員選單。
<ul>
<{if $xoops_isadmin}>
<{foreach from=$admin_menu_var item=admin_opt}>
<li>
<a href="<{$admin_opt.url}>">
<i class="fa <{$admin_opt.icon}>"></i> <{$admin_opt.title}>
</a>
</li>
<{/foreach}>
<{/if}>
</ul>
接著在下方就可以利用<{foreach}>
迴圈讀取<{$user_menu_var}>
,並產生會員選單。
<{foreach from=$user_menu_var item=user_opt}>
<li>
<a href="<{$user_opt.url}>">
<i class="fa <{$user_opt.icon}>"></i> <{$user_opt.title}>
</a>
</li>
<{/foreach}>
當選項很多時,可以考慮改用橫向的多欄選單,用法也很簡單,只要加上.mega
即可:
<li class="mega" data-columns=6>
不過加上後,會發現選單是置中的,且顏色不太對勁,因此,可以透過CSS來調整之:
.stellarnav.desktop>ul>li.mega>ul>li>a {
color: #3c583d;
}
.stellarnav.desktop>ul>li.mega>ul>li>a:hover {
color: #fdfdf9;
background: #91917a;
}
修改js\stellarnav.js
的347行,在 navWidth
前加上-
nav.find('li.mega > ul').css({'max-width':-navWidth});