⏸ สิ้นสุดการพัฒนา - เปิดโครงการส่งมอบแล้ว
น่าเสียดายที่ฉันไม่มีเวลาและพลังงานที่จะสนับสนุนการพัฒนาปลั๊กอินนี้อย่างจริงจัง ฉันจะเก็บถาวรปลั๊กอินตามที่เป็นอยู่ในขณะนี้ โปรดทราบว่ามันไม่รองรับ Kirby 3.6+ หากใครต้องการรับช่วงต่อและพัฒนาปลั๊กอินนี้ต่อไป ฉันยินดีเป็นอย่างยิ่ง - โปรดติดต่อ
ดาวน์โหลด คลายซิปและคัดลอกที่เก็บนี้ไปที่ /site/plugins/search
หรือคุณสามารถติดตั้งด้วยผู้แต่ง:
composer require distantnative/search-for-kirby
ตัดสินใจว่าคุณต้องการใช้ผู้ให้บริการรายใด (ดูด้านล่างสำหรับผู้ให้บริการที่มีอยู่) และอย่าลืมสร้างดัชนี (ด้านล่างด้วย) ก่อนเรียกใช้ครั้งแรก หากใช้ผู้ให้บริการ Sqlite หรือ Algolia
แทนที่โฟลเดอร์ /site/plugins/search
ด้วยเวอร์ชันใหม่ อย่าลืมอ่านบันทึกประจำรุ่นสำหรับการยกเลิกการเปลี่ยนแปลง
หรือหากคุณติดตั้งปลั๊กอินผ่านผู้แต่ง ให้รัน:
composer update distantnative/search-for-kirby
ปลั๊กอินนำเสนอการค้นหาทั่วโลกในรายการต่างๆ ที่รวมกัน: pages
files
และ users
คุณสามารถกำหนดสิ่งที่ควรรวมเป็นรายการในดัชนี (โดยใช้ภาษาคิวรีของ Kirby) หรือแม้กระทั่งปิดการใช้งานประเภททั้งหมดใน site/config/config.php
ของคุณ :
' search ' => [
' entries ' => [
' pages ' => ' site.find("projects").index ' ,
' files ' => false ,
// users will remain the default
]
]
ตามค่าเริ่มต้น คอลเลกชันต่อไปนี้จะรวมอยู่ในดัชนี:
pages
site.index
files
site.index.files
users
kirby.users
คุณสามารถกำหนดในไฟล์ config.php
ได้ว่าช่องเนื้อหาใดของเพจ ไฟล์ และผู้ใช้ของคุณที่จะรวมไว้ในการค้นหา:
' search ' => [
' fields ' => [
' pages ' => [
' title '
],
' files ' => [
' filename '
],
' users ' => [
' email ' ,
' name '
]
]
]
มีหลายตัวเลือกในการกำหนดฟิลด์ในอาร์เรย์เหล่านี้:
// Simply add the field
' title ' ,
// Add the field, but run it through a field method first
' text ' => ' kirbytext ' ,
// Pass parameters to the field method
' text ' => [ ' short ' , 50 ],
// Use a callback function
' text ' => function ( $ model ) {
return strip_tags ( $ model -> text ()-> kt ());
}
// Turn string field value into number (e.g. for Algolia filters)
' myNumberField ' => function ( $ model ) {
return $ model -> myNumberField ()-> toFloat ();
}
' myVirtualNumberField ' => function ( $ model ) {
return $ model -> myNumberField ()-> toInt () + 5 ;
}
' myDate ' => function ( $ model ) {
return $ model -> anyDateField ()-> toTimestamp ();
}
คุณยังสามารถกำหนดในไฟล์ config.php
ของคุณได้ด้วยว่าเทมเพลตใด (หรือบทบาทในกรณีของผู้ใช้) ที่จะรวมไว้ในการค้นหา:
' search ' => [
' templates ' => [
' pages ' => function ( $ model ) {
return $ model -> id () !== ' home ' && $ model -> id () !== ' error ' ;
},
' files ' => null ,
' users ' => null
]
]
``
If the value is null or an empty array, all templates are allowed. If it is false, all templates are excluded. There are several other options:
```php
// simple whitelist array
[ ' project ' , ' note ' , ' album ' ]
// associative array
[
' project ' => true ,
' note ' => false
]
// callback function
function ( $ model ) {
return $ model -> intendedTemplate () !== ' secret ' ;
}
ปลั๊กอินจะแทนที่การค้นหาแผงเริ่มต้น (เข้าถึงที่ด้านบนขวาผ่านไอคอนรูปแว่นขยาย) ด้วยโมดอลการค้นหาทั่วโลก:
ปลั๊กอินยังแทนที่วิธี PHP API ด้วย เนื่องจากปลั๊กอินมีการค้นหาทั่วโลก จึงเป็นการดีที่สุดที่จะใช้กับอ็อบเจ็กต์ $site เป็นจุดเริ่มต้น:
$ site -> search ( ' query ' , $ options = []);
อย่างไรก็ตาม การค้นหายังสามารถจำกัดอยู่เฉพาะคอลเลกชันที่เฉพาะเจาะจงมากขึ้น (โดยสูญเสียประสิทธิภาพบางส่วน):
$ page -> children ()-> listed ()-> filterBy ( ' template ' , ' project ' )-> search ( ' query ' , $ options = []);
ปลั๊กอินยังเพิ่มฟังก์ชันตัวช่วย search()
:
search (string $ query , $ options = [], $ collection = null )
สำหรับอาร์เรย์ตัวเลือก คุณสามารถส่งตัวเลือกขีดจำกัดเพื่อระบุจำนวนผลลัพธ์ที่จะส่งคืน นอกจากนี้ คุณยังสามารถระบุตัวเลือกโอเปอเรเตอร์ ( AND
หรือ OR
) เพื่อระบุกฎที่มีการรวมคำค้นหาหลายคำเข้าด้วยกัน:
collection ( ' notes ' )-> search ( $ query , [
' operator ' => ' AND ' ,
' limit ' => 100
]);
ผลลัพธ์ที่คุณได้รับคือวัตถุ KirbyCmsCollection
ปลั๊กอินรวมผู้ให้บริการค้นหาสามรายเข้าด้วยกัน ความต้องการและการตั้งค่าของคุณ รายการใดรายการหนึ่งอาจเหมาะสมกว่ารายการอื่น ทั้งนี้ขึ้นอยู่กับไซต์ของคุณ
sqlite
(ค่าเริ่มต้น)สร้างฐานข้อมูลดัชนี SQLite โดยใช้ส่วนขยาย SQLite FTS5 (ต้องพร้อมใช้งาน)
ในการกำหนดค่า คุณสามารถกำหนดตำแหน่งของไฟล์ฐานข้อมูลใหม่ได้ โดยระบุเส้นทางที่แน่นอน ตามค่าเริ่มต้น ไฟล์ฐานข้อมูลจะถูกสร้างขึ้นเป็น site/logs/search/index.sqlite
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' file ' => dirname ( __DIR__ , 2 ) . ' /storage/search/index.sqlite '
]
]
ตัวเลือกแบบคลุมเครือช่วยให้การค้นหาจับคู่เนื้อหาไม่เพียงแต่จากจุดเริ่มต้นของคำเท่านั้น แต่ยังรวมถึงเนื้อหาภายในด้วย สามารถเพิ่มขนาดของฐานข้อมูลดัชนีได้อย่างมาก (คิดแบบเอกซ์โปเนนเชียล) โดยเฉพาะอย่างยิ่งเมื่อรวมฟิลด์ข้อความขนาดยาว ทั้งนี้ขึ้นอยู่กับเนื้อหา คุณยังสามารถกำหนดรายการฟิลด์เพื่อทำให้ไม่ชัดเจนได้
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
// Enabled for all fields
' fuzzy ' => true ,
// Disabled completely
' fuzzy ' => false ,
// Only for selected fields
' fuzzy ' => [
' pages ' => [ ' title ' ],
' files ' => [ ' caption ' , ' credits ' ]
],
]
]
คุณยังสามารถกำหนดน้ำหนักที่กำหนดเองเพื่อจัดอันดับฟิลด์เฉพาะให้สูงกว่าฟิลด์อื่นๆ ได้:
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' weights ' => [
' title ' => 10 ,
' caption ' => 5
],
]
]
algolia
เพิ่มการค้นหา Algolia ให้กับ Kirby ได้อย่างราบรื่นด้วยผู้ให้บริการรายนี้:
// site/config/config.php
' search ' => [
' provider ' => ' algolia ' ,
' algolia ' => [
' app ' => . . . , // Algolia App ID
' key ' => . . . , // Algolia private admin key (not just read-only!)
' index ' => ' kirby ' // name of the index to use/create
' options ' => [] // options to pass to Algolia at search
]
]
ในการสร้างดัชนีเริ่มต้น ปลั๊กอินจะรวมส่วนแผงขนาดเล็กซึ่งคุณสามารถทริกเกอร์การสร้างดัชนีได้ เพิ่มส่วนต่อไปนี้เพื่อเช่น พิมพ์เขียว site.yml
ของคุณ:
sections :
search :
type : search
ตามค่าเริ่มต้น ปลั๊กอินจะตรวจสอบให้แน่ใจว่าได้อัปเดตดัชนีการค้นหาในแต่ละเหตุการณ์ (การสร้างเพจ การอัปโหลดไฟล์ การอัปเดตเนื้อหา ฯลฯ) ผ่านทาง hooks ดังนั้นคุณจึงไม่ต้องกังวลกับการสร้างดัชนีใหม่ทุกครั้งที่มีการแก้ไขเนื้อหา
หากต้องการปิดใช้งานการอัปเดตดัชนีอัตโนมัติผ่าน hooks ให้เพิ่มสิ่งต่อไปนี้ใน site/config/config.php
ของคุณ :
' search ' => [
' hooks ' => false
]
คุณยังสามารถสร้างดัชนีจากบรรทัดคำสั่งด้วยเชลล์สคริปต์ ./index
ที่รวมอยู่ในปลั๊กอิน นี่อาจเป็นทางเลือกแทนส่วนแผง (โดยเฉพาะสำหรับไฟล์ดัชนีขนาดใหญ่มาก) หรือแทนที่ hooks ในการตั้งค่าที่ไม่ได้ใช้แผง - จากนั้นจะถูกทริกเกอร์ เช่น เมื่อปรับใช้การคอมมิตใหม่หรือผ่าน cronjob
./site/plugins/search/bin/index
หากคุณใช้การตั้งค่าโฟลเดอร์แบบกำหนดเอง คุณจะต้องสร้างสคริปต์นั้นในเวอร์ชันที่แก้ไข ติดต่อหากคุณต้องการความช่วยเหลือ
ปลั๊กอินนี้มีให้ "ตามสภาพ" โดยไม่มีการรับประกัน คุณต้องยอมรับความเสี่ยงในการใช้งานและทดสอบด้วยตัวเองทุกครั้งก่อนที่จะใช้ในสภาพแวดล้อมการใช้งานจริง หากคุณพบปัญหาใด ๆ โปรดสร้างปัญหา
เมื่อสร้างดัชนี คุณอาจพบข้อผิดพลาดไม่พบไดรเวอร์ เป็นไปได้มากว่าการตั้งค่าเซิร์ฟเวอร์ของคุณไม่มีส่วนขยาย Sqlite ผู้ใช้รายอื่นได้เปิดใช้งานส่วนขยายต่อไปนี้:
extension=sqlite3.so
extension=pdo_sqlite.so
ปลั๊กอินนี้ฟรีและเผยแพร่ภายใต้ใบอนุญาต MIT อย่างไรก็ตาม การพัฒนาต้องใช้เวลาและความพยายาม หากคุณกำลังใช้ในโครงการเชิงพาณิชย์หรือเพียงต้องการสนับสนุนฉันเพื่อให้ปลั๊กอินนี้ยังคงอยู่ โปรดบริจาคตามที่คุณเลือก