Kirby Opener adalah tombol Bidang Panel Kirby CMS yang memungkinkan Anda menggunakan placeholder untuk membuat url dinamis yang dipanggil dengan dan tanpa respons ajax atau memulai pengunduhan.
CATATAN: Ini bukan plugin gratis. Untuk menggunakannya di server produksi, Anda perlu membeli lisensi. Untuk detail tentang model lisensi Kirby Opener, gulir ke bawah ke bagian Lisensi pada dokumen ini.
buka URL apa pun dari dalam panel
tambahkan data khusus dalam URL menggunakan placeholder
dengan mudah memanggil Fungsi Rute atau Model Halaman
menampilkan pesan status respons JSON khusus pada label tombol
memicu pengunduhan file
memicu salinan url clipboard
memicu penyegaran halaman jika berhasil
memicu dialog konfirmasi browser
placeholder yang mudah diperpanjang
penguraian konfigurasi respons json
Kirby 2.3+
kirby plugin:install bnomei/kirby-opener
$ git submodule add https://github.com/bnomei/kirby-opener.git site/plugins/kirby-opener
Unduh konten repositori ini sebagai file ZIP.
Ganti nama folder yang diekstrak menjadi kirby-opener
dan salin ke direktori site/plugins/
di proyek Kirby Anda.
Mulai Panel Kirby dan buat halaman baru dengan openerexample
template yang disediakan plugin ini. Plugin ini juga dilengkapi dengan beberapa contoh kolom untuk membantu Anda memulai. Anda dapat menemukan definisi bidang globalnya di folder kirby-opener/blueprints/fields
.
Untuk menggunakan plugin secara maksimal, Anda harus menentukan url Anda sendiri menggunakan placeholder dan bahkan mungkin membuat pengontrol dan/atau templat untuk merespons dengan JSON.
example1: openeropenuser example2: openeropenexternal example3: openeropenpagefield example4: openerpopup example5: openerdownload example6: openersuccess example7: openererror example8: openercontroller
Tambahkan definisi bidang ini ke cetak biru mana pun dan buka halaman di panel.
example2explained:type: openercommand: 'https://www.google.com/?q={field.title}/open:yes'text: 'Cari Judul di Google'
{field.title}
disebut placeholder . Itu akan diganti dengan sesuatu yang berhubungan dengan konteks di halaman panel. Dalam hal ini dengan bidang title
objek $page
saat ini.
Tambahkan definisi bidang ini ke cetak biru. Ini akan membuat tombol opener
baru di panel dengan label Download fileXY
. Sambil menunggu respon, ...
akan ditampilkan. Setelah halaman yang dipanggil merespons dengan JSON, halaman tersebut akan diuraikan. Kecuali ada message
berbeda di JSON, textsuccess
dari cetak biru akan ditampilkan.
example5explained:type: openercommand: '/{page.url}/fileparam:fileXY/download:yes'text: 'Download a file'textprogress: '...'textsuccess: 'Download...'
{page.url}
dalam command
adalah pengganti dan akan digantikan oleh url halaman saat ini. Ada beberapa placeholder yang telah ditentukan sebelumnya, tetapi Anda mungkin ingin menentukan sendiri. Properti objek JSON root mana yang diurai untuk menentukan keberhasilan, pesan, dan url file dapat dikonfigurasi. Topik-topik ini akan dijelaskan nanti dalam readme ini.
download:yes
-parameter juga dapat dikonfigurasi. Ini memberitahu kode javascript plugin untuk mengunduh file dan tidak membukanya di jendela popup (karena sebagian besar browser akan memblokirnya secara default).
Untuk contoh ini mari kita tanggapi dengan mendownload file lisensi kirby. Dalam kode templat Anda, Anda perlu membuat dan mengembalikan respons JSON.
if(param('fileparam') == 'fileXY') { $code = f::exists(kirby()->roots()->index().DS.'license.md') ? 200 : 400; $json = ['kode' => $kode, 'fileurl' => kirby()->urls()->index().'/license.md', ];tidur(5); // tunggu sebentar misalnya tujuandie(response::json($json, $code)); }
Harap dicatat bahwa ini adalah implementasi yang sangat mendasar untuk mengembalikan JSON. Kirby Cookbook dan Kirby Forum adalah sumber yang bagus untuk berbuat lebih baik.
Sekarang buka halaman Anda di panel dan tekan tombol Download fileXY
. Dialog pengunduhan browser Anda untuk file kirby License.md akan muncul. kecuali Anda menghapus lisensinya – Anda bajingan kecil.
Untuk memastikan perintah hanya dapat dipanggil dari dalam panel, Anda perlu menambahkan semacam perlindungan. Anggaplah Anda telah menyiapkan pengontrol api
(atau hanya templat). Tambahkan definisi bidang berikut ke cetak biru mana pun yang Anda inginkan untuk memicu api.
exampleController:type: openercommand: '/api/{field.autoid}/{page.diruri.encoded}/{page.secret}/mycmd:dowork'text: 'Do Work'textprogress: 'working...'textsuccess: 'Selesai.'texterror: 'Gagal.'
Jadi pada halaman mana pun dalam panel yang memiliki bidang ini, Anda sekarang memiliki tombol Do Work
. Menekannya akan memulai permintaan ajax ke halaman api
dengan parameter tambahan. Karena parameter ini juga berisi beberapa placeholder , parameter ini akan diganti dengan nilai konteks spesifik.
Sekarang Anda memerlukan logika untuk menangani permintaan tersebut. Saya lebih suka menggunakan pengontrol yang dikombinasikan dengan templat, jadi tempelkan ini ke pengontrol api
Anda. Plugin ini dilengkapi dengan pengontrol contoh untuk membantu Anda memulai. Tapi mari kita lihat cara kerja pengontrolnya.
<?phpreturn function($site, $pages, $page) { // siapkan json respon$json = ['code' => 400, 'message' => '', 'fileurl' => '']; // #1: keamanan opsional...// mengharuskan pengguna untuk login dan // permintaan harus berasal dari plugin pembuka panel dan// harus berupa ajax callif( !$site->user yang tepat () || !boolval(param('panel')) || // ditambahkan oleh plugin secara otomatis !r::ajax() ) { mati(respon::json($json, 400)); } // #2: sekarang periksa apakah pekerjaan perlu diselesaikan di allif(param('mycmd') == 'dowork') { // #3: membuat halaman berfungsi di$pageToWork = null; // #3.1: coba autoidif($autoid = param('autoid')) { // tersisa untuk Anda terapkan$pageToWork = myGetPageByAutoIdFunction($autoid); } // #3.2: coba dirurielse if($diruri = param('diruri')) { // plugin menyediakan metode halaman untuk mendapatkan halaman dari uri yang disandikan// mengapa mengkodekan uri? karena bisa berisi beberapa '/' dan itu akan merusak parameter.$pageToWork = $pages->openerDiruriEncodedGetPage($diruri); } // #4: menemukan halaman? lalu validasi dengan rahasia dan mulai bekerja// mengapa rahasia? untuk menambahkan tata letak keamanan ekstra sehingga membuat permintaan // yang valid adalah sesuatu yang hanya dapat dilakukan oleh Anda dan tidak seorang pun dari luar.if($pageToWork && $pageToWork->openerSecret() == param('secret')) {/ // melakukan pekerjaantidur(5); // lalu tanggapi...$json['code'] = 200; $json['message'] = 'Waktu Makan Siang!'; } } // demi kesederhanaan, exit nowdie(response::json($json, intval($json['code']))); // biasanya pengontrol akan mengembalikan beberapa nilai ke templat//return compact('json');};
Placeholder membantu Anda membuat perintah dengan cepat. Mengapa saya menerapkan placeholder alih-alih menguraikan perintah secara langsung? Mereka membantu Anda menghindari kesalahan dalam berpegang pada prinsip KERING.
ganti wildcard dengan nama bidang cetak biru apa pun untuk mendapatkan nilai bidang tersebut. hanya angka dan string yang didukung.
akan mendapatkan bidang dan memanggil urlencode()
nilainya.
$page->url()
dalam templat
$page->parent()->url()
dalam templat
token Anda dapat memeriksa templat/pengontrol jika permintaan valid. terbatas pada halaman.
token Anda dapat memeriksa templat/pengontrol jika permintaan valid. versi karakter pengganti.
urlencoded($page->diruri())
untuk meneruskan halaman ini ke halaman lain. fungsi pembantu tersedia – lihat contoh pengontrol.
Menggunakan plugin autoid adalah alternatif yang baik untuk diruri
jika Anda menerapkan metode pencarian cepat mungkin dengan cache. Karena hanya menggunakan $site->index()
atau $site->search()
mungkin lambat jika Anda memiliki banyak halaman.
Anda juga dapat menentukan sendiri dengan membuat pengaturan site/config/config.php
. Plugin ini memberi Anda akses ke $site
dan $page
.
c::set('plugin.opener.placeholder', [ 'myfield' => '$page->myfield()->fieldmethod()', 'another' => '$page->parent()->diruri ()', 'lagi' => '$situs->bidang lain()', ]);
Anda dapat mengaturnya di site/config/config.php
Anda.
bawaan: ''
tambahkan lisensi Anda di sini dan widget yang mengingatkan Anda untuk membelinya akan hilang dari Panel.
default: SALT unik untuk server web Anda
nilai ini digunakan untuk membuat secret
dan Anda harus menetapkan nilai Anda sendiri untuk meningkatkan keamanan tetapi ini tidak diperlukan.
bawaan: benar
jika dinonaktifkan, plugin tidak menginstal blueprints, templates, controllers, hooks and routes
apa pun yang digunakan oleh contohnya. gunakan pengaturan ini di lingkungan produksi.
bawaan: code
gunakan pengaturan ini untuk menentukan properti objek root json yang akan digunakan untuk mengurai kode status.
bawaan: message
gunakan pengaturan ini untuk mendefinisikan properti objek root json yang akan digunakan untuk mengurai pesan respons.
bawaan: fileurl
gunakan pengaturan ini untuk mendefinisikan properti objek root json yang akan digunakan untuk mengurai url file yang akan diunduh.
default: 5000
dalam ms
setelah penundaan itu tombol diatur ulang dari menampilkan pesan ke keadaan awal.
bawaan: salah
unduhan dibuka melalui dialog bowser jika memungkinkan dan bukan sebagai jendela popup yang diblokir sebagian besar browser
bawaan: 'unduh: ya'
bagian perintah untuk memberi tahu skrip plugin js untuk memicu pengunduhan konten respons JSON (lihat json.fileurl
).
bawaan: 'buka: ya'
bagian perintah untuk memberi tahu skrip plugin js untuk memicu jendela/tab baru dengan perintah sebagai url. Tidak akan ada panggilan ajax.
default: 'salin: ya'
bagian perintah untuk memberi tahu skrip plugin js untuk memicu salinan url ke clipboard. Tidak akan ada panggilan ajax. Jika browser memblokirnya, perilakunya seperti open:yes
.
default: 'segarkan: ya'
bagian perintah untuk memberi tahu skrip plugin js untuk memicu penyegaran halaman jika berhasil.
bawaan: salah
jika diaktifkan, Anda dapat menggunakan $pageModel
di placeholder Anda untuk mengakses fungsi yang ditentukan dalam Model Halaman Kirby Anda.
bawaan: salah
perintah hanya memungkinkan Anda untuk merangkai $page
atau $site
dan metodenya tetapi tanpa parameter. Jika Anda mengaktifkanallow allow-eval
Anda bisa menjadi gila dengan placeholder hingga 100 karakter dan satu pernyataan. Namun karena eval()
berbahaya, pengaturan ini dinonaktifkan secara default. Harap waspadai risiko jika Anda mengaktifkan pengaturan ini.
Placeholder seperti berikut ini dimungkinkan jika diaktifkan:
c::set('plugin.opener.placeholder', [ 'gila' => 'panel()->page("some/wicked/uri")->mymethod($page->somefield()->value( ))', // kurang dari 100 karakter]);
Plugin ini disediakan "sebagaimana adanya" tanpa jaminan. Gunakan dengan risiko Anda sendiri dan selalu uji sendiri sebelum menggunakannya di lingkungan produksi. Jika Anda menemukan masalah apa pun, silakan buat masalah baru.
Kirby Opener dapat dievaluasi selama Anda mau pada berapa banyak server pribadi yang Anda inginkan. Untuk menyebarkan Kirby Opener di server publik mana pun, Anda perlu membeli lisensi. Anda memerlukan satu lisensi unik per server publik (seperti yang dilakukan Kirby). Lihat license.md
untuk syarat dan ketentuan.
Namun, bahkan dengan kode lisensi yang valid, tidak disarankan untuk menggunakannya dalam proyek apa pun, yang mempromosikan rasisme, seksisme, homofobia, kekerasan terhadap hewan, atau segala bentuk ujaran kebencian lainnya.
Dukungan teknis hanya disediakan di GitHub. Tidak ada pernyataan atau jaminan yang dibuat mengenai waktu respons untuk menjawab pertanyaan dukungan. Namun Anda juga dapat mengikuti diskusi di Forum Kirby.
Kirby Opener dikembangkan dan dikelola oleh Bruno Meilick, seorang desainer game & pengembang web dari Jerman. Saya ingin berterima kasih kepada Fabian Michael karena telah memberikan banyak inspirasi kepada saya dan Julian Kraan karena telah bercerita kepada saya tentang Kirby.