thaiall logomy background
บูตสแตรป (bootstrap)
my town
HTML | Chrome Responsive | JavaScript | Bootstrap | JSLibrary | CanvasJS.com | JS01 | CGPA | Joom | CommToXLS | AdminLTE | Laravel
ความหมายของ Bootstrap
# Bootstrap คืออะไร
Bootstrap คือ การรวมแฟ้มจาวาสคริปต์ (.js) และซีเอสเอส (.css) ที่ประมวลมาแล้วว่าดี (our precompiled and source code flavors) ให้เรียกใช้ได้ ทำให้งานพัฒนาเว็บดำเนินการได้อย่างรวดเร็ว ซึ่ง Precompiled files สามารถนำไปวางในเครื่องบริการนั้น มีให้เลือกได้ตามความเหมาะสม จำแนกตามนามสกุลของแฟ้มที่มีคุณสมบัติและขนาดต่างกัน
# แฟ้มกลุ่ม js และ css
แฟ้มกลุ่ม JS Files มีแบบให้เลือก ดังนี้ .js, .bundle.js และ .min.js โดยแฟ้ม bootstrap.js จะไม่รวมฟังก์ชัน Popper เข้าไป แต่แฟ้ม bootstrap.bundle.js จะรวมฟังก์ชัน Popper เข้าไว้ทำให้ขนาดใหญ่กว่า ส่วนนามสกุลแฟ้ม .min.js คือ minified เป็นการทำให้เล็ก เมื่อเปิดด้วย editor จะอ่านแฟ้ม .min.js ไม่ได้ เพราะ code จะเรียงติดกันเป็นบรรทัดเดียวกัน จึงอ่านไม่ได้ ข้อดีของ .min.js คือ มีขนาดแฟ้มลดลง ในขณะที่ฟังก์ชันการทำงานยังทำได้เหมือนเดิม ส่วนแฟ้มแบบ .js และ bundle.js สามารถเปิดอ่านและแก้ไขได้ แต่มีขนาดใหญ่กว่าแฟ้มแบบ .min.js ส่วนแฟ้มกลุ่ม CSS files มีแบบให้เลือกที่สำคัญ 2 แบบ คือ แฟ้มมาตรฐาน .css และแฟ้มลดขนาด .min.css
Bootstrap คือ สิ่งที่ช่วยทำให้ง่ายขึ้น หรือ สิ่งที่ทำได้ด้วยตัวเอง เป็น Front-end Framework ที่ช่วยพัฒนาเว็บไซต์ได้เร็วและง่ายขึ้น ผ่านการใช้ Javascript และ CSS Library ที่พร้อมให้เรียกใช้ หรือนำไปติดตั้งในเครื่องบริการของตน ซึ่ง Bootstrap มีเครื่องมือหลักให้ 4 แบบ ประกอบด้วย แบบที่ 1) Scaffolding หรือ Grid system ช่วยจัด column และ row บน screen เพื่อจัด Layouts แบบที่ 2) Base CSS ช่วยจัด form, table, icons หรือ buttons แบบที่ 3) Components ช่วยจัด Navbar หรือ Pagination หรือ Progress bars หรือ Media object แบบที่ 4) JavaScript ช่วยจัด Dropdown, Tab, Popover, Collapse, Carousel

อ่านเพิ่ม getbootstrap.com
bootstrap.js (132 KB)
bootstrap.min.js (59 KB)
bootstrap.bundle.js (223 KB)
bootstrap.bundle.min.js (79 KB)
Try it : Glyphicons
Try it : Text Icons
Try it : Web App. Icons
การใช้ Bootstrap กรณีใช้ Navbar - เมนูคอมพิวเตอร์ ก็คล้ายกับเมนูอาหาร มีตัวเลือกมากมายให้เลือกสั่ง ต้ม ผัด แกง ทอด ไอศครีม เมนูคอมพิวเตอร์ที่คุ้นตาก็จะมี file, edit, view, help เป็นต้น นักพัฒนา (Developer) จะเลือกเครื่องมือจัดเมนูให้ผู้ใช้ (User) เข้าถึงบริการต่าง ๆ ที่พัฒนาขึ้น ต่อไปเป็นตัวอย่างการทดสอบ menu ทั้ง 6 แบบ ที่ใช้ bootstrap กับ Java script ข้างนอก และเขียนเอง ซึ่งแชร์ Source Sode 6 แบบ ใน blog
ตัวอย่างที่ 1 (แบบที่ 3 + 4) การอ้างอิง Bootstrap จากภายนอกเครื่องบริการ มีใช้ที่ marry.htm (menu)
Sample #1
<link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<nav class="navbar navbar-default">
  <div class="container-fluid">
    <div class="navbar-header">
      <a class="navbar-brand" href="http://www.thaiall.com">Thaiall.com</a>
    </div>
    <ul class="nav navbar-nav">
      <li class="active"><a href="http://www.thaiall.com">Home</a></li>
      <li><a href="http://www.thaiall.com/php">PHP</a></li>
    </ul>
  </div>
</nav>

ตัวอย่างที่ 2 (แบบที่ 2) การอ้างอิง Bootstrap เฉพาะ glyphicons จากภายนอกเครื่องบริการ มีใช้ที่ /handbill
Sample #2
<link rel="stylesheet" 
href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css">
<span class="glyphicon glyphicon-heart" style="color:red;"></span>
ตัวอย่างที่ 3 (แบบที่ 2) การอ้างอิง Bootstrap เฉพาะ glyphicons จากภายในเครื่องบริการ มีใช้ที่ /web2
สำหรับ /bootstrap/bootstrap-glyphicons330.css
Sample #3
<link rel="stylesheet" href="/bootstrap/bootstrap-glyphicons330.css">
<span class="glyphicon glyphicon-heart" style="color:red;font-size:20px;"></span>
ตัวอย่างที่ 4 การใช้อักษรพิเศษรูปหัวใจ (Heart) อาจไม่ต้องใช้ bootstrap มีใช้ที่ blank_menu.htm
Sample #4
<span style="color:red;font-size:40px;"> &hearts; &#9829; &#x2665; </span>
<span style="color:pink;font-size:40px;"> &#10084; &#x2764; </span>
<span style="color:blue;font-size:40px;"> &#10085; &#x2765; </span>
Login Form มีให้ดาวน์โหลดเยอะ และเชื่อมกับ github.com
ทดสอบ Form ของ Bootstrap ที่ w3schools.com หรือเลือกจาก Bootstrap Login Examples ใน Bootsnipp.com ซึ่งใช้บัญชีของ github.com ได้ มีตัวอย่าง Form : bootsnipp.com/../password-strength-meter ที่ตรวจสอบความแข็งแรงของรหัสผ่านได้ ซึ่งดาวน์โหลดแบบ html มาใช้ได้โดยง่าย ทดสอบที่นี่ click
Bootstrap ใช้ทำ Lightbox ได้ ตัวอย่าง Lightbox พบในหลายรูปแบบ แบบหนึ่ง พบที่ Bootsnipp.com พัฒนาโดย mouse0270 แล้วผมก็คัดลอกไปไว้ใน bootstrap_lightbox.html หรือทดสอบคลิ๊กจากภาพข้างล่างนี้ ก็เป็นการใช้ Lightbox ของ mouse0270 เช่นกัน ซึ่งเรียกใช้แฟ้ม ดังนี้ 1) bootstrap.min.css 2) bootstrap.min.js 3) jquery-1.11.1.min.js
อีกบริการของ Lightbox
ที่ผมใช้เป็นหลักใน thaiall.com ใช้ Java script อีกชุดหนึ่ง คือ Lightbox v2.04 ของ Lokesh Dhakar [lokeshdhakar.com] ทดสอบที่ handbill แต่ใช้ร่วมกับ bootstrap อาจต้องปรับเพิ่ม noconflict เพื่อเลือกระหว่าง jquery.js กับ prototype.js อาจมีปัญหาพบใน Bootstrap : Lightbox เคยพบปัญหาการใช้ Nav Dropdown นั่นแก้ไขได้ในเบื้องต้นไปแล้ว ซึ่งอ่านเพิ่มเติมได้จาก marry_menu.htm ซึ่งกรณีนั้น แก้ไขโดยเข้าไปปรับ code ใน prototype.js บรรทัดที่ 1577 แต่ใน webpage หน้านี้ แก้ไขโดย เปลี่ยนวิธีการเรียกใช้ .ready
จาก $(document).ready(function() { }
เป็น jQuery(document).ready(function($) { }
+ อ่านเรื่อง noconflict() เป็นภาษาไทยได้ที่ unzeen.com

อีกตัวอย่างในการปรับ code ที่ /html5/test.htm
เพื่อให้ใช้ jquery.get และ lightbox ได้ทั้งคู่
จาก $.get("http://ipinfo.io", ..
เป็น jq164 = jQuery.noConflict(true);
jq164.get("http://ipinfo.io", ..
มหาวิทยาลัยเนชั่น
Lightbox
Chat box
บริการของ bootsnipp.com ที่แชร์ code และ preview ผลงานออกแบบ bootstrap เราสามารถ download code มาใช้งานได้ แต่ต้อง Login โดยผมใช้บัญชีของ github.com เข้า website นี้ ก็ download มาไว้ในเครื่อง และปรับตำแหน่งภาพนิดหน่อย หากจะเขียน code เรื่อง chat ด้วย server-side script ก็ไม่ต้องออกแบบแล้ว เหลือเพียงส่วนของ action เท่านั้น โดยเลือกภาพจากโฮมเพจอบรมนักศึกษาที่ training61.htm
ใช้ chrome แบบ --disable-web-security

ทดสอบที่ adminlte.php
การใช้ chrome สั่งเปิด webpage ที่มี code ใน all.min.css ไปเรียก font จากภายนอก หากไม่สั่ง diable web security ก็จะเปิดไม่ได้ แม้มีการปรับแก้ใน .htaccess หรือเพิ่มคำสั่ง header ด้วยภาษา php แล้ว ก็ยังไม่สามารถข้าม CORS (Cross Origin Resource Sharing) Policy ได้ วิธีที่ถูกต้อง คือ ติดตั้ง font ในเครื่องเดียวกับ webpage ที่เรียกใช้ font ซึ่งอยู่ในเครื่องเดียวกัน หรือสั่งยกเลิก Policy นี้ใน Browser เป็นรายกรณีไป ซึ่งในเบื้องต้น พบ 2 วิธี คือ 1) กำหนด option --disable-web-security ขณะเรียกใช้ chrome 2) ติดตั้ง Chrome extension : Allow CORS ใน chrome สำหรับการใช้คำสั่งต่าง ๆ เกี่ยวกับโปรแกรม chrome นั้น สามารถอ่านเพิ่มเติมได้จาก howtogeek.com
Chrome extension : Allow CORS
CORS errors after upgrading to Chrome v76
แฟ้ม .htaccess
<FilesMatch "\.(ttf|otf|eot|woff|woff2|svg)$">
<IfModule mod_headers.c>
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
</IfModule>
</FilesMatch>
แฟ้ม adminlte.php หรือแฟ้มที่เรียกใช้ font ภายนอก
<?php header('Access-Control-Allow-Origin: *'); ?>
การสั่งเปิด chorme แบบมองข้าม security
C:\> "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir=c:\xampp\tmp
C:\> start chrome www.thaiall.com/adminlte/adminlte.php --disable-web-security --user-data-dir=c:\xampp\tmp
การใช้ Popover ใน Bootstrap Popover คือ Front-end framework ที่อยู่ใน bootstrap มีหน้าที่บริการเปิดหน้าต่างคำอธิบายเพิ่มเติม เด้งขึ้นมาอยู่เหนือหน้าจอหลัก สามารถกำหนดให้เปิดขึ้นมาได้ผ่านการคลิ๊ก หรือเมาส์โอเวอร์ก็ได้ เช่น เคล็ดลับ คำแนะนำ หรือทิป โดยเรียกใช้ bootstrap ได้ 2 แบบ คือ การเรียกจาก CDN ที่ให้บริการ หรือดาวน์โหลดมาไว้ในเครื่องบริการของตน มีตัวอย่างที่ popover.htm หรือ /kmed หรือ /web2
ช้ในโฮมเพจ เทคโนโลยีเพื่อการจัดการความรู้ทางการบริหารการศึกษา ถึง 2 กลุ่ม คือ 1) ท้ายหัวข้อหลักย่อย เพื่อเพิ่มคำอธิบายหัวข้อ ใช้ mouse over แล้วแสดงหน้าต่าง popover โดยไม่ต้องคลิ๊กเปิด และ 2) หัวข้อกิจกรรม เพื่อเพิ่มอธิบายกิจกรรม ใช้ mouse คลิ๊กปิด และเปิด ถ้าคลิ๊กเปิดแล้ว หน้าต่าง popover จะไม่ปิดเอง จะต้องคลิ๊กปิดเท่านั้น
อ่านเพิ่มเติมได้ที่ getbootstrap.com
ตัวอย่าง popover.htm
ตัวอย่าง popper.htm
# การใช้ Popover จาก Bootstrap
- Popover คือ ฟังก์ชันแสดง กล่องข้อความเด้งขึ้น เมื่อคลิ๊กลิงค์ (link) หรือปุ่ม (button)
- ใช้งานผ่าน bootstrap จาก CDN (Content Delivery Network)
- เรียกใช้โค้ด 3 แฟ้ม คือ bootstrap.min.css , jquery.min.js และ bootstrap.min.js
# code ตัวอย่างใน /java/popover.htm 
<!DOCTYPE html><meta charset="utf-8" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script><! ต้องเรียกก่อน bootstrap.min.js >
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script><! ต้องเรียกหลัง jquery.min.js >
<div class="container" style="text-align:center;font-size:20px;">
<button type="button" class="btn btn-lg btn-danger" data-toggle="popover" data-placement="right" style="height:100px;" 
title="Toggle" data-content="Toggle คือ สลัก หรือสวิตซ์ปิดเปิดไฟฟ้า">Toggle คืออะไร</button>
<br/><a href="#" data-toggle="popover" title="Template" data-placement="left"
data-content="เทมเพจ คือ เว็บเพจต้นแบบที่ถูกออกแบบทั้งโครงสร้าง ภาพ และเนื้อหา..">ความหมายเทมเพจ</a>
</div><script>$(document).ready(function(){$('[data-toggle="popover"]').popover();});</script>
การใช้ Popper Popper คือ ฟังก์ชันแสดงกล่องข้อความ หรือฟองคำพูดปรากฎขึ้นในหน้าเว็บ เพื่อแสดงการโต้ตอบ หรือเสนอข้อมูลแก่ผู้ใช้ ถูกใช้ในเว็บไซต์ที่มีส่วนต่อประสานที่ซับซ้อน เช่น เคล็ดลับ คำแนะนำ หรือทิป ซึ่งการติดตั้ง popperJS + tooltipjs สามารถทำได้ 3 วิธี 1) include popperjs ที่ดาวน์โหลดจาก Github 2) include CDN URL 3) ติดตั้งผ่าน npm และ yarn เพื่อใช้ใน angular
อ่านเพิ่มเติมได้ที่ popper.js.org
การติดตั้งเพื่อใช้ใน Angular jquery + popper + bootstrap + angular
ตัวอย่าง cloudhadoop.com (installation)
ตัวอย่าง codepen.io
ตัวอย่าง popper.htm
# code ตัวอย่างใน /java/popper.htm ใช้แบบ CDN
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.4/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tooltip.js/1.3.0/umd/tooltip.min.js"></script>
<script src='https://code.jquery.com/jquery-2.2.4.min.js'></script>
<script>
document.addEventListener('DOMContentLoaded',function(){
  var trigger = document.getElementsByClassName("mybutton")[0];
  var instance = new Tooltip(trigger,{title: trigger.getAttribute('data-tooltip'),trigger: "hover",});
});
</script></head><body style="text-align:center;">
<div align="center"><button class="button mybutton" data-tooltip="Please Click Me"> Click Here</button></div>
<script>
var hidden=true;
$(document).ready(function(){
  var ref = $('#button-a');        
  var popup = $('#popup');
  popup.hide();
  ref.click(function(){   
     if (hidden) {
       popup.show(); 
       var popper = new Popper(ref,popup,{ placement: 'bottom', }); 
      } else {
       popup.hide();
      }
    hidden=!hidden;
});  
})
</script>
<style>#popup { display:block;width:90px;height:90px;border: thin solid black;background-color:yellow;} </style>
<div id="popup">ใช้ Popper.js!</div>
<button id="button-a">button</button> 
การใช้ Modal ใน Bootstrap
ตัวอย่าง modal.htm
# การใช้ Modal ผ่าน jquery และ bootstrap
- Modal คือ หน้าต่างวินโดวส์แบบหนึ่ง ที่ถูกสร้างขึ้นจากหน้าต่างหลัก ปรากฎขึ้นด้านบน โดยยังเห็นหน้าต่างหลักปรากฎอยู่ด้านล่าง เป็นการออกแบบปฎิสัมพันธ์สำหรับแอพพลิเคชั่นบนคอมพิวเตอร์
- [อ้างอิงจาก w3schools.com](https://www.w3schools.com/bootstrap/tryit.asp?filename=trybs_modal)

# code ตัวอย่างใน /java/modal.htm 
```
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<div class="container">
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">กรุณาอ่านให้จบ</button>
<div class="modal fade" id="myModal">
  <div class="modal-dialog"><! ได้กล่อง dialog ขึ้นมากลางจอภาพ ไม่กำหนดจะขยายเต็มจอ >
    <div class="modal-content" style="background-color:#ffffdd;"><! กล่องบรรจุ content ถ้าไม่มีจะโปร่งใส >
      <div class="modal-header" style="background-color:#dddddd;">
        <button type="button" class="close" data-dismiss="modal">×</button>
        <h4 class="modal-title">อ่านจบแล้วคลิ๊ก ปิด ได้นะครับ</h4>
      </div>
      <div class="modal-body">
        <p>Modal คือ หน้าต่างวินโดวส์แบบหนึ่ง </p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">ปิด</button>
      </div>
    </div>
  </div>
</div> 
</div>
```
การเลือก login form สวย ๆ จาก Bootsnipp.com

demo
ค้น Form สวย ๆ ใน Bootsnipp.com ด้วย tags = login
พบตัวอย่างมากมายเกี่ยวกับ Login Form เช่น My Awesome Login Page
preview : https://bootsnipp.com/snippets/3522X
1. เข้าไปสำรวจโค้ดใน html + css
2. คัดลอกโค้ดใน html ไปสร้างแฟ้ม index.html
3. ก่อน <!DOCTYPE html> พบ <!------ Include the above in your HEAD tag ---------->
สร้าง <style></style> ใต้ tag Include
4. คัดลอก css มาไว้ใน <style></style>
5. ทดสอบเปิด index.html เช่น file:///D:/index.html
6. ผลการรวมแฟ้ม html + css ที่ bootsnipp_login_form.htm
7. การใช้งานก็ให้ปรับ tag : form + input
ชวนมอง Theme ที่ themeforest.net

PIXINVENT
มี Theme สวย ๆ มากมายที่ขายผ่าน Themeforest.net เช่น ตัวอย่างผลงานของ pixinvent ขาย Regular License ในราคา $32 ส่วน Extended License ขาย $799 พบว่า Theme นี้ขายไปแล้ว 7,801 Sales เมื่อวันที่ 7 ตุลาคม 2563 ถ้าขายเป็น Regular License ทั้งหมด และตีเป็นเงินไทย (7,801 * 32 * 30) 7,488,960 บาท นอกจากนี้ยังมี Theme หลายรูปแบบ เช่น Wordpress, Site, หรือ CMS เป็นต้น
นอกจากนี้ยังมีเว็บไซต์อีกมากที่เผยแพร่ Free template เช่น colorlib.com, free-css.com, templatemo.com, creative-tim.com หรือ bootsnipp.com/tags/login
AdminLTE
AdminLTE AdminLTE คือ เทมเพจ (Template) โอเพนท์ซอร์ทที่สวยงามสำหรับนักพัฒนาเว็บ หรือผู้ดูแลระบบ ทำงานด้วย Bootstrap มีรุ่นที่สามารถนำมาใช้ได้ฟรี ถูกพัฒนาโดย Almsaeed Studio ผู้พัฒนาสามารถคัดลอกเทมเพจในหัวข้อ section หรือ div ที่ต้องการไปปรับปรุงโค้ดให้เป็นรูปแบบของตนเองได้โดยง่าย ถูกพัฒนาอย่างต่อเนื่อง และมีหลายรุ่น จากข้อมูลใน Github พบรุ่นล่าสุดคือ 3.1.0 เมื่อ 22 มีนาคม 2564 สำหรับรุ่นที่ผมดาวน์โหลดมาใช้ คือ Adminlte-3.0.4 ออกเมื่อ 2 เมษายน 2563
เว็บเพจที่น่าสนใจ
ต.ย. หน้าแรกที่ index.html - adminlte.io/themes/v3/index.html
ต.ย. Login form - adminlte.io/themes/v3/pages/forms/general.html
ต.ย. Login page - adminlte.io/themes/v3/pages/examples/login.html
[Folder] (2,180 Files, 219 Folders, 81.1MB)
- starter.html
- index.html index2.html index3.html 
/build
/dist
/docs
/pages
/plugins
ชวนอ่านโค้ด index.html ใน AdminLTE

AdminLTE_burin1
บว่า index.html มี 1375 บรรทัด (3.0.4) เปิดแฟ้มใน vscode จะเห็น block ได้อย่างชัดเจน ย่อขยาย block ได้ง่าย การแบ่งส่วน ทำให้การเข้าไปแก้ไขในแต่ละส่วน สามารถทำได้อย่างเข้าใจ และค่อย ๆ แกะโค้ดส่วนย่อยไปทีละส่วน แนวคิดนี้เรียกว่า การวิเคราะห์โค้ด เมื่อแบ่งแยก และปรับใช้ภายหลังการปรับใช้เราเรียกว่าการสังเคราะห์
โค้ดแฟ้มนี้แบ่งเป็น 6 ส่วน
1. 10 - 28 : link เพื่อเรียกใช้ css ทั้งจากภายใน และภายนอก
2. 35 - 154 : "main-header" แสดง NavBar แบ่งเป็น navbar-nav, search form และ right navbar links (dropdown menu)
3. 158 - 712 : "main-sidebar" Container (logo, side bar, side bar menu) รวมรายการทางซ้ายทั้งหมด
4. 715 - 1323 : "content-wrapper" (กระดาษห่อ). Contains page content เช่น chart ต่าง ๆ
5. 1325 - 1331 : "main-footer" สำหรับแสดงส่วนท้ายสุด
6. 1342 - 1374 : เรียกใช่ javascript จากภายนอก
adminlte-3.0.4 - general.html เป็น login.html

jpg=12766,png=8507
ตัวอย่าง Login Form ที่ https://adminlte.io/themes/v3/pages/forms/general.html กรณีนำ AdminLTE ไปใช้งานใน Webserver คือ คัดลอก Folder ใน adminlte-3.0.4 ไปวางใน Root Directory และกรณีใช้ใน Laravel มีห้อง Root directory คือ /public โดยปรับ code จาก general.html เป็น login.html ทดสอบเปิดที่ http://localhost/pages/forms/login.html
<!DOCTYPE html><html><head>  
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="../../dist/css/adminlte.min.css">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700" rel="stylesheet">
</head>
<body class="hold-transition sidebar-mini">
<div class="card card-info" style="width:90%;margin:auto">
<div class="card-header"><h3 class="card-title">Horizontal Form</h3></div>
<form class="form-horizontal">
<div class="card-body">
<div class="form-group row">
<label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div></div>
<div class="form-group row">
<label for="inputPassword3" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3" placeholder="Password">
</div></div>
<div class="form-group row">
<div class="offset-sm-2 col-sm-10">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="exampleCheck2">
<label class="form-check-label" for="exampleCheck2">Remember me</label>
</div></div></div></div>

<div class="card-footer">
<button type="submit" class="btn btn-info">Sign in</button>
<button type="submit" class="btn btn-default float-right">Cancel</button>
</div>

</form></div>

</body></html>


<script src="../../plugins/jquery/jquery.min.js"></script>

<script src="../../plugins/bootstrap/js/bootstrap.bundle.min.js"></script>

<script src="../../plugins/bs-custom-file-input/bs-custom-file-input.min.js"></script>

<script src="../../dist/js/adminlte.min.js"></script>

<script src="../../dist/js/demo.js"></script>
<script type="text/javascript">
$(document).ready(function () {
  bsCustomFileInput.init();
});
</script>
สิ่งที่ใช้ใน adminlte-3.0.4
# เรียกใช้ font จาก googleapis.com
```
<html><head><link rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700" >
<style> body {font-family: 'Source Sans Pro';font-size:20px;font-weight:300;} 
.c1 {font-family: 'Source Sans Pro';font-weight:400;font-style:italic;} 
.c2 {font-family: 'Source Sans Pro';font-weight:400;} 
.c3 {font-family: 'Source Sans Pro';font-weight:700;} 
</style>
</head><body>Hello 300
<div class="c1">World 400i</div>
<div class="c2">I am a 400</div>
<div class="c3">man 700</div>
```
- [อ่านเพิ่ม google.com](https://developers.google.com/fonts/docs/getting_started)

# เรียกใช้ card card-info card-header จาก adminlte.min.css
```
<link rel="stylesheet" href="https://adminlte.io/themes/v3/dist/css/adminlte.min.css">
<div class="card card-info" style="width:90%;margin:auto">
<div class="card-header">hello background-color: #17a2b8;</div>
</div>
```

# ตรวจสอบ Email ด้วย placeholder จาก jquery
```
<script src="https://adminlte.io/themes/v3/plugins/jquery/jquery.min.js"></script>
<form>
<input type="email">
<button type="submit">Sign in</button>
</form>
```
- [อ่านเพิ่ม เรื่อง placeholder](https://www.w3schools.com/tags/att_input_type_email.asp)

# บริการของ bs-custom-file-input.min.js 
- feature ของ js ตัวนี้ คือ ช่วยการแสดงชื่อแฟ้มที่จะอัพโหลด ได้อย่างชัดเจน
- [อ่านเพิ่ม github.com](https://github.com/Johann-S/bs-custom-file-input) 
```
<link rel="stylesheet" href="https://adminlte.io/themes/v3/dist/css/adminlte.min.css">
<div class="custom-file">
<input type="file" class="custom-file-input" id="exampleInputFile" multiple>
<label class="custom-file-label" for="exampleInputFile">Choose files</label>
</div>
<script src="https://adminlte.io/themes/v3/plugins/jquery/jquery.min.js"></script>
<script src="https://adminlte.io/themes/v3/plugins/bs-custom-file-input/bs-custom-file-input.min.js"></script>
<script type="text/javascript">
$(document).ready(function () { bsCustomFileInput.init(); });
</script>
```
ปรับ adminlte-3.0.4 เรียก css และ js จาก adminlte.io พบ font ไม่ออก
ลูกศิษย์หลายคน เช่น หนึ่ง ฝน นน และฟลุ๊ค ทักว่าอ้างอิง css และ js จาก External site แล้ว icon ต่าง ๆ ไม่ออก กลายเป็นสี่เหลี่ยม เข้าไปตรวจโค้ด พบว่า การเรียกใช้ font ผ่าน all.min.css นั้น พบข้อจำกัดที่เรียกว่า CORS ถึง 12 ตำแหน่ง ซึ่ง Cross-Origin Resource Sharing คือ การแชร์ทรัพยากรข้ามไซต์นั้นจะไม่ได้รับการอนุญาต วิธีแก้ไขที่ผมใช้ คือ ดาวน์โหลดกลุ่ม font มาไว้ในเครื่อง แล้วเขียน css @font-face อ้างอิงแฟ้ม font ภายในเครื่องเดียวกัน แทนการเรียกใช้ font ที่เกิดขึ้นใน all.min.css จาก external site มีผลให้ icon ต่าง ๆ ปรากฎตามปกติ
ทดสอบที่ adminlte.htm และเปิดให้ download .rar ทั้งชุดด้วย
โหลดฟอนต์ ที่ /webfonts/fa*.*
ใช้ data-toggle="collapse" บน AdminLTE
รณีที่ผู้พัฒนาเข้าใจ AdminLTE มาบ้างแล้ว จึงขอข้ามขั้นตอนการติดตั้งไปถึงการเขียนโค้ด เพื่อใช้ collapse ควบคุมการเปิดปิดกล่องแสดงความคิดเห็น ที่ใช้ความสามารถจาก bootstrap ซึ่งพบว่า Template มาตรฐาน มักติดตั้ง javascript library มาให้พร้อมสำหรับเรียกใช้แล้ว เช่น AdminLTE ซึ่งเป็นเทมเพจที่ได้รับความนิยม โดย data-toggle="collapse "คือ ฟังก์ชันหนึ่งที่มีหน้าที่สั่งเปิดปิดการแสดงเคล็ดลับ คำแนะนำ หรือทิป สามารถเขียนโค้ดกำหนด tag คือ button และ div ได้เลย ไม่ต้องสั่ง include : js library ซ้ำเข้าไปอีก จากตัวอย่างที่ thaiall.com/adminlte ได้เพิ่มปุ่มชื่อ collapse หลังคำว่า Dashboard โดยแก้ไขประมาณบรรทัดที่ 724 ใช้โค้ดด้านล่างนี้ พิมพ์เข้าไประหว่างคำว่า Dashboard และก่อนปิด tag /h1
<button type="button" class="btn btn-info" data-toggle="collapse" data-target="#demo">collapse</button>
<div id="demo" class="collapse">hello world</div>
Bootstrap tooltips w3schools.com/bootstrap/bootstrap_ref_js_tooltip.asp
thainame.net/quiz/bootstraptooltips.htm
<!DOCTYPE html><html lang='th'><head><title>Bootstrap tooltips</title></head>
<body>
<link rel='stylesheet' href='../bootstrap/bootstrap.min.css' />
<br/><a href = '#' data-toggle='tooltip' title='answer'>info</a>
<script src='../bootstrap/jquery-3.5.1.min.js'></script>
<script src='../bootstrap/bootstrap.min.js'></script>
<script>$(document).ready(function(){ $('[data-toggle="tooltip"]').tooltip(); });</script>
</body></html>
rspsocial
Thaiall.com