Field Types
The registerFeedMeFields
event
Plugins developers can add support for their field types via the craft\feedme\services\Fields::EVENT_REGISTER_FEED_ME_FIELDS
event:
use craft\feedme\events\RegisterFeedMeFieldsEvent;
use craft\feedme\services\Fields;
use yii\base\Event;
Event::on(Fields::class, Fields::EVENT_REGISTER_FEED_ME_FIELDS, function(RegisterFeedMeFieldsEvent $e) {
$e->fields[] = my\plugin\feedme\fields\MyFieldType::class;
});
Your MyFieldType
class must extend craft\feedme\base\Field
, and implement at least the following properties and methods:
namespace my\plugin\feedme\fields;
use craft\feedme\base\Field;
use my\plugin\fields\MyFieldType;
class MyFieldType extends Field
{
/**
* @var string
*/
public static string $name = 'My Custom Field Type';
/**
* @var string
*/
public static string $class = MyFieldType::class;
/**
* @inheritdoc
*/
public function getMappingTemplate(): string
{
// Return a valid template path for your plugin:
return 'my-plugin/feedme/mapping-template';
}
/**
* @inheritdoc
*/
public function parseField(): mixed
{
// Take the incoming item’s data...
$data = $this->feedData;
//
$value =
}
}
Your mapping template should include HTML inputs for any options that affect how incoming data is parsed—like delimiters or formats. Those inputs’ name
attributes should begin with options
, and their values should be retrieved from the same property of the feed.fieldMapping.options
:
{% import '_includes/forms' as forms %}
{% extends 'feed-me/_includes/fields/_base' %}
{% block extraSettings %}
{{ forms.selectField({
name: 'options[delimeter]',
value: hash_get(feed.fieldMapping, "#{optionsPath}.delimeter", ','),
options: [
{ value: ',', label: 'Comma (,)'|t('my-plugin') },
{ value: '/', label: 'Slash (/)'|t('my-plugin') },
{ value: '|', label: 'Pipe (|)'|t('my-plugin') },
],
}) }}
{% endblock %}
Inputs will be namespaced by the extended template. Use the hash_get()
helper function to dynamically retrieve preexisting settings with the provided optionsPath
variable.
TIP
See the built-in field types and field settings templates to see how we handle different types of data.
The beforeParseField
event
Plugins can get notified before a field's data has been parsed.
use craft\feedme\events\FieldEvent;
use craft\feedme\services\Fields;
use yii\base\Event;
Event::on(Fields::class, Fields::EVENT_BEFORE_PARSE_FIELD, function(FieldEvent $e) {
});
The afterParseField
event
Plugins can get notified after a field's data has been parsed.
use craft\feedme\events\FieldEvent;
use craft\feedme\services\Fields;
use yii\base\Event;
Event::on(Fields::class, Fields::EVENT_AFTER_PARSE_FIELD, function(FieldEvent $e) {
$parsedValue = $e->parsedValue;
});