วิดเจ็ตการค้นหามีอินเทอร์เฟซการค้นหาที่ปรับแต่งได้สําหรับเว็บแอปพลิเคชัน วิดเจ็ตนี้ใช้ HTML และ JavaScript เพียงเล็กน้อยในการติดตั้งใช้งานและเปิดใช้ฟีเจอร์การค้นหาทั่วไป เช่น มิติข้อมูลและการแบ่งหน้า นอกจากนี้ คุณยังปรับแต่งส่วนต่างๆ ของอินเทอร์เฟซด้วย CSS และ JavaScript ได้ด้วย
หากต้องการความยืดหยุ่นมากกว่าที่วิดเจ็ตนำเสนอ ให้ลองใช้ Query API ดูข้อมูลเกี่ยวกับการสร้างอินเทอร์เฟซการค้นหาด้วย Query API ได้ที่การสร้างอินเทอร์เฟซการค้นหาด้วย Query API
สร้างอินเทอร์เฟซการค้นหา
การสร้างอินเทอร์เฟซการค้นหาต้องดำเนินการหลายขั้นตอน ดังนี้
- กำหนดค่าแอปพลิเคชันการค้นหา
- สร้างรหัสไคลเอ็นต์สําหรับแอปพลิเคชัน
- เพิ่มมาร์กอัป HTML สําหรับช่องค้นหาและผลการค้นหา
- โหลดวิดเจ็ตในหน้าเว็บ
- เริ่มต้นวิดเจ็ต
กำหนดค่าแอปพลิเคชันการค้นหา
อินเทอร์เฟซการค้นหาแต่ละรายการต้องมีแอปพลิเคชันการค้นหาที่กําหนดไว้ในคอนโซลผู้ดูแลระบบ แอปพลิเคชันการค้นหาจะให้ข้อมูลเพิ่มเติมสําหรับการค้นหา เช่น แหล่งข้อมูล ข้อมูลประกอบ และการตั้งค่าคุณภาพการค้นหา
หากต้องการสร้างแอปพลิเคชันการค้นหา โปรดดูหัวข้อสร้างประสบการณ์การค้นหาที่กําหนดเอง
สร้างรหัสไคลเอ็นต์สําหรับแอปพลิเคชัน
นอกเหนือจากขั้นตอนในหัวข้อกำหนดค่าการเข้าถึง Google Cloud Search API แล้ว คุณยังต้องสร้างรหัสไคลเอ็นต์สำหรับเว็บแอปพลิเคชันด้วย
สิ่งที่จะเกิดขึ้นเมื่อคุณกําหนดค่าโปรเจ็กต์
- เลือกประเภทไคลเอ็นต์เว็บเบราว์เซอร์
- ระบุ URI ต้นทางของแอป
- หมายเหตุเกี่ยวกับรหัสไคลเอ็นต์ที่สร้าง คุณต้องใช้รหัสไคลเอ็นต์เพื่อดำเนินการขั้นตอนถัดไป ไม่จำเป็นต้องใช้รหัสลับไคลเอ็นต์กับวิดเจ็ต
ดูข้อมูลเพิ่มเติมที่หัวข้อOAuth 2.0 สําหรับเว็บแอปพลิเคชันฝั่งไคลเอ็นต์
เพิ่มมาร์กอัป HTML
วิดเจ็ตต้องใช้ HTML เพียงเล็กน้อยจึงจะทำงานได้ คุณต้องระบุข้อมูลต่อไปนี้
- องค์ประกอบ
input
สำหรับช่องค้นหา - องค์ประกอบที่จะยึดป๊อปอัปคำแนะนำ
- องค์ประกอบที่มีผลการค้นหา
- (ไม่บังคับ) ระบุองค์ประกอบที่จะใส่ตัวควบคุมแง่มุม
ข้อมูลโค้ด HTML ต่อไปนี้แสดง HTML สําหรับวิดเจ็ตการค้นหา ซึ่งระบุองค์ประกอบที่จะเชื่อมโยงด้วยแอตทริบิวต์ id
โหลดวิดเจ็ต
วิดเจ็ตจะโหลดแบบไดนามิกผ่านสคริปต์โปรแกรมโหลด หากต้องการรวมตัวโหลด ให้ใช้แท็ก <script>
ดังที่แสดง
คุณต้องระบุการเรียกกลับ onload
ในแท็กสคริปต์ ระบบจะเรียกใช้ฟังก์ชันเมื่อโปรแกรมโหลดพร้อมใช้งาน เมื่อโปรแกรมโหลดพร้อมแล้ว ให้โหลดวิดเจ็ตต่อโดยเรียกใช้ gapi.load()
เพื่อโหลดไคลเอ็นต์ API, Google Sign-In และโมดูล Cloud Search
ระบบจะเรียกใช้ฟังก์ชัน initializeApp()
หลังจากที่โหลดโมดูลทั้งหมดแล้ว
เริ่มต้นวิดเจ็ต
ขั้นแรก ให้เริ่มต้นไลบรารีไคลเอ็นต์โดยเรียกใช้ gapi.client.init()
หรือ gapi.auth2.init()
ด้วยรหัสไคลเอ็นต์ที่สร้างขึ้นและสโคป https://www.googleapis.com/auth/cloud_search.query
ถัดไป ให้ใช้คลาส gapi.cloudsearch.widget.resultscontainer.Builder
และ gapi.cloudsearch.widget.searchbox.Builder
เพื่อกําหนดค่าวิดเจ็ตและเชื่อมโยงกับองค์ประกอบ HTML
ตัวอย่างต่อไปนี้แสดงวิธีเริ่มต้นวิดเจ็ต
ตัวอย่างข้างต้นอ้างอิงตัวแปร 2 รายการสําหรับการกําหนดค่าที่กําหนดไว้ดังนี้
ปรับแต่งประสบการณ์การลงชื่อเข้าใช้
โดยค่าเริ่มต้น วิดเจ็ตจะแจ้งให้ผู้ใช้ลงชื่อเข้าใช้และให้สิทธิ์แอปเมื่อเริ่มพิมพ์ข้อความค้นหา คุณสามารถใช้ Google Sign-in สําหรับเว็บไซต์เพื่อมอบประสบการณ์การลงชื่อเข้าใช้ที่ปรับให้เหมาะกับผู้ใช้มากขึ้น
ให้สิทธิ์ผู้ใช้โดยตรง
ใช้ฟีเจอร์ลงชื่อเข้าใช้ด้วย Google เพื่อตรวจสอบสถานะการลงชื่อเข้าใช้ของผู้ใช้ และลงชื่อเข้าใช้หรือออกจากระบบของผู้ใช้ตามต้องการ ตัวอย่างเช่น ตัวอย่างต่อไปนี้จะตรวจสอบสถานะ isSignedIn
เพื่อติดตามการเปลี่ยนแปลงการลงชื่อเข้าใช้ และใช้เมธอด GoogleAuth.signIn()
เพื่อเริ่มการลงชื่อเข้าใช้จากการคลิกปุ่ม
โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อลงชื่อเข้าใช้ด้วย Google
ลงชื่อเข้าใช้ผู้ใช้โดยอัตโนมัติ
คุณเพิ่มประสิทธิภาพการลงชื่อเข้าใช้ให้ดียิ่งขึ้นได้ด้วยการให้สิทธิ์แอปพลิเคชันล่วงหน้าในนามของผู้ใช้ในองค์กร เทคนิคนี้ยังมีประโยชน์ในกรณีที่ใช้ Cloud Identity-Aware Proxy เพื่อปกป้องแอปพลิเคชันด้วย
ดูข้อมูลเพิ่มเติมได้ที่หัวข้อใช้ Google Sign-In กับแอปไอที
ปรับแต่งอินเทอร์เฟซ
คุณเปลี่ยนลักษณะที่ปรากฏของอินเทอร์เฟซการค้นหาได้โดยใช้เทคนิคต่อไปนี้ร่วมกัน
- ลบล้างสไตล์ด้วย CSS
- ตกแต่งองค์ประกอบด้วยอะแดปเตอร์
- สร้างองค์ประกอบที่กําหนดเองด้วยอะแดปเตอร์
ลบล้างสไตล์ด้วย CSS
วิดเจ็ตการค้นหามาพร้อมกับ CSS ของตัวเองสำหรับจัดสไตล์คำแนะนำและองค์ประกอบผลการค้นหา รวมถึงการควบคุมการแบ่งหน้า คุณจัดสไตล์องค์ประกอบเหล่านี้ใหม่ได้ตามต้องการ
ในระหว่างการโหลด วิดเจ็ตการค้นหาจะโหลดสไตล์ชีตเริ่มต้นแบบไดนามิก ซึ่งจะเกิดขึ้นหลังจากโหลดสไตลชีตแอปพลิเคชัน ซึ่งจะเพิ่มลําดับความสําคัญของกฎ หากต้องการให้สไตล์ของคุณมีลําดับความสําคัญเหนือกว่าสไตล์เริ่มต้น ให้ใช้ตัวเลือกบรรพบุรุษเพื่อเพิ่มความเฉพาะเจาะจงของกฎเริ่มต้น
ตัวอย่างเช่น กฎต่อไปนี้จะไม่มีผลหากโหลดในแท็ก link
หรือ style
แบบคงที่ในเอกสาร
.cloudsearch_suggestion_container {
font-size: 14px;
}
แต่ให้ระบุกฎด้วยรหัสหรือคลาสของคอนเทนเนอร์หลักที่ประกาศไว้ในหน้าแทน
#suggestions_anchor .cloudsearch_suggestion_container {
font-size: 14px;
}
ดูรายการคลาสที่รองรับและตัวอย่าง HTML ที่วิดเจ็ตสร้างขึ้นได้ที่ข้อมูลอ้างอิงคลาส CSS ที่รองรับ
ตกแต่งองค์ประกอบด้วยอะแดปเตอร์
หากต้องการตกแต่งองค์ประกอบก่อนการแสดงผล ให้สร้างและลงทะเบียนอะแดปเตอร์ที่ใช้วิธีการตกแต่งอย่างใดอย่างหนึ่ง เช่น decorateSuggestionElement
หรือ decorateSearchResultElement.
เช่น ตัวแปลงต่อไปนี้จะเพิ่มคลาสที่กำหนดเองลงในองค์ประกอบคำแนะนำและผลการค้นหา
หากต้องการลงทะเบียนอะแดปเตอร์เมื่อเริ่มต้นวิดเจ็ต ให้ใช้setAdapter()
วิธีของคลาส Builder
ที่เกี่ยวข้อง ดังนี้
การตกแต่งอาจแก้ไขแอตทริบิวต์ขององค์ประกอบคอนเทนเนอร์และองค์ประกอบย่อยได้ อาจมีการเพิ่มหรือนำองค์ประกอบย่อยออกในระหว่างการตกแต่ง อย่างไรก็ตาม หากทำการเปลี่ยนแปลงโครงสร้างขององค์ประกอบ ให้พิจารณาสร้างองค์ประกอบโดยตรงแทนการตกแต่ง
สร้างองค์ประกอบที่กําหนดเองด้วยอะแดปเตอร์
หากต้องการสร้างองค์ประกอบที่กำหนดเองสำหรับคำแนะนำ คอนเทนเนอร์แง่มุม หรือผลการค้นหา ให้สร้างและลงทะเบียนอะแดปเตอร์ที่ใช้ createSuggestionElement
, createFacetResultElement
หรือ createSearchResultElement
ตามลำดับ
ตัวแปลงต่อไปนี้แสดงการสร้างองค์ประกอบคำแนะนำและผลการค้นหาที่กําหนดเองโดยใช้แท็ก HTML <template>
หากต้องการลงทะเบียนอะแดปเตอร์เมื่อเริ่มต้นวิดเจ็ต ให้ใช้setAdapter()
วิธีของคลาส Builder
ที่เกี่ยวข้อง ดังนี้
การสร้างองค์ประกอบแง่มุมที่กําหนดเองด้วย createFacetResultElement
มีข้อจํากัดหลายประการ ดังนี้
- คุณต้องแนบคลาส CSS
cloudsearch_facet_bucket_clickable
กับองค์ประกอบที่ผู้ใช้คลิกเพื่อสลับที่เก็บข้อมูล - คุณต้องตัดบัケットแต่ละรายการไว้ในองค์ประกอบที่รองรับซึ่งมีคลาส CSS
cloudsearch_facet_bucket_container
- คุณไม่สามารถแสดงผลที่เก็บข้อมูลในลำดับอื่นนอกเหนือจากที่ปรากฏในการตอบกลับ
ตัวอย่างเช่น ข้อมูลโค้ดต่อไปนี้จะแสดงผลแง่มุมโดยใช้ลิงก์แทนช่องทําเครื่องหมาย
ปรับแต่งลักษณะการทํางานของการค้นหา
การตั้งค่าแอปพลิเคชันการค้นหาแสดงการกำหนดค่าเริ่มต้นสำหรับอินเทอร์เฟซการค้นหาและเป็นแบบคงที่ หากต้องการใช้ตัวกรองหรือข้อมูลประกอบแบบไดนามิก เช่น อนุญาตให้ผู้ใช้สลับแหล่งข้อมูล คุณสามารถลบล้างการตั้งค่าแอปพลิเคชันการค้นหาได้โดยขัดขวางคำขอการค้นหาด้วยอะแดปเตอร์
ใช้อะแดปเตอร์ที่มีวิธี interceptSearchRequest
เพื่อแก้ไขคําขอที่ส่งไปยัง Search API ก่อนการดําเนินการ
ตัวอย่างเช่น ตัวแปลงต่อไปนี้จะขัดขวางคําขอเพื่อจํากัดการค้นหาแหล่งที่มาที่ผู้ใช้เลือก
หากต้องการลงทะเบียนอะแดปเตอร์เมื่อเริ่มต้นวิดเจ็ต ให้ใช้วิธี setAdapter()
เมื่อสร้าง ResultsContainer
HTML ต่อไปนี้ใช้เพื่อแสดงช่องทําเครื่องหมายสําหรับกรองตามแหล่งที่มา
โค้ดต่อไปนี้จะคอยฟังการเปลี่ยนแปลง ตั้งค่าการเลือก และเรียกใช้การค้นหาอีกครั้งหากจําเป็น
นอกจากนี้ คุณยังขัดขวางการตอบกลับการค้นหาได้โดยการใช้ interceptSearchResponse
ในอะแดปเตอร์
ปักหมุดเวอร์ชัน API
โดยค่าเริ่มต้น วิดเจ็ตจะใช้ API เวอร์ชันล่าสุดที่เสถียร หากต้องการใช้เวอร์ชันที่เจาะจง ให้ตั้งค่าพารามิเตอร์การกําหนดค่า cloudsearch.config/apiVersion
เป็นเวอร์ชันที่ต้องการก่อนเริ่มต้นวิดเจ็ต
เวอร์ชัน API จะเริ่มต้นที่ 1.0 หากไม่ได้ตั้งค่าไว้หรือตั้งค่าเป็นค่าที่ไม่ถูกต้อง
ปักหมุดเวอร์ชันวิดเจ็ต
หากต้องการหลีกเลี่ยงการเปลี่ยนแปลงอินเทอร์เฟซการค้นหาที่ไม่คาดคิด ให้ตั้งค่าพารามิเตอร์การกําหนดค่า cloudsearch.config/clientVersion
ดังที่แสดง
gapi.config.update('cloudsearch.config/clientVersion', 1.1);
เวอร์ชันวิดเจ็ตจะเป็น 1.0 โดยค่าเริ่มต้นหากไม่ได้ตั้งค่าไว้หรือตั้งค่าเป็นค่าที่ไม่ถูกต้อง
รักษาความปลอดภัยให้อินเทอร์เฟซการค้นหา
ผลการค้นหามีข้อมูลที่ละเอียดอ่อนสูง ทำตามแนวทางปฏิบัติแนะนำเพื่อรักษาความปลอดภัยให้กับเว็บแอปพลิเคชัน โดยเฉพาะการป้องกันการโจมตีด้วยคลิกแจ็กกิ้ง
ดูข้อมูลเพิ่มเติมได้ที่ OWASP Guide Project
เปิดใช้การแก้ไขข้อบกพร่อง
ใช้ interceptSearchRequest
เพื่อเปิดการแก้ไขข้อบกพร่องสำหรับวิดเจ็ตการค้นหา เช่น
if (!request.requestOptions) {
// Make sure requestOptions is populated
request.requestOptions = {};
}
// Enable debugging
request.requestOptions.debugOptions = {enableDebugging: true}
return request;