Плагин нечеткого поиска для Кирби. Поиск приблизительных совпадений поисковых запросов в вашем контенте еще никогда не был таким простым.
Этот плагин построен на основе PHP-библиотеки fuzzget.
Если вы уже используете встроенный метод search
Kirby, заменить его на Fuzzy Search — это просто переименовать метод в коллекции страниц:
$query = get('q');
$articles = page('blog')
->children()
->visible()
- ->search($query, 'title|text');
+ ->fuzzySearch($query, 'title|text');
Нечеткий поиск несовместим ни с одним из других вариантов, доступных в методе search
Кирби.
С помощью нечеткого поиска вы также можете выполнять поиск по пользовательским методам страниц или моделям страниц. Вам нужно только включить имя метода в последний параметр fuzzySearch
.
// site/plugins/methods.php
page:: $ methods [ ' authorName ' ] = function ( $ page ) {
$ author = $ page -> author ()-> value ();
if ( $ user = site ()-> user ( $ author )) {
return $ user -> firstname (). ' ' . $ user -> lastname ();
}
};
$ query = get ( ' q ' );
$ articles = page ( ' blog ' )
-> children ()
-> visible ()
-> fuzzySearch ( $ query , ' title|text|authorName ' );
Нечеткий поиск поставляется с удобным методом полей, который позволяет выполнять поиск по полям страницы, содержащим набор данных, например структурированные поля.
$ result = page ( ' faq ' )
-> topics ()
-> fuzzySearch ( $ query , ' question|answer ' );
$result
также будет объектом Field
, а не просто массивом. Таким образом, после выполнения поиска вы можете связать любой метод Field
, например toStructure
, yaml
или isEmpty
.
$ result = page ( ' contact ' )
-> addresses ()
-> fuzzySearch ( $ query , ' city ' )
-> toStructure ();
Вы также можете использовать функцию fuzzySearch
для поиска в массиве ассоциативных массивов.
$ countries = [
[ ' name ' => ' Australia ' ],
[ ' name ' => ' Brazil ' ],
[ ' name ' => ' Canada ' ],
[ ' name ' => ' France ' ],
[ ' name ' => ' Germany ' ],
[ ' name ' => ' Portugal ' ],
[ ' name ' => ' United Kingdom ' ],
[ ' name ' => ' United States ' ]
];
$ results = fuzzySearch ( $ countries , ' Brasil ' );
Если вы опустите последний параметр, Fuzzy Search будет искать по всем ключам (полям) в предоставленных данных:
site ()-> index ()-> fuzzySearch ( $ query );
Это то же самое, что использовать подстановочный знак *
.
site ()-> index ()-> fuzzySearch ( $ query , ' * ' );
Нечеткий поиск очень гибок в выборе полей, в которых следует искать совпадения. Посмотрите другие варианты:
Если вы хотите искать определенный термин только в title
и text
полях, просто передайте их имена в последнем параметре, разделенные |
:
site ()-> index ()-> fuzzySearch ( $ query , ' title|text ' );
Это синтаксический сахар для:
site ()-> index ()-> fuzzySearch ( $ query , [
' include ' => [ ' title ' , ' text ' ]
]);
Конечно, вы также можете перечислить поля, в которых не хотите выполнять поиск:
site ()-> index ()-> fuzzySearch ( $ query , ' -author|-date ' );
Вышеуказанное аналогично выполнению:
site ()-> index ()-> fuzzySearch ( $ query , [
' ignore ' => [ ' author ' , ' date ' ]
]);
В этом примере при поиске будут учитываться все поля, кроме author
и date
.
Если вам нужно включить метод пользовательской страницы или метод модели страницы, вы можете объединить его с подстановочным знаком и игнорировать синтаксис.
site ()-> index ()-> fuzzySearch ( $ query , ' *|authorName|-date ' );
Вышеупомянутое будет включать все поля, кроме date
, а также $page->authorName()
, если это метод пользовательской страницы или метод модели страницы.
Загрузите файлы и поместите их в site/plugins/fuzzy-search
.
Интерфейс командной строки Kirby упрощает установку плагина Fuzzy Search:
$ kirby plugin:install pedroborges/kirby-fuzzy-search
Обновление не может быть проще, просто запустите:
$ kirby plugin:update pedroborges/kirby-fuzzy-search
Вы можете добавить плагин Fuzzy Search в качестве подмодуля Git.
$ cd your/project/root
$ git submodule add https://github.com/pedroborges/kirby-fuzzy-search.git site/plugins/fuzzy-search
$ git submodule update --init --recursive
$ git commit -am "Add Fuzzy Search plugin"
Обновление так же просто, как запуск нескольких команд.
$ cd your/project/root
$ git submodule foreach git checkout master
$ git submodule foreach git pull
$ git commit -am "Update submodules"
$ git submodule update --init --recursive
Все заметные изменения в этом проекте будут задокументированы по адресу: https://github.com/pedroborges/kirby-fuzzy-search/blob/master/changelog.md.
Плагин Fuzzy Search — это программное обеспечение с открытым исходным кодом, лицензированное по лицензии MIT.
Авторские права © 2017 Педро Борхес [email protected]