- Mewujudkan formatter medan tersuai di Drupal 8 melibatkan menentukan kelas formatter baru dalam direktori Src/Plugin/Field/FieldFormatter dari modul tersuai, memanjangkan dari plugin ImageFormatter lalai.
- Kelas Formatter baru harus mengatasi kaedah ViewElements () untuk mengembalikan pelbagai data medan, menggantikan tema image_formatter lalai dengan satu adat.
- Tema baru, image_title_caption_formatter, dicipta dalam fail modul modul, dengan pembolehubah yang sama diluluskan seperti dalam tema image_formatter lalai.
- Formatter medan tersuai boleh digunakan untuk medan di Drupal 8 melalui tab "Urus Paparan" jenis kandungan, memilih pemiutang tersuai dari dropdown "format".
Dalam tutorial ini, kita akan melalui menentukan formatter medan tersuai untuk medan yang sedia ada (imej). Apa yang ingin kita capai adalah untuk memaparkan imej dengan kapsyen kecil di bawahnya. Keterangan ini akan menjadi nilai tajuk yang diberikan kepada imej jika ada.
Kod yang kita tulis di sini boleh didapati di repositori ini sebagai modul image_title_caption. Tetapi mari kita lihat bagaimana kita boleh mendapatkan hasil akhir itu.
Modul Drupal
mari kita mulakan dengan membuat modul tersuai baru (image_title_caption) dengan hanya satu fail:
image_title_caption.info.yml:
Tiada apa -apa dari biasa di sini. Kita juga boleh membolehkan modul sudah jika kita mahu.
name: Image title caption type: module description: Uses the image title field as a caption core: 8.x dependencies: - image
Plugin
Dalam Drupal 8, format medan (seperti jenis medan dan widget sendiri) adalah plugin. Yang teras ditakrifkan sama ada oleh modul teras atau boleh didapati di dalam ruang nama DrupalcorfieldPluginfieldFfieldForter. Dan seperti yang kita lihat dalam artikel sebelumnya di mana kita melihat blok tersuai, plugin masuk ke dalam SRC/ plugin/ folder modul kami. Dalam kes formatter medan, ini akan menjadi direktori Src/Plugin/Field/FieldFormatter.
Di bawah anda dapat melihat kelas formatter kami sendiri:
name: Image title caption type: module description: Uses the image title field as a caption core: 8.x dependencies: - image
Ini adalah plugin kami. Tidak ada yang lain. Di atas perisytiharan kelas kita mempunyai anotasi @fieldFormatter di mana plugin dapat ditemui. Kami menentukan ID plugin (image_title_caption), label dan pelbagai jenis medan formatter ini boleh digunakan dengan. Dalam kes kami, yang terakhir hanya mengandungi jenis medan imej lalai tetapi kami dapat menyokong lebih banyak jika kami mahu, walaupun jenis medan tersuai. Nilai -nilai yang masuk dalam array itu adalah ID plugin jadi jika anda melihat plugin jenis medan imej, anda akan melihat bahawa IDnya adalah imej.
Kelas kelihatan mudah kerana kami memanjangkan dari plugin ImageFormatter lalai yang ditakrifkan oleh modul imej teras. Untuk tujuan kami, semua yang kami perlukan untuk mengatasi adalah kaedah ViewElements () yang bertanggungjawab untuk mengembalikan pelbagai data bidang kami. Yang terakhir ini boleh didapati di dalam senarai item $ dan boleh digunakan dan disediakan untuk rendering.
Perkara pertama yang kita lakukan dalam kaedah ini adalah pastikan kita memanggil kaedah kelas induk pada item dan menyimpannya dalam pembolehubah. Itu akan menyediakan imej yang akan diberikan seolah -olah ia biasanya.
Secara lalai, plugin ImageFormatter (ibu bapa) menggunakan tema Image_Formatter di dalam array render untuk mengeluarkan nilai medan imej. Apa yang kita lakukan di sini ialah untuk setiap item, kita menggantikan tema ini dengan kita sendiri: image_title_caption_formatter. Kemudian kita mengembalikan unsur -unsur (membuat array) sama seperti ibu bapa.
Anda akan melihat banyak perkara ini di Drupal 8: Kami mendapat petunjuk yang sangat baik mengenai apa yang perlu kita lakukan dari kelas induk yang kami luangkan. Dan jika anda bertanya kepada saya, itu jauh lebih baik daripada memikirkan apa yang dilakukan oleh beberapa cangkuk sihir atau fungsi.
Tema
Oleh kerana tema image_title_caption_formatter yang ditentukan di atas adalah khayalan, kita perlu menciptanya. Di dalam fail modul modul kami, kami perlu melaksanakan hook_theme:
image_title_caption.module:
<span><span><?php </span></span><span> </span><span><span>/** </span></span><span><span> * <span>@file </span></span></span><span><span> * Contains \Drupal\image_title_caption\Plugin\Field\FieldFormatter\ImageTitleCaption. </span></span><span><span> */ </span></span><span> </span><span><span>namespace Drupal<span>\image_title_caption\Plugin\Field\FieldFormatter</span>; </span></span><span> </span><span><span>use Drupal<span>\Core\Field\FieldItemListInterface</span>; </span></span><span><span>use Drupal<span>\image\Plugin\Field\FieldFormatter\ImageFormatter</span>; </span></span><span> </span><span><span>/** </span></span><span><span> * Plugin implementation of the 'image_title_caption' formatter. </span></span><span><span> * </span></span><span><span> * @FieldFormatter( </span></span><span><span> * id = "image_title_caption", </span></span><span><span> * label = @Translation("Image with caption from title"), </span></span><span><span> * field_types = <span>{ </span></span></span><span><span> * "image" </span></span><span><span> * <span>} </span></span></span><span><span> * ) </span></span><span><span> */ </span></span><span><span>class ImageTitleCaption extends ImageFormatter { </span></span><span> </span><span> <span>/** </span></span><span><span> * <span>{@inheritdoc} </span></span></span><span><span> */ </span></span><span> <span>public function viewElements(FieldItemListInterface $items) { </span></span><span> <span>$elements = <span>parent::</span>viewElements($items); </span></span><span> <span>foreach ($elements as &$element) { </span></span><span> <span>$element['#theme'] = 'image_title_caption_formatter'; </span></span><span> <span>} </span></span><span> </span><span> <span>return $elements; </span></span><span> <span>} </span></span><span> </span><span><span>}</span></span></span>
Ini sepatutnya kelihatan biasa kerana ia sangat mirip dengan Drupal 7. Sila perhatikan pembolehubah yang kami lalui untuk tema ini. Kami berhasrat untuk mengatasi tema image_formatter lalai supaya kami harus mempunyai pembolehubah yang sama di sini juga. Di samping itu, kerana tema Image_Formatter diproses, kami perlu membuat preprocessor untuk tema kami juga:
<span>/** </span><span> * Implements hook_theme(). </span><span> */ </span><span>function image_title_caption_theme() { </span> <span>return array( </span> <span>'image_title_caption_formatter' => array( </span> <span>'variables' => array('item' => NULL, 'item_attributes' => NULL, 'url' => NULL, 'image_style' => NULL), </span> <span>), </span> <span>); </span><span>}</span>
Dalam preprocessor ini kita melakukan dua tindakan:
- Kami memastikan bahawa pembolehubah yang diluluskan ke fail template akan terlebih dahulu diproses oleh preprocessor tema image_formatter lalai. Ini adalah supaya semua pembolehubah adalah sama dan imej akan dipaparkan seperti biasa.
- kami membuat pembolehubah baru yang dipanggil kapsyen yang akan mengandungi nilai sanitasi tajuk imej.
Untuk sanitisasi, kami menggunakan kelas String Helper secara statik. Kami masih berada di dalam fail .modul supaya kami tidak dapat menyuntiknya, tetapi kami perlu menggunakan di bahagian atas fail:
name: Image title caption type: module description: Uses the image title field as a caption core: 8.x dependencies: - image
template
Akhir sekali, kita perlu membuat fail templat untuk tema baru kami:
templat/gambar-title-caption-formatter.html.twig:
<span><span><?php </span></span><span> </span><span><span>/** </span></span><span><span> * <span>@file </span></span></span><span><span> * Contains \Drupal\image_title_caption\Plugin\Field\FieldFormatter\ImageTitleCaption. </span></span><span><span> */ </span></span><span> </span><span><span>namespace Drupal<span>\image_title_caption\Plugin\Field\FieldFormatter</span>; </span></span><span> </span><span><span>use Drupal<span>\Core\Field\FieldItemListInterface</span>; </span></span><span><span>use Drupal<span>\image\Plugin\Field\FieldFormatter\ImageFormatter</span>; </span></span><span> </span><span><span>/** </span></span><span><span> * Plugin implementation of the 'image_title_caption' formatter. </span></span><span><span> * </span></span><span><span> * @FieldFormatter( </span></span><span><span> * id = "image_title_caption", </span></span><span><span> * label = @Translation("Image with caption from title"), </span></span><span><span> * field_types = <span>{ </span></span></span><span><span> * "image" </span></span><span><span> * <span>} </span></span></span><span><span> * ) </span></span><span><span> */ </span></span><span><span>class ImageTitleCaption extends ImageFormatter { </span></span><span> </span><span> <span>/** </span></span><span><span> * <span>{@inheritdoc} </span></span></span><span><span> */ </span></span><span> <span>public function viewElements(FieldItemListInterface $items) { </span></span><span> <span>$elements = <span>parent::</span>viewElements($items); </span></span><span> <span>foreach ($elements as &$element) { </span></span><span> <span>$element['#theme'] = 'image_title_caption_formatter'; </span></span><span> <span>} </span></span><span> </span><span> <span>return $elements; </span></span><span> <span>} </span></span><span> </span><span><span>}</span></span></span>
Sama seperti Drupal 7, nama fail ini penting kerana ia mencerminkan nama tema. Bagi kandungannya, mereka hampir sama dengan templat yang digunakan oleh tema Image_Formatter kecuali untuk kapsyen yang dicetak di bahagian bawah.
Adakah ia berfungsi?
Sekarang kita telah menulis kod, kita perlu mengaktifkan modul dan membersihkan semua cache jika kita telah membuat perubahan kod selepas membolehkan. Sudah tiba masanya untuk mengujinya.
Sebagai contoh, pergi ke tetapan paparan medan jenis kandungan artikel di admin/struktur/jenis/pengurusan/artikel/paparan. Untuk medan imej, di bawah tajuk format, anda sepatutnya dapat memilih imej dengan kapsyen dari format tajuk. Simpan borang dan pergi ke admin/struktur/jenis/menguruskan/artikel/medan/node.article.field_image dan pastikan tajuk medan imej diaktifkan.
Akhirnya, anda boleh mengedit artikel, memuat naik imej dan tentukan tajuk. Tajuk itu akan terus berkelakuan seperti itu, tetapi tambahan pula, ia akan dipaparkan di bawah imej sebagai kapsyen. Sudah tentu, anda masih boleh menggayakannya seperti yang anda mahukan dan lain -lain
Kesimpulan
Dalam artikel ini, kita telah melihat betapa mudahnya untuk membuat formatter medan dan memperluaskan tingkah laku lalai di Drupal 8. Kami hanya menyentuh untuk mengatasi penampilan () plugin ini tetapi kami dapat melakukan lebih banyak lagi untuk menyesuaikan lagi perkara. Anda juga tidak dikehendaki melanjutkan imageFormatter. Terdapat banyak plugin sedia ada yang boleh anda luangkan dari atau digunakan sebagai contoh.
Selain itu, anda juga boleh membuat jenis medan dan widget baru dengan mudah. Ini proses yang sama tetapi anda perlu mengambil beberapa maklumat skema, menggunakan kelas anotasi yang berbeza dan menulis lebih banyak kod. Tetapi maksudnya anda sangat fleksibel dalam melakukannya.
soalan yang sering ditanya mengenai membuat formatter medan tersuai di Drupal 8
Bagaimana saya membuat formatter medan tersuai di Drupal 8?
Mewujudkan formatter medan tersuai di Drupal 8 melibatkan beberapa langkah. Pertama, anda perlu membuat modul tersuai jika anda tidak mempunyai satu. Kemudian, dalam modul tersuai anda, buat fail baru dalam direktori Src/Plugin/Field/FieldFormatter. Fail itu hendaklah dinamakan mengikut kelas yang akan mengandungi. Di dalam fail ini, anda akan menentukan kelas formatter medan tersuai anda, yang harus memperluaskan kelas FormatterBase. Anda perlu melaksanakan beberapa kaedah, termasuk ViewElements () yang bertanggungjawab untuk menghasilkan array render untuk nilai medan.
Apakah tujuan anotasi @FieldFormatter dalam Drupal 8? Ia termasuk sifat seperti id, label, dan field_types. ID adalah pengecam unik untuk formatter, labelnya adalah nama yang boleh dibaca manusia, dan field_types adalah pelbagai nama mesin jenis medan yang menyokong formatter. medan di Drupal 8?
Bagaimana saya boleh mengawal output formatter medan tersuai saya di Drupal 8? dikawal oleh kaedah ViewElements () dalam kelas formatter anda. Kaedah ini harus mengembalikan array render untuk nilai medan. Anda boleh menggunakan sistem peringatan Drupal untuk menyesuaikan output lagi. jenis medan di drupal 8. Dalam anotasi @fieldformatter kelas formatter anda, anda boleh menentukan pelbagai nama mesin jenis medan dalam harta field_types. Drupal 8?
Untuk membuat borang tetapan untuk formatter medan tersuai anda di Drupal 8, anda perlu melaksanakan kaedah Tetapan () dan TetapanSummary () dalam kelas formatter anda. Kaedah Tetapan () harus mengembalikan array borang untuk tetapan, dan kaedah tetapanSummary () harus mengembalikan pelbagai garisan ringkasan untuk tetapan. 8? Anda perlu melaksanakan kaedah ViewElements () untuk menghasilkan array yang diberikan untuk nilai medan imej. , anda boleh membuat formatter medan tersuai untuk jenis medan tersuai di Drupal 8. Dalam anotasi @FieldFormatter kelas formatter anda, anda boleh menentukan nama mesin jenis medan tersuai anda di harta tanah field_types. Bolehkah saya menggunakan formatter medan tersuai untuk memaparkan pautan di Drupal 8?
Untuk menggunakan formatter medan tersuai untuk memaparkan pautan di Drupal 8, kelas pemenang anda harus memperluaskan kelas LinkFormatter dan bukannya formatterbase. Anda perlu melaksanakan kaedah ViewElements () untuk menghasilkan array render untuk nilai medan pautan.
bagaimana saya boleh membuat formatter medan tersuai untuk medan multi-nilai di Drupal 8? kelas dan melaksanakan kaedah ViewElements (). Kaedah ini harus mengembalikan array render untuk nilai medan, dengan mengambil kira bahawa medan mungkin mempunyai pelbagai nilai.
Atas ialah kandungan terperinci Membuat formatter medan tersuai di Drupal 8. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Phpidentifierauser'sSessionusingSessionCookiesandSessionIds.1) whensession_start () ISCALLED, phpGeneratesAuniquesessionIdstoredinacookienamedPhpsessidontheUserer'sBrowser.2) ThisIdallowsPhptoretRievesSessionDataFromtheserver.

Keselamatan sesi PHP boleh dicapai melalui langkah -langkah berikut: 1. Gunakan session_regenerate_id () untuk menjana semula ID sesi apabila pengguna log masuk atau merupakan operasi penting. 2. Sulitkan ID sesi penghantaran melalui protokol HTTPS. 3. Gunakan session_save_path () untuk menentukan direktori selamat untuk menyimpan data sesi dan menetapkan kebenaran dengan betul.

PhpsessionFileSarestoredIntHedirectorySpecifiedBySession.save_path, biasanya/tmponunix-likesystemsorc: \ windows \ temponwindows.tocustomethis: 1) usession_save_path ()

ToretrievedataFromaphpsession, startTheSessionWithSsion_start () andaccessVariablesInthe $ _SessionArray.Forexample: 1) startTheSession: session_start ()

Langkah -langkah untuk membina sistem keranjang belanja yang cekap menggunakan sesi termasuk: 1) Memahami definisi dan fungsi sesi. Sesi ini adalah mekanisme penyimpanan sisi pelayan yang digunakan untuk mengekalkan status pengguna merentasi permintaan; 2) melaksanakan pengurusan sesi asas, seperti menambah produk ke keranjang belanja; 3) memperluas penggunaan lanjutan, menyokong pengurusan kuantiti produk dan penghapusan; 4) Mengoptimumkan prestasi dan keselamatan, dengan berterusan data sesi dan menggunakan pengecam sesi yang selamat.

Artikel ini menerangkan cara membuat, melaksanakan, dan menggunakan antara muka dalam PHP, memberi tumpuan kepada manfaat mereka untuk organisasi kod dan penyelenggaraan.

Artikel ini membincangkan perbezaan antara crypt () dan password_hash () dalam php untuk hashing kata laluan, memberi tumpuan kepada pelaksanaan, keselamatan, dan kesesuaian untuk aplikasi web moden.

Artikel membincangkan mencegah skrip lintas tapak (XSS) dalam PHP melalui pengesahan input, pengekodan output, dan menggunakan alat seperti OWASP ESAPI dan pembersih HTML.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Dreamweaver CS6
Alat pembangunan web visual

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.
