⏸ Pengembangan berakhir - proyek terbuka untuk serah terima
Sayangnya, saya kekurangan waktu dan tenaga untuk secara aktif mendukung pengembangan plugin ini. Saya akan mengarsipkan plugin apa adanya untuk saat ini. Sadarilah bahwa itu tidak mendukung Kirby 3.6+. Jika ada yang ingin mengambil alih dan melanjutkan pengembangan plugin ini, saya akan sangat senang - silakan menghubungi kami.
Unduh, unzip dan salin repositori ini ke /site/plugins/search
.
Alternatifnya, Anda dapat menginstalnya dengan composer:
composer require distantnative/search-for-kirby
Putuskan penyedia mana yang ingin Anda gunakan (lihat di bawah untuk penyedia yang tersedia). Dan jangan lupa untuk membuat indeksnya (juga di bawah) sebelum dijalankan pertama kali, jika menggunakan penyedia Sqlite atau Algolia.
Ganti folder /site/plugins/search
dengan versi baru. Pastikan untuk membaca catatan rilis untuk mengetahui perubahan yang dapat terjadi.
Atau jika Anda menginstal plugin melalui composer, jalankan:
composer update distantnative/search-for-kirby
Plugin ini menawarkan pencarian global di berbagai entri yang digabungkan: pages
, files
, dan users
.
Anda dapat menentukan apa yang harus dimasukkan sebagai entri dalam indeks (menggunakan bahasa kueri Kirby) atau bahkan menonaktifkan tipe sepenuhnya di site/config/config.php
Anda:
' search ' => [
' entries ' => [
' pages ' => ' site.find("projects").index ' ,
' files ' => false ,
// users will remain the default
]
]
Secara default, koleksi berikut disertakan dalam indeks:
pages
site.index
files
site.index.files
users
kirby.users
Anda dapat menentukan di file config.php
bidang konten halaman, file, dan pengguna mana yang akan disertakan dalam pencarian:
' search ' => [
' fields ' => [
' pages ' => [
' title '
],
' files ' => [
' filename '
],
' users ' => [
' email ' ,
' name '
]
]
]
Ada beberapa opsi cara mendefinisikan bidang dalam array ini:
// 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 ();
}
Anda juga dapat menentukan di file config.php
template mana (atau peran dalam kasus pengguna) yang akan disertakan dalam pencarian:
' 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 ' ;
}
Plugin ini menggantikan pencarian Panel default (akses di kanan atas melalui ikon kaca pembesar) dengan modal pencarian globalnya:
Plugin ini juga menggantikan metode PHP API. Karena plugin menyediakan pencarian global, sebaiknya digunakan dengan objek $site sebagai permulaan:
$ site -> search ( ' query ' , $ options = []);
Namun demikian, pencarian juga dapat dibatasi pada koleksi yang lebih spesifik (dengan beberapa penurunan kinerja):
$ page -> children ()-> listed ()-> filterBy ( ' template ' , ' project ' )-> search ( ' query ' , $ options = []);
Plugin ini juga menambahkan fungsi pembantu search()
:
search (string $ query , $ options = [], $ collection = null )
Untuk array opsi Anda dapat memberikan opsi batas untuk menentukan jumlah hasil yang akan dikembalikan. Selain itu, Anda dapat menentukan opsi operator ( AND
atau OR
) untuk menentukan aturan gabungan beberapa istilah pencarian:
collection ( ' notes ' )-> search ( $ query , [
' operator ' => ' AND ' ,
' limit ' => 100
]);
Hasil yang Anda terima adalah objek KirbyCmsCollection
.
Plugin ini menggabungkan tiga penyedia pencarian yang berbeda. Tergantung pada situs, kebutuhan, dan penyiapan Anda, salah satu di antaranya mungkin lebih cocok dibandingkan yang lain.
sqlite
(default)Membuat database indeks SQLite menggunakan ekstensi SQLite FTS5 (harus tersedia).
Dalam konfigurasi, Anda dapat mendefinisikan ulang lokasi file database, memberikan jalur absolut. Secara default file database akan dibuat sebagai site/logs/search/index.sqlite
.
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' file ' => dirname ( __DIR__ , 2 ) . ' /storage/search/index.sqlite '
]
]
Opsi fuzzy memungkinkan pencarian untuk mencocokkan konten tidak hanya dari awal kata tetapi juga di dalamnya. Tergantung pada kontennya, ini dapat secara drastis meningkatkan ukuran database indeks (berpikir secara eksponensial), terutama ketika menyertakan kolom teks yang panjang. Anda juga dapat menentukan daftar bidang untuk dibuat kabur.
// 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 ' ]
],
]
]
Anda juga dapat menentukan beberapa bobot khusus untuk memberi peringkat pada bidang tertentu lebih tinggi dari yang lain:
// site/config/config.php
' search ' => [
' provider ' => ' sqlite ' ,
' sqlite ' => [
' weights ' => [
' title ' => 10 ,
' caption ' => 5
],
]
]
algolia
Tambahkan pencarian Algolia secara lancar ke Kirby dengan penyedia ini:
// 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
]
]
Untuk membuat indeks awal, plugin menggabungkan bagian Panel kecil tempat Anda dapat memicu pembuatan indeks. Tambahkan bagian berikut misalnya cetak biru site.yml
Anda:
sections :
search :
type : search
Secara default, plugin memastikan untuk memperbarui indeks pencarian di setiap peristiwa (membuat halaman, mengunggah file, memperbarui konten, dll.) melalui kait. Jadi Anda tidak perlu khawatir membuat indeks baru setiap kali konten diedit.
Untuk menonaktifkan pembaruan indeks otomatis melalui kait, tambahkan yang berikut ke site/config/config.php
Anda :
' search ' => [
' hooks ' => false
]
Anda juga dapat membuat indeks dari baris perintah dengan skrip shell ./index
yang disertakan dalam plugin. Ini bisa menjadi alternatif untuk bagian Panel (terutama untuk file indeks yang sangat besar) atau mengganti hook di setup yang tidak menggunakan Panel – kemudian dipicu misalnya ketika menerapkan commit baru atau melalui cronjob.
./site/plugins/search/bin/index
Jika Anda menggunakan pengaturan folder khusus, Anda harus membuat versi modifikasi dari skrip tersebut. Hubungi kami, jika Anda memerlukan bantuan.
Plugin ini disediakan "sebagaimana adanya" tanpa jaminan. Gunakan dengan risiko Anda sendiri dan selalu uji sendiri sebelum menggunakannya di lingkungan produksi. Jika Anda mengalami masalah, silakan buat masalah.
Saat membuat indeks, Anda mungkin mengalami kesalahan tidak dapat menemukan driver. Kemungkinan besar ini berarti pengaturan server Anda tidak memiliki ekstensi Sqlite. Pengguna lain berhasil mengaktifkan ekstensi berikut:
extension=sqlite3.so
extension=pdo_sqlite.so
Plugin ini sepenuhnya gratis dan diterbitkan di bawah lisensi MIT. Namun, pembangunan membutuhkan waktu dan usaha. Jika Anda menggunakannya dalam proyek komersial atau hanya ingin mendukung saya agar plugin ini tetap hidup, silakan berikan donasi sesuai pilihan Anda.