วิดเจ็ตค้นหาจะแสดงอินเทอร์เฟซการค้นหาที่ปรับแต่งได้สำหรับเว็บแอปพลิเคชัน วิดเจ็ตนี้ต้องการ HTML และ JavaScript เพียงเล็กน้อยในการ ติดตั้งใช้งาน และเปิดใช้ฟีเจอร์การค้นหาทั่วไป เช่น Facet และการแบ่งหน้า คุณ ยังปรับแต่งส่วนต่างๆ ของอินเทอร์เฟซด้วย CSS และ JavaScript ได้ด้วย
หากต้องการความยืดหยุ่นมากกว่าที่วิดเจ็ตมีให้ ให้ลองใช้ Query API ดูข้อมูลเกี่ยวกับการสร้างอินเทอร์เฟซการค้นหาด้วย Query API ได้ที่การสร้างอินเทอร์เฟซการค้นหาด้วย Query API
สร้างอินเทอร์เฟซการค้นหา
การสร้างอินเทอร์เฟซการค้นหาต้องมีหลายขั้นตอน ดังนี้
- กำหนดค่าแอปพลิเคชันการค้นหา
- สร้างรหัสไคลเอ็นต์สำหรับแอปพลิเคชัน
- เพิ่มมาร์กอัป HTML สำหรับช่องค้นหาและผลการค้นหา
- โหลดวิดเจ็ตในหน้าเว็บ
- เริ่มต้นวิดเจ็ต
กำหนดค่าแอปพลิเคชันการค้นหา
อินเทอร์เฟซการค้นหาแต่ละรายการต้องมีแอปพลิเคชันการค้นหาที่กำหนดไว้ใน คอนโซลผู้ดูแลระบบ แอปพลิเคชันการค้นหาให้ข้อมูลเพิ่มเติมสําหรับการค้นหา เช่น แหล่งข้อมูล ข้อมูลประกอบ และการตั้งค่าคุณภาพการค้นหา
หากต้องการสร้างแอปพลิเคชันการค้นหา โปรดดูสร้างประสบการณ์การค้นหาที่กำหนดเอง
สร้างรหัสไคลเอ็นต์สำหรับแอปพลิเคชัน
นอกเหนือจากขั้นตอนในกำหนดค่าการเข้าถึง Google Cloud Search API คุณยังต้องสร้าง Client ID สำหรับเว็บแอปพลิเคชันด้วย
เมื่อกำหนดค่าโปรเจ็กต์ ให้ทำดังนี้
- เลือกประเภทไคลเอ็นต์เป็นเว็บเบราว์เซอร์
- ระบุ 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 สำหรับเว็บไซต์ เพื่อมอบประสบการณ์การลงชื่อเข้าใช้ที่ปรับแต่งให้เหมาะกับผู้ใช้มากขึ้น
ให้สิทธิ์ผู้ใช้โดยตรง
ใช้ลงชื่อเข้าใช้ด้วย Google เพื่อตรวจสอบสถานะการลงชื่อเข้าใช้ของ
ผู้ใช้ และลงชื่อเข้าใช้หรือออกจากระบบของผู้ใช้ตามต้องการ ตัวอย่างเช่น ตัวอย่างต่อไปนี้
จะสังเกตสถานะ isSignedIn
เพื่อตรวจสอบการเปลี่ยนแปลงการลงชื่อเข้าใช้ และ
ใช้วิธี GoogleAuth.signIn()
เพื่อเริ่มการลงชื่อเข้าใช้จากการคลิกปุ่ม
ดูรายละเอียดเพิ่มเติมได้ที่ลงชื่อเข้าใช้ด้วย Google
ลงชื่อเข้าใช้ผู้ใช้โดยอัตโนมัติ
คุณสามารถปรับปรุงประสบการณ์การลงชื่อเข้าใช้ให้ดียิ่งขึ้นได้โดยการให้สิทธิ์แอปพลิเคชันล่วงหน้าในนามของผู้ใช้ในองค์กร เทคนิคนี้ยัง���ีประโยชน์ในกรณีที่ใช้ Cloud Identity Aware Proxy เพื่อป้องกันแอปพลิเคชันด้วย
ดูข้อมูลเพิ่มเติมได้ที่หัวข้อใช้การลงชื่อเข้าใช้ด้วยบัญชี Google กับแอปไอที
ปรับแต่งอินเทอร์เฟซ
คุณเปลี่ยนลักษณะของอินเทอร์เฟซการค้นหาได้โดยใช้เทคนิคต่างๆ ร่วมกัน ดังนี้
- ลบล้างรูปแบบด้วย 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
ที่เกี่ยวข้อง
Decorator อาจแก้ไขแอตทริบิวต์ขององค์ประกอบคอนเทนเนอร์รวมถึงองค์ประกอบย่อย ได้ คุณเพิ่มหรือนำองค์ประกอบย่อยออกได้ในระหว่างการตกแต่ง อย่างไรก็ตาม หากทำการเปลี่ยนแปลงโครงสร้างขององค์ประกอบ ให้พิจารณาสร้าง องค์ประกอบโดยตรงแทนการตกแต่ง
สร้างองค์ประกอบที่กำหนดเองด้วยอแดปเตอร์
หากต้องการสร้างองค์ประกอบที่กำหนดเองสำหรับคำแนะนำ คอนเทนเนอร์ Facet หรือผลการค้นหา ให้สร้างและลงทะเบียนอแดปเตอร์ที่ใช้ createSuggestionElement
, createFacetResultElement
หรือ createSearchResultElement
ตามลำดับ
อแดปเตอร์ต่อไปนี้แสดงการสร้างองค์ประกอบคำแนะนำและผลการค้นหาที่กำหนดเองโดยใช้แท็ก <template>
HTML
หาก��้องการลงทะเบียนอแดปเตอร์เมื่อเริ่มต้นวิดเจ็ต ให้ใช้เมธอด setAdapter()
ของคลาส Builder
ที่เกี่ยวข้อง
การสร้างองค์ประกอบ Facet ที่กำหนดเองด้วย createFacetResultElement
มีข้อจำกัดหลายประการดังนี้
- คุณต้องแนบคลาส CSS
cloudsearch_facet_bucket_clickable
กับองค์ประกอบที่ผู้ใช้คลิกเพื่อสลับที่เก็บข้อมูล - คุณต้องรวมแต่ละ Bucket ไว้ในองค์ประกอบที่มี 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;