J3.x

Menambahkan bidang tambahan/Penerapan ke dalam komponen anda

From Joomla! Documentation

< J3.x:Adding custom fields
This page is a translated version of the page J3.x:Adding custom fields/Implement into your component and the translation is 98% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎français • ‎Bahasa Indonesia • ‎Nederlands • ‎中文(中国大陆)‎

Penerapan ke dalam komponen 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->setValue($fieldId, 'com_example.item', $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