Kirby Opener는 자리 표시자를 사용하여 Ajax 응답 유무에 관계없이 호출되거나 다운로드를 시작하는 동적 URL을 생성할 수 있는 Kirby CMS 패널 필드 버튼입니다.
참고: 이 플러그인은 무료 플러그인이 아닙니다. 프로덕션 서버에서 사용하려면 라이선스를 구매해야 합니다. Kirby Opener의 라이선스 모델에 대한 자세한 내용을 보려면 이 문서의 라이선스 섹션까지 아래로 스크롤하세요.
패널 내에서 URL을 엽니다.
자리 표시자를 사용하여 URL 내에 맞춤 데이터 추가
경로 또는 페이지 모델 함수를 쉽게 호출
버튼 라벨에 사용자 정의 JSON 응답 상태 메시지 표시
파일 다운로드 트리거
URL의 클립보드 사본 트리거
성공 시 페이지 새로고침 트리거
브라우저 확인 대화 상자 트리거
쉽게 확장 가능한 자리 표시자
json 응답 의 구성 구문 분석
커비 2.3+
kirby plugin:install bnomei/kirby-opener
$ git submodule add https://github.com/bnomei/kirby-opener.git site/plugins/kirby-opener
이 저장소의 콘텐츠를 ZIP 파일로 다운로드하세요.
추출된 폴더의 이름을 kirby-opener
로 바꾸고 이를 Kirby 프로젝트의 site/plugins/
디렉터리에 복사합니다.
Kirby 패널을 시작하고 이 플러그인이 제공하는 템플릿 openerexample
사용하여 새 페이지를 만듭니다. 플러그인에는 시작하는 데 도움이 되는 몇 가지 예제 필드도 함께 제공됩니다. kirby-opener/blueprints/fields
폴더에서 전역 필드 정의를 찾을 수 있습니다.
플러그인을 최대한 활용하려면 자리 표시자를 사용하여 고유한 URL을 정의해야 하며 JSON으로 응답하는 컨트롤러 및/또는 템플릿을 만들어야 할 수도 있습니다.
example1: openeropenuser example2: openeropenexternal example3: openeropenpagefield example4: openerpopup example5: openerdownload example6: openersuccess example7: openererror example8: openercontroller
이 필드 정의를 청사진에 추가하고 패널에서 페이지를 엽니다.
example2explained:type: openercommand: 'https://www.google.com/?q={field.title}/open:yes'text: 'Google에서 제목 검색'
{field.title}
을 자리 표시 자라고 합니다. 패널 페이지의 컨텍스트와 관련된 항목으로 대체됩니다. 이 경우에는 현재 $page
-object의 title
필드가 있습니다.
이 필드 정의를 청사진에 추가합니다. 패널에 Download fileXY
라벨이 있는 새로운 opener
버튼이 생성됩니다. 응답을 기다리는 동안 ...
이 표시됩니다. 호출된 페이지가 JSON으로 응답하면 구문 분석됩니다. JSON에 다른 message
가 없으면 청사진의 textsuccess
표시됩니다.
example5explained:type: openercommand: '/{page.url}/fileparam:fileXY/download:yes'text: '파일 다운로드'textprogress: '...'textsuccess: '다운로드...'
command
내의 {page.url}
은 자리 표시자 이며 현재 페이지의 URL로 대체됩니다. 미리 정의된 자리 표시자가 몇 개 있지만 아마도 직접 정의하고 싶을 것입니다. 성공 여부를 결정하기 위해 루트 JSON 객체의 어떤 속성이 구문 분석되는지, 파일의 메시지 및 URL을 구성할 수 있습니다. 이러한 주제는 이 추가 정보의 뒷부분에서 설명됩니다.
download:yes
- 매개변수도 구성할 수 있습니다. 이는 플러그인 자바스크립트 코드에 파일을 다운로드하고 팝업 창에서 열지 않도록 지시합니다(대부분의 브라우저는 기본적으로 이를 차단하므로).
이 예에서는 Kirby 라이센스 파일을 다운로드하는 것으로 응답하겠습니다. 템플릿 코드에서 JSON 응답을 작성하고 반환해야 합니다.
if(param('fileparam') == 'fileXY') { $code = f::exists(kirby()->roots()->index().DS.'license.md') ? 200 : 400; $json = ['코드' => $code, 'fileurl' => kirby()->urls()->index().'/license.md', ];수면(5); // 예를 들어 잠시 기다립니다die(response::json($json, $code)); }
이는 JSON 반환의 매우 기본적인 구현입니다. Kirby Cookbook과 Kirby Forum은 더 나은 결과를 얻을 수 있는 좋은 소스입니다.
이제 패널에서 페이지를 열고 Download fileXY
버튼을 누르세요. Kirby License.md 파일에 대한 브라우저의 다운로드 대화 상자가 나타납니다. 라이센스를 제거하지 않는 한 – 이 작은 악당.
패널 내에서만 명령을 호출할 수 있도록 하려면 정렬 보호를 추가해야 합니다. api
컨트롤러(또는 템플릿)가 준비되어 있다고 가정해 보겠습니다. API를 트리거하려는 청사진에 다음 필드 정의를 추가합니다.
exampleController:type: openercommand: '/api/{field.autoid}/{page.diruri.encoded}/{page.secret}/mycmd:dowork'text: '작업 수행'textprogress: 'working...'textsuccess: '완료.'텍스트 오류: '실패했습니다.'
따라서 이 필드가 있는 패널 내의 모든 페이지에는 이제 Do Work
버튼이 있습니다. 이를 누르면 추가 매개변수와 함께 api
페이지에 대한 Ajax 요청이 시작됩니다. 이러한 매개변수에는 일부 자리 표시 자도 포함되어 있으므로 상황별 값으로 대체됩니다.
이제 요청을 처리하기 위한 몇 가지 논리가 필요합니다. 저는 컨트롤러를 템플릿과 함께 사용하는 것을 선호하므로 이를 api
컨트롤러에 붙여넣으세요. 이 플러그인은 시작하는 데 도움이 되는 예제 컨트롤러와 함께 제공됩니다. 하지만 컨트롤러가 어떻게 작동하는지 살펴보겠습니다.
<?phpreturn function($site, $pages, $page) { // json 응답 준비$json = ['code' => 400, 'message' => '', 'fileurl' => '']; // #1: 선택적 보안...// 사용자가 로그인해야 하며 // 요청은 패널 오프너 플러그인에서 와야 하며// 적절한 ajax callif( !$site->user 여야 합니다. () || !boolval(param('패널')) || // 플러그인에 의해 자동으로 추가됨 !r::아약스() ) { die(응답::json($json, 400)); } // #2: 이제 allif(param('mycmd') == 'dowork')에서 작업을 수행해야 하는지 확인하세요. // #3: 작업할 페이지 가져오기 at$pageToWork = null; // #3.1: autoidif($autoid = param('autoid'))를 시도해 보세요. { // 구현을 위해 남겨두었습니다.$pageToWork = myGetPageByAutoIdFunction($autoid); } // #3.2: dirurielse 시도 if($diruri = param('diruri')) { // 플러그인은 인코딩된 uri에서 페이지를 가져오는 페이지 메소드를 제공합니다// 왜 uri를 인코딩합니까? 여러 개의 '/'를 포함할 수 있고 매개변수가 손상될 수 있기 때문입니다.$pageToWork = $pages->openerDiruriEncodedGetPage($diruri); } // #4: 페이지를 찾았나요? 그런 다음 비밀로 유효성을 검사하고 작업을 시작합니다.// 왜 비밀인가요? 추가 보안 레이아웃을 추가하여 유효한// 요청을 생성하는 것은 본인만이 할 수 있고 외부에서는 누구도 할 수 없는 일입니다.if($pageToWork && $pageToWork->openerSecret() == param('secret')) { // 일을 해라(5); // 응답...$json['code'] = 200; $json['message'] = '점심시간!'; } } // 단순화를 위해 그냥 종료하세요. nowdie(response::json($json, intval($json['code']))); // 일반적으로 컨트롤러는 템플릿에 일부 값을 반환합니다. //return Compact('json');};
자리 표시자는 명령을 빠르게 작성하는 데 도움이 됩니다. 명령을 직접 구문 분석하는 대신 자리 표시자를 구현한 이유는 무엇입니까? 이는 DRY 원칙을 고수하는 데 있어 실수를 방지하는 데 도움이 됩니다.
필드 값을 가져오려면 와일드카드를 청사진 필드 이름으로 바꾸세요. 숫자와 문자열만 지원됩니다.
필드를 가져오고 해당 값에 대해 urlencode()
호출합니다.
템플릿의 $page->url()
템플릿의 $page->parent()->url()
요청이 유효한 경우 템플릿/컨트롤러에서 토큰을 확인할 수 있습니다. 페이지로 제한됩니다.
요청이 유효한 경우 템플릿/컨트롤러에서 토큰을 확인할 수 있습니다. 와일드카드 버전.
urlencoded($page->diruri())
이 페이지를 다른 페이지로 전달합니다. 도우미 기능을 사용할 수 있습니다. 컨트롤러 예시를 참조하세요.
캐시를 사용하여 빠른 조회 방법을 구현하는 경우 autoid-plugin을 사용하는 것이 diruri
의 좋은 대안입니다. 페이지가 많으면 $site->index()
또는 $site->search()
사용하는 것만으로도 속도가 느려질 수 있습니다.
site/config/config.php
설정을 생성하여 직접 정의할 수도 있습니다. 이 플러그인은 $site
및 $page
에 대한 액세스 권한을 부여합니다.
c::set('plugin.opener.placeholder', [ 'myfield' => '$page->myfield()->fieldmethod()', 'another' => '$page->parent()->diruri ()', '아직모어' => '$site->otherfield()', ]);
site/config/config.php
에서 이를 설정할 수 있습니다.
기본: ''
여기에 라이센스를 추가하면 구매를 알리는 위젯이 패널에서 사라집니다.
기본값: 웹 서버에 대한 고유한 SALT
이 값은 secret
생성하는 데 사용되며 보안을 강화하려면 고유한 값을 설정해야 하지만 필수는 아닙니다.
기본값: 참
비활성화되면 플러그인은 예제에서 사용되는 blueprints, templates, controllers, hooks and routes
설치하지 않습니다. 프로덕션 환경에서는 이 설정을 사용하세요.
기본값: code
이 설정을 사용하여 상태 코드를 구문 분석하는 데 사용될 json 루트 객체 속성을 정의합니다.
기본값: message
이 설정을 사용하여 응답 메시지를 구문 분석하는 데 사용될 json 루트 객체 속성을 정의합니다.
기본값: fileurl
이 설정을 사용하여 다운로드할 파일의 URL을 구문 분석하는 데 사용되는 json 루트 개체 속성을 정의합니다.
기본값: 5000
(밀리초)
그 지연 후 버튼은 메시지 표시에서 초기 상태로 재설정됩니다.
기본값: 거짓
다운로드는 가능한 경우 브라우저 대화 상자를 통해 열리며 대부분의 브라우저에서 차단하는 팝업 창으로 열리지 않습니다.
기본값: '다운로드:예'
JSON 응답 콘텐츠에 대한 다운로드를 트리거하도록 플러그인 js 스크립트에 지시하는 명령 부분입니다( json.fileurl
참조).
기본값: '열기:예'
명령을 URL로 사용하여 새 창/탭을 트리거하도록 플러그인 js 스크립트에 지시하는 명령 부분입니다. Ajax 호출은 없습니다.
기본값: '복사:예'
URL의 클립보드 복사본을 트리거하도록 플러그인 js 스크립트에 지시하는 명령 부분입니다. Ajax 호출은 없습니다. 브라우저가 차단되면 open:yes
와 같이 동작합니다.
기본값: '새로고침:예'
성공 시 페이지 새로 고침을 트리거하도록 플러그인 js 스크립트에 지시하는 명령 부분입니다.
기본값: 거짓
활성화되면 자리 표시자에 $pageModel
사용하여 Kirby 페이지 모델에 정의된 기능에 액세스할 수 있습니다.
기본값: 거짓
명령을 사용하면 매개 변수 없이 $page
또는 $site
와 해당 메서드만 연결할 수 있습니다. allow-eval
활성화한 경우 최대 100자까지의 자리 표시자와 단일 명령문을 사용할 수 있습니다. 그러나 eval()
위험하기 때문에 이 설정은 기본적으로 비활성화되어 있습니다. 이 설정을 활성화할 때 발생할 수 있는 위험에 유의하시기 바랍니다.
활성화하면 다음과 같은 자리 표시자가 가능해집니다.
c::set('plugin.opener.placeholder', [ 'crazy' => 'panel()->page("some/wicked/uri")->mymethod($page->somefield()->value( ))', // 100자 미만]);
이 플러그인은 어떠한 보장도 없이 "있는 그대로" 제공됩니다. 이를 사용하는 데 따른 책임은 사용자에게 있으며 프로덕션 환경에서 사용하기 전에 항상 직접 테스트하십시오. 문제가 발견되면 새로운 문제를 생성해 주세요.
Kirby Opener는 원하는 만큼 개인 서버 수를 평가할 수 있습니다. 공개 서버에 Kirby Opener를 배포하려면 라이선스를 구입해야 합니다. Kirby와 마찬가지로 공용 서버당 하나의 고유 라이선스가 필요합니다. 이용 약관은 license.md
참조하세요.
그러나 유효한 라이센스 코드가 있더라도 인종 차별, 성 차별, 동성애 혐오, 동물 학대 또는 기타 증오심 표현을 조장하는 프로젝트에서는 사용하지 않는 것이 좋습니다.
기술 지원은 GitHub에서만 제공됩니다. 지원 질문에 대한 답변 시간에 대해서는 어떠한 진술이나 보장도 하지 않습니다. 그러나 Kirby 포럼의 토론에 참여할 수도 있습니다.
Kirby Opener는 독일의 게임 디자이너이자 웹 개발자인 Bruno Meilick이 개발하고 관리합니다. 나에게 많은 영감을 준 Fabian Michael과 처음에 Kirby에 대해 알려준 Julian Kraan에게 감사를 표하고 싶습니다.