Menambahkan bidang tambahan/Penerapan ke dalam komponen anda
From Joomla! Documentation
< J3.x:Adding custom fields
Penerapan ke dalam komponen anda
Artikel dalam Seri ini
- Pendahuluan
- Parameter untuk semua Bidang Tambahan
- Bidang Kalender
- Bidang Kotak Centang
- Bidang Warna
- Bidang Editor
- Bidang Integer
- Bidang Daftar
- Bidang Daftar Gambar
- Bidang Media
- Bidang Radio
- Repeatable Field
- Bidang SQL
- Bidang Teks
- Bidang Area Teks
- Bidang URL
- Bidang Pengguna
- Bidang Kelompok Pengguna
- Bagaimana mengelompokkan bidang tambahan
- Komponen yang mendukung bidang tambahan
- Penerapan ke dalam komponen anda
- Gunakan bidang tambahan di penggantian anda
Penerapan bidang ke dalam komponen anda
Artikel ini menjelaskan bagaimana menerapkan sebuah dasar implementasi fitur bidang tambahan ke dalam komponen kustom anda.
Pernahkah anda ingin menunjukkan suatu atribut tambahan di dalam butir anda? Dengan bidang tambahan, anda memiliki cara pengintegrasian yang mulus untuk menampilkannya baik di backend maupun di frontend situs anda.
Bidang tambahan menawarkan 15 jenis bidang, jika anda perlu yang lainnya anda dapat membuat plugin anda sendiri..
Ekstensi bidang tambahan diletakkan di dalam inti dan dapat dipakai dalam cara yang sama dengan ekstensi kategori.
Pada dasarnya terdapat 2 berkas yang anda perlukan untuk mengembangkan kode berikut untuk dasar bagian backend.
Catatan! Kode contoh yang kami gunakan bernama com_example.
Bagian Backend
Bagaimana menambahkan bidang ke daftar backend
Hampir mirip dengan com_categories, dimana di sana hanya terdapat beberapa baris kode yang dibutuhkan untuk dapat menambahkan bidang ke dalam view di backend.
Tambahkanlah baris berikut ini ke metode addSubmenu
di dalam kelas helper komponen anda.
Pemakaian konteks haruslah sesuai dengan konteks bidang yang ingin anda terapkan. Sebuah contoh konteks dapat berupa com_content.article atau com_weblinks.weblink. Kami menggunakan com_example.item di sini sebagai contoh. Semua kecuali konteks perlu diubah.
if (JComponentHelper::isEnabled('com_fields'))
{
JHtmlSidebar::addEntry(
JText::_('JGLOBAL_FIELDS'),
'index.php?option=com_fields&context=com_example.item',
$vName == 'fields.fields'
);
JHtmlSidebar::addEntry(
JText::_('JGLOBAL_FIELD_GROUPS'),
'index.php?option=com_fields&view=groups&context=com_example.item',
$vName == 'fields.groups'
);
}
Penerapan ACL
Sekarang bagian ACL yang harus diselesaikan. Anda harus menambahkan baris berikut ini ke berkas xml akses anda sebelum tanda tutup </access>
pada berkas itu. Di sini mereka ditetapkan dan akan mengizinkan pengguna anda untuk memilih setelan ACL dalam penerapan com_fields anda.
<section name="fieldgroup">
<action name="core.create" title="JACTION_CREATE" description="COM_FIELDS_GROUP_PERMISSION_CREATE_DESC" />
<action name="core.delete" title="JACTION_DELETE" description="COM_FIELDS_GROUP_PERMISSION_DELETE_DESC" />
<action name="core.edit" title="JACTION_EDIT" description="COM_FIELDS_GROUP_PERMISSION_EDIT_DESC" />
<action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_FIELDS_GROUP_PERMISSION_EDITSTATE_DESC" />
<action name="core.edit.own" title="JACTION_EDITOWN" description="COM_FIELDS_GROUP_PERMISSION_EDITOWN_DESC" />
<action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_FIELDS_GROUP_PERMISSION_EDITVALUE_DESC" />
</section>
<section name="field">
<action name="core.delete" title="JACTION_DELETE" description="COM_FIELDS_FIELD_PERMISSION_DELETE_DESC" />
<action name="core.edit" title="JACTION_EDIT" description="COM_FIELDS_FIELD_PERMISSION_EDIT_DESC" />
<action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_FIELDS_FIELD_PERMISSION_EDITSTATE_DESC" />
<action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_FIELDS_FIELD_PERMISSION_EDITVALUE_DESC" />
</section>
Terdapat satu lagi setelan di dalam berkas itu:
<action name="core.edit.value" title="JACTION_EDITVALUE" description="JACTION_EDITVALUE_COMPONENT_DESC" />
Entri ini harus dibuat di bawah setelan normal di komponen anda (juga berkas xml akses) karena ia mengizinkan pengguna di dalam kelompok untuk mengedit nilai bidang tambahan apapun yang dikirimkan di komponen anda.
Hasil
Jika anda telah melengkapi langkah-langkah ini, bagian backend untuk penerapan bidang anda telah selesai. Sekarang pengguna dapat membuat bidang dan menetapkannya ke sebuah butir.
Bagian Frontend Situs
Sekarang mari kita lihat bagian frontend situs. Ini mudah sebab bidang tersebut dihasilkan melalui event Plugin/Events/Konten di frontend situs.
Untuk menampilkan bidang di frontend situs, anda perlu menerapkan event plugin konten di dalam komponen anda.
Yang penting di sini adalah anda melempar konteks yang sama dengan yang anda gunakan di backend terhadap event tersebut.
Lihat:
Setelah event "onContentPrepare" dipicu bersama konteksnya, anda dapat temukan bidang yang dilampirkan di dalam properti $item->jcfields jika anda ingin menghasilkan bidang tersebut dengan menggunakan /view yang ada di layout anda.
Tips, Trik & Fitur Tersembunyi
Di sini anda dapat temukan beberapa tips dan trik terhadap apa yang bisa saja salah dengan penerapan anda demikian juga fitur-fitur tersembunyi dari com_fields.
Tab bidang tidak muncul di view edit komponen saya
Dalam beberapa komponen, view edit di backend dan/atau frontend situs dikode secara hardcoded dan tidak dapat diganti atau dikembangkan lewat plugin. Disebabkan bidang menggunakan sebuah plugin untuk menambahkan bidang ke dalam komponen maka anda harus mendukung hal itu agar dapat membantu bidang. Anda dapat pastikan bahwa bidang tersebut dihasilkan, misalnya dengan menerapkan tata letak berikut ke dalam view edit di komponen anda:
<?php $this->ignore_fieldsets = array('general', 'info', 'detail', 'jmetadata', 'item_associations'); ?>
<?php echo JLayoutHelper::render('joomla.edit.params', $this); ?>
Baris pertama, pastikanlah kita mengabaikan (pada akhirnya fieldsets yang di-hardcoded) dan kemudian hasilkan tab bidang yang dinamis dengan tata letak joomla.edit.params
.
Kelas helper publik dan API
Kelas "FieldsHelper" memiliki beberapa fungsi API publik yang bekerja untuk bidang.
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
$fields = FieldsHelper::getFields('com_example.item', $item, true);
Model bidangnya sendiri memungkinkan untuk menarik dan menyimpan nilai dari sebuah bidang.
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_fields/models', 'FieldsModel');
$fieldModel = JModelLegacy::getInstance('Field', 'FieldsModel', array('ignore_request' => true));
$fieldModel->setFieldValue($fieldId, $item->id, 'demo value');
Dukungan ACL
- Setiap bidang mempunyai sebuah tingkatan akses
- Setiap bidang mempunyai sebuah izin "edit.value"
JFactory::getUser()->authorise('edit.value', ‘com_example.item.field.' . (int) $field->id);
Informasi Selengkapnya
- https://www.youtube.com/watch?v=7ikOaOKyo6s | JAB16 - Bidang Tambahan di Joomla untuk para pengembang - English
- https://www.youtube.com/watch?v=F_Ni15icn1U | JD16AT - Bidang tambahan sejak Joomla 3.7 - English
- https://joomla.digital-peak.com/images/blog/JDD16%20Custom%20fields%20in%20Joomla%20for%20developers.pdf