J3.x

Toevoegen van extra velden - Implementatie in uw component

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 100% complete.

Other languages:
Deutsch • ‎English • ‎français • ‎Bahasa Indonesia • ‎Nederlands • ‎中文(中国大陆)‎

Implementatie in uw component


Implementeer velden in uw component

Dit artikel beschrijft een basis implementatie van de extra velden functie in uw eigen component.
Heeft u ooit extra attributen in uw items willen tonen? Via extra velden heeft u een naadloos geïntegreerde manier ze te tonen in het beheergedeelte en op de website.
Extra velden bieden 15 verschillende types, als u er meer wilt kunt u uw eigen plugin maken..
De extra velden extensie zit in de core en kan op dezelfde manier gebruikt worden als de categorieën extensie. In de basis zijn er slechts 2 bestanden nodig met de volgende code voor het basis beheergedeelte.
Let op! In de voorbeeldcode gebruiken we voor uw component de naam com_example.

Het beheerdeel

Hoe velden toe te voegen aan de beheergedeelte lijsten

Net als bij com_categories zijn er slechts een paar regels nodig om de velden toe te voegen aan de beheergedeelte view. Voeg slechts de volgende regels toe aan de methode addSubmenu in uw component helper class.
De gebruikte context moet overeenkomen met de context waarin u de velden wilt implementeren. Een voorbeeld van context zou kunnen zijn com_content.article of com_weblinks.weblink. We gebruiken hier com_example.item als voorbeeld. Alleen de context optie moet veranderd worden.

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'
	);
}

Implementeer ACL

Nu moet het ACL deel gedaan worden. U moet de volgende regels toevoegen aan uw xml bestand net voor de afsluitende </access> in dat bestand. Hier worden ze gedefinieerd en geven uw gebruikers de mogelijkheid de ACL instellingen te kiezen bij de implementatie van uw com_fields.

	<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>

Er staat nog een instelling in dat bestand:

    <action name="core.edit.value" title="JACTION_EDITVALUE" description="JACTION_EDITVALUE_COMPONENT_DESC" />

Dit moet staan onder de normale instellingen van uw component (en ook in het xml bestand) aangezien het gebruikers in de groep een waarde van extra velden laat bewerken, die staan in uw component.

Resultaat

Als u deze stappen heeft voltooid, is het beheergedeelte voor de implementatie van velden af. De gebruikers kunnen nu velden aanmaken en ze aan een item toevoegen.

Het website gedeelte

Laten we nu naar het website gedeelte gaan. Het is makkelijk aangezien de velden gegenereerd worden via de Plugin/Events/Content events op de website. Om velden op de website te tonen, moet u de content plugin events implementeren in uw component.
Van belang is hier dat u dezelfde context meegeeft aan de events, als die u gebruikt heeft in het beheergedeelte.

Zie:

Nadat het onContentPrepare event met de context is afgegaan vindt u de bijgesloten velden in het $item->jcfields property als u de de gebruikte velden wilt generen in uw layouts / views.

Tips, trucks & verborgen functies

Hier vindt u enkele tips en trucks over wat er fout kan gaan bij uw implementatie, evenals enkele verborgen functies van com_fields.

Het velden tabblad wordt niet zichtbaar in het bewerk overzicht van mijn component

In sommige componenten zijn het bewerk overzicht in het beheergedeelte en/of website hard gecodeerd en kunnen niet veranderd / uitgebreid worden met plugins. Maar aangezien velden plugins gebruiken om de velden aan uw component toe te voegen, moet u dat ondersteunen om velden te ondersteunen. U kunt er bijvoorbeeld voor zorgen dat velden worden gegenereerd door de volgende layout te implementeren in uw component:

    <?php $this->ignore_fieldsets = array('general', 'info', 'detail', 'jmetadata', 'item_associations'); ?>
    <?php echo JLayoutHelper::render('joomla.edit.params', $this); ?>

De eerste regel zorgt ervoor dat we de (eventueel hard gecodeerde fieldsets) negeren en dan het dynamische velden tabblad genereren met behulp van de joomla.edit.params layout.

Public helper classes en API

De class FieldsHelper heeft enkele public API functies om met velden te werken.

    JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
    $fields = FieldsHelper::getFields('com_example.item', $item, true);

Het 'field' model zelf maakt het ophalen en opslaan van de waarde van een veld mogelijk.

    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’);

ACL ondersteuning

  • Ieder veld heeft een toegangsniveau
  • Ieder veld heeft nieuwe rechten: bewerk waarde

JFactory::getUser()->authorise('edit.value', ‘com_example.item.field.' . (int) $field->id);

Meer informatie