⏸ 개발 종료 - 프로젝트 핸드오버 개시
불행하게도 이 플러그인의 개발을 적극적으로 지원할 시간과 에너지가 부족합니다. 당분간은 플러그인을 있는 그대로 보관하겠습니다. 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 FTS5 확장(사용 가능해야 함)을 사용하여 인덱스 SQLite 데이터베이스를 생성합니다.
구성에서 절대 경로를 제공하여 데이터베이스 파일의 위치를 다시 정의할 수 있습니다. 기본적으로 데이터베이스 파일은 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
기본적으로 플러그인은 후크를 통해 각 이벤트(페이지 생성, 파일 업로드, 콘텐츠 업데이트 등)에서 검색 색인을 업데이트합니다. 따라서 콘텐츠가 편집될 때마다 새 색인을 생성하는 것에 대해 걱정할 필요가 없습니다.
후크를 통한 자동 인덱스 업데이트를 비활성화하려면 site/config/config.php
에 다음을 추가하세요.
' search ' => [
' hooks ' => false
]
플러그인에 포함된 ./index
쉘 스크립트를 사용하여 명령줄에서 인덱스를 구축할 수도 있습니다. 이는 패널 섹션(특히 매우 큰 인덱스 파일의 경우)에 대한 대안이 될 수 있거나 패널을 사용하지 않는 설정에서 후크를 대체할 수 있습니다. 그런 다음 새 커밋을 배포하거나 cronjob을 통해 트리거될 수 있습니다.
./site/plugins/search/bin/index
사용자 정의 폴더 설정을 사용하는 경우 해당 스크립트의 수정된 버전을 생성해야 합니다. 도움이 필요하면 연락하세요.
이 플러그인은 어떠한 보장도 없이 "있는 그대로" 제공됩니다. 이를 사용하는 데 따른 책임은 사용자에게 있으며 프로덕션 환경에서 사용하기 전에 항상 직접 테스트하십시오. 문제가 발생하면 이슈를 생성해 주세요.
인덱스를 생성할 때 드라이버를 찾을 수 없다는 오류가 발생할 수 있습니다. 이는 서버 설정에 Sqlite 확장이 누락되었음을 의미할 가능성이 높습니다. 다른 사용자가 다음 확장 프로그램을 활성화하는 것이 가능해졌습니다.
extension=sqlite3.so
extension=pdo_sqlite.so
이 플러그인은 완전 무료이며 MIT 라이센스에 따라 게시됩니다. 그러나 개발에는 시간과 노력이 필요합니다. 상업용 프로젝트에서 사용 중이거나 이 플러그인을 계속 유지할 수 있도록 지원하고 싶다면 원하는 대로 기부해 주세요.