Plugin TNTSearch adalah untuk Grav CMS. Mesin pencari teks lengkap berbasis indeks yang kuat yang ditenagai oleh perpustakaan TNTSEARCH yang menyediakan pencarian konten Grav berbasis AJAX yang cepat. Plugin ini sangat fleksibel memungkinkan indeks data konten sewenang -wenang serta templat ranting khusus untuk memberikan kesempatan untuk mengindeks modular dan jenis halaman dinamis lainnya. TNTSearch menyediakan administrasi dan pengindeksan ulang berbasis CLI dan admin, serta alat pencarian front-end bertenaga AJAX.
Catatan: TNTSEARCH Versi 3.0.0 sekarang membutuhkan Grav 1.6.0 atau yang lebih baru untuk berfungsi karena menggunakan fungsionalitas baru yang tidak tersedia di versi sebelumnya.

Menginstal plugin pencarian TNT dapat dilakukan dalam salah satu dari dua cara. Metode instalasi GPM (Paket GRAV Manajer) memungkinkan Anda untuk dengan cepat dan mudah menginstal plugin dengan perintah terminal sederhana, sementara metode manual memungkinkan Anda untuk melakukannya melalui file zip.
Cara paling sederhana untuk menginstal plugin ini adalah melalui Grav Package Manager (GPM) melalui terminal sistem Anda (juga disebut baris perintah). Dari akar jenis instalasi grav Anda:
bin/gpm install tntsearch
Ini akan menginstal plugin pencarian TNT ke direktori /user/plugins Anda di dalam grav. File -file itu dapat ditemukan di bawah /your/site/grav/user/plugins/tntsearch .
Selain persyaratan grav standar, plugin ini memang memiliki beberapa persyaratan tambahan. Karena sifat kompleks dari mesin pencari, TNTSearch menggunakan database file datar untuk menyimpan daftar kata serta pemetaan untuk konten. Ini ditangani secara otomatis oleh plugin, tetapi Anda perlu memastikan Anda memiliki yang berikut diinstal di server Anda:
| PHP secara default hadir dengan PDO dan sebagian besar sistem berbasis Linux sudah datang dengan SQLite.
Sqlite sebenarnya sudah dipasang sebelumnya di Mac Anda, tetapi Anda dapat meningkatkannya ke versi terbaru dengan Homebrew:
Pasang homebrew
$ /usr/bin/ruby -e " $( curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install ) "Instal sqlite dengan homebrew
$ brew install sqliteUnduh versi SQLite yang sesuai dari halaman unduhan SQLite.
Ekstrak file zip yang diunduh dan jalankan sqlite3.exe executable.
Sebelum mengkonfigurasi plugin ini, Anda harus menyalin user/plugins/tntsearch/tntsearch.yaml ke user/config/plugins/tntsearch.yaml dan hanya mengedit salinan itu.
Berikut adalah konfigurasi default dan penjelasan opsi yang tersedia:
enabled : true
search_route : ' /search '
query_route : ' /s '
built_in_css : true
built_in_js : true
built_in_search_page : true
enable_admin_page_events : true
search_type : auto
fuzzy : false
distance : 2
phrases : true
stemmer : ' no '
display_route : true
display_hits : true
display_time : true
live_uri_update : true
limit : 20
min : 3
snippet : 300
index_page_by_default : true
scheduled_index :
enabled : false
at : ' 0 */3 * * * '
logs : ' logs/tntsearch-index.out '
filter :
items :
- [email protected]
powered_by : true
search_object_type : Grav Opsi konfigurasi adalah sebagai berikut:
enabled - Mengaktifkan atau menonaktifkan plugin secara instansearch_route - Rute yang digunakan untuk halaman pencarian bawaanquery_route - rute yang digunakan oleh formulir pencarian untuk meminta mesin pencaribuilt_in_css - mengaktifkan atau menonaktifkan gaya CSS bawaanbuilt_in_js - mengaktifkan atau menonaktifkan javascript bawaanbuilt_in_search_page - Aktifkan atau nonaktifkan halaman pencarian bawaanenable_admin_page_events - mengaktifkan atau menonaktifkan acara halaman yang terjadi on-save untuk menambah/memperbarui/menghapus halaman dalam indekssearch_type - bisa menjadi salah satu dari jenis ini:basic - Pencocokan String Standarboolean - Dukungan or atau minus . misalnya foo -barauto - secara otomatis mendeteksi apakah akan menggunakan basic atau booleanfuzzy - cocok jika kata -kata itu 'dekat' tetapi tidak harus cocok dengan persisdistance - Levenshtein Jarak dari pencarian fuzzy. Ini mewakili jumlah karakter yang perlu diubah, dihapus, atau ditambahkan dalam satu kata agar sesuai dengan kata kunci pencarian. Meningkatkan jarak menghasilkan lebih banyak hasil pencarian tetapi mengurangi keakuratan pencarian.phrases - secara otomatis menangani dukungan frasastemmer - bisa menjadi salah satu dari jenis ini:no - Tidak ada stemmerarabic - Arabcroatian - Kroasiagerman - Jermanitalian - bahasa Italiaporter - Porter Stemmer untuk bahasa Inggrisportuguese - Bahasa Portugisrussian - Rusiaukrainian - bahasa Ukrainadisplay_route - tampilkan rute di hasil pencariandisplay_hits - tampilkan jumlah hit di hasil pencariandisplay_time - tampilkan waktu eksekusi di hasil pencarianlive_uri_update - ketika built_in_js diaktifkan, Live memperbarui bilah URI di halaman search_routelimit - jumlah maksimum hasil yang akan ditampilkanmin - jumlah kecil karakter yang diketik sebelum melakukan pencariansnippet - Jumlah karakter untuk melihat pratinjau item hasilindex_page_by_default - Haruskah semua halaman diindeks secara default kecuali frontMatter overridesscheduled_index - Pekerjaan Indeks Terjadwal Baru. Dinonaktifkan secara default, saat diaktifkan default untuk berjalan setiap 3 jam, dan hasil output ke logs/tntsearch-index.outfilter - Filter koleksi halaman yang memungkinkan Anda memilih halaman tertentu untuk diindeks melalui kueri koleksipowered_by - Tampilkan teks TNTSearch bertenagasearch_object_type - memungkinkan kelas kustom untuk mengganti dukungan halaman grav . Ini memungkinkan kemampuan pencarian yang sepenuhnya khusus untuk tipe data apa pun. TNTSearch bergantung pada konten Anda yang diindeks ke dalam database SQLite Index sebelum pertanyaan pencarian dapat dilakukan. Ini sangat mirip dengan mesin pencari lainnya seperti Elasticsearch, Solr, Lucene, dll, tetapi menggunakan perpustakaan mesin pencari PHP yang relatif sederhana untuk mencapai ini dengan sedikit pengaturan dan tanpa kerepotan.
Langkah pertama setelah instalasi plugin, adalah mengindeks konten Anda. Ada beberapa cara Anda dapat mencapai ini.
Pertama jika Anda dapat mengakses CLI atau hanya memilih untuk tidak menggunakan plugin admin, Anda dapat menggunakan perintah CLI bawaan:
$ bin/plugin tntsearch indexIni akan memindai semua halaman Anda dan mengindeks konten. Anda harus melihat beberapa output seperti ini:
Re-indexing Search
Added 1 /
Added 2 /blog/classic-modern-architecture
Added 3 /blog/daring-fireball-link
Added 4 /blog/focus-and-blur
Added 5 /blog/just-some-text-today
Added 6 /blog/london-industry
Added 7 /blog/random-thoughts
Added 8 /blog/sunshine-in-the-hills
Added 9 /blog/the-urban-jungle
Total rows 9
Done.Ini menunjukkan pengindeksan konten Anda yang berhasil.
Jika Anda menggunakan plugin admin, Anda dapat mengindeks konten Anda langsung dari plugin. TNTSearch menambahkan ikon tray cepat baru yang memungkinkan Anda membuat indeks baru atau mengindeks ulang semua konten Anda dengan cepat dan nyaman dengan satu klik.

Atau Anda dapat menavigasi ke bagian konfigurasi TNTSEARCH dan klik tombol Index Content :

Catatan: Bahwa halaman apa pun yang menggunakan atribut header halaman
redirectakan dilewati selama pengindeksan.
Anda dapat secara eksplisit melewatkan halaman yang ada di filter indeks dengan menambahkan YAML ini ke header halaman:
tntsearch:
index: false
Dengan TNTSearch versi 3.0 yang baru, dukungan telah ditambahkan untuk beberapa bahasa (diperlukan Grav 1.6). Secara internal, ini berarti bahwa lebih baik menyimpan indeks sebagai user:://data/tntsearch/grav.index , beberapa indeks dibuat per bahasa yang dikonfigurasi di grav. Misalnya jika Anda telah mengatur bahasa yang didukung ke ['en', 'fr', 'de'] , maka ketika Anda melakukan indeks, Anda akan mendapatkan tiga file: en.index , fr.index , dan de.index . Saat menanyakan bahasa aktif yang sesuai menentukan indeks mana yang ditanya. Misalnya, melakukan pencarian pada halaman yang disebut /fr/search akan menghasilkan database fr.index yang akan digunakan, dan hasil Prancis akan dikembalikan.
Catatan pengindeksan akan memakan waktu lebih lama tergantung pada jumlah bahasa yang Anda dukung karena TNTSearch harus mengindeks setiap halaman dalam setiap bahasa.
CATATAN: Sementara karakter beraksen didukung dalam rilis ini, saat ini tidak ada dukungan di perpustakaan TNTSEARCE yang mendasarinya untuk mencocokkan karakter yang tidak beraksen dengan yang beraksen, jadi diperlukan kecocokan yang tepat.
Salah satu fitur baru yang hebat dari Grav 1.6 adalah penjadwal bawaan yang memungkinkan fungsionalitas yang disediakan plugin dijalankan secara berkala. TNTSearch adalah kasus penggunaan yang bagus untuk kemampuan ini karena memungkinkan pekerjaan pengindeksan dijadwalkan dijalankan setiap beberapa jam tanpa perlu secara manual menjaga hal-hal tetap sinkronisasi. Ada beberapa opsi yang memungkinkan Anda untuk mengkonfigurasi kemampuan ini.
Catatan pertama, bahwa fungsionalitas penjadwal ini dinonaktifkan secara default, jadi Anda pertama -tama harus mengaktifkan fungsionalitas penjadwal dalam pengaturan plugin TNTSEARCH. Setelah itu Anda dapat mengonfigurasi seberapa sering pekerjaan pengindeksan harus berjalan. Standarnya adalah setiap 3 jam. Terakhir, Anda dapat mengonfigurasi di mana output pengindeksan dicatat.
Setelah Anda memiliki indeks, TNTSearch memanfaatkan peristiwa admin untuk c reeate, u pdate, dan d eLete index entri saat Anda mengedit halaman. Jika indeks Anda sepertinya tidak sinkron, Anda dapat dengan mudah mengindeks seluruh situs Anda.
Secara default plugin TNTSEARCH akan mengindeks title dan content halaman Anda. Ini biasanya cukup untuk kebanyakan kasus, tetapi ada situasi di mana Anda mungkin ingin mengindeks lebih banyak bidang. Plugin ini memberikan contoh ini dengan mendengarkan acara onTNTSearchIndex :
public static function getSubscribedEvents ()
{
return [
' onTNTSearchIndex ' => [ ' onTNTSearchIndex ' , 0 ]
];
}
public function onTNTSearchIndex ( Event $ e )
{
$ fields = $ e [ ' fields ' ];
$ page = $ e [ ' page ' ];
if ( isset ( $ page -> header ()-> author )) {
$ fields -> author = $ page -> header ()-> author ;
}
}Ini memungkinkan Anda untuk menambahkan penulis ke bidang yang diindeks jika diatur di frontmatter halaman. Anda dapat menambahkan bidang khusus Anda sendiri dengan plugin yang sangat sederhana yang mendengarkan acara ini.
Plugin TNTSearch umumnya menggunakan konten yang diberikan untuk diindeks. Namun, ada situasi di mana halaman Anda sebenarnya adalah halaman modular, atau dibangun dari halaman lain di mana tidak ada konten aktual pada halaman, atau konten tidak mewakili halaman secara keseluruhan. Untuk memerangi situasi ini, Anda dapat memberikan template khusus dalam tema Anda yang dapat digunakan untuk membuat konten sebelum pengindeksan.
Misalnya, katakanlah kami memiliki beranda yang dibangun dari beberapa sub-halaman modular dengan sedikit konten di bawahnya, ini disebut home.md , jadi gunakan file home.html.twig di templates/ folder tema Anda. Anda dapat membuat versi yang disederhanakan dari templat ini dan menyimpannya sebagai templates/tntsearch/home.html.twig . Untuk contoh ini template ini terlihat seperti ini:
{% for module in page. collection () %}
< p >
{{ module . content | raw }}
</ p >
{% endfor %}
{{ page . content | raw }}Seperti yang Anda lihat ini hanya memastikan halaman modul seperti yang didefinisikan dalam koleksi halaman ditampilkan, maka konten halaman yang sebenarnya ditampilkan.
Untuk menginstruksikan TNTSearch untuk mengindeks dengan template ini daripada hanya menggunakan konten halaman dengan sendirinya, Anda hanya perlu menambahkan entri di home.md frontmatter:
tntsearch :
template : ' tntsearch/home ' Plugin TNTSearch untuk Grav dilengkapi dengan halaman kueri bawaan yang dapat diakses melalui rute /search secara default. Halaman pencarian ini adalah bidang input sederhana yang akan melakukan kueri AJAX sebagai tipe-Anda . Karena TNTSearch sangat cepat, Anda mendapatkan respons pencarian real-time dengan cara yang mirip dengan pencarian Google. Juga hasilnya dikembalikan sudah disorot untuk persyaratan yang cocok.
Anda juga dapat menguji pencarian dengan CLI:
$ bin/plugin tntsearch query ipsum
{
"number_of_hits" : 3 ,
"execution_time" : " 2.101 ms " ,
"hits" : [
{
"link" : " / blog / classic-modern-architecture " ,
"title" : " Classic Modern Architecture " ,
"content" : " ...sed a odio. Curabitur ut lectus tortor. Sed <em>ipsum< / em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc. n Lorem <em>ipsum< / em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget... "
},
{
"link" : " / blog / focus-and-blur " ,
"title" : " Focus and Blur " ,
"content" : " ...sed a odio. Curabitur ut lectus tortor. Sed <em>ipsum< / em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc. n Lorem <em>ipsum< / em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget... "
},
{
"link" : " / blog / london-industry " ,
"title" : " London Industry at Night " ,
"content" : " ...sed a odio. Curabitur ut lectus tortor. Sed <em>ipsum< / em> eros, egestas ut eleifend non, elementum vitae eros. Mauris felis diam, pellentesque vel lacinia ac, dictum a nunc. n Lorem <em>ipsum< / em> dolor sit amet, consectetur adipiscing elit. Donec ultricies tristique nulla et mattis. Phasellus id massa eget... "
}
]
} Jika halaman grav fisik ditemukan untuk rute /search , TNTSearch akan menggunakannya daripada halaman yang disediakan oleh plugin. Ini memungkinkan Anda untuk dengan mudah menambahkan konten ke halaman pencarian Anda sesuai kebutuhan. Jika Anda ingin menyesuaikan output HTML yang sebenarnya, cukup salin templates/search.html.twig dari plugin ke tema Anda dan sesuaikan.
Bidang input aktual juga dapat dimodifikasi sesuai kebutuhan dengan menyalin dan mengedit file templates/partials/tntsearch.html.twig ke tema Anda dan memodifikasinya.
Secara default plugin TNTSearch untuk Grav, respons JSON dikirim dengan struktur berikut:
{
"number_of_hits" : 3 ,
"execution_time" : " 1.000 ms " ,
"hits" : [
{
"link" : " /page-a " ,
"title" : " Title A " ,
"content" : " highlighted-summary "
},
{
"link" : " /page-b " ,
"title" : " Title B " ,
"content" : " highlighted-summary "
},
{
"link" : " /page-c " ,
"title" : " Title C " ,
"content" : " highlighted-summary "
}
]
}Ada beberapa contoh di mana output ini tidak diinginkan atau perlu diubah. TNTSearch sebenarnya menyediakan acara plugin untuk memungkinkan Anda memanipulasi format ini. Contohnya dapat dilihat di bawah:
public static function getSubscribedEvents () {
return [
' onTNTSearchQuery ' => [ ' onTNTSearchQuery ' , 1000 ],
];
}
public function onTNTSearchQuery ( Event $ e )
{
$ query = $ this -> grav [ ' uri ' ]-> param ( ' q ' );
if ( $ query ) {
$ page = $ e [ ' page ' ];
$ query = $ e [ ' query ' ];
$ options = $ e [ ' options ' ];
$ fields = $ e [ ' fields ' ];
$ fields -> results [] = $ page -> route ();
$ e -> stopPropagation ();
}
} Hal-hal penting yang perlu diperhatikan adalah nilai pesanan 1000 untuk memastikan acara ini berjalan sebelum acara default di file plugin tntsearch.php . Metode acara aktual hanya menetapkan array hasil di bidang dengan rute, menghasilkan:
{
"number_of_hits" : 3 ,
"execution_time" : " 1.000 ms " ,
"results" : [ '/page-a', '/page-b', '/page-c' ]
} Plugin TNTSearch juga dapat digunakan untuk membuat pencarian sebagai drop-down daripada di halaman standar. Untuk melakukan ini, Anda perlu embed sebagian pencarian dan mengesampingkannya agar sesuai dengan kebutuhan Anda. Anda bisa menambahkan ini ke tema Anda di mana pun Anda ingin memiliki kotak pencarian drop-down Ajax:
{% embed ' partials/tntsearch.html.twig ' with { limit : 10 , snippet : 150 , min : 3 , search_type : ' auto ' , dropdown : true } %}{% endembed %} Di sini kami menanamkan parsial default, tetapi mengganti options dengan melewatinya dalam pernyataan with . Penting untuk memperhatikan bahwa dropdown: true harus ditetapkan untuk ditafsirkan sebagai dropdown.
Plugin ini tidak akan mungkin terjadi tanpa perpustakaan TNTSEARCE yang menakjubkan untuk PHP. Pastikan Anda membintangi proyek itu di GitHub.