BaseOptionsFieldType

Type
Abstract Class
Namespace
Craft
Inherits
Craft\BaseOptionsFieldType » Craft\BaseFieldType » Craft\BaseSavableComponentType » Craft\BaseComponentType » Craft\BaseApplicationComponent » CApplicationComponent » CComponent
Implements
Craft\IComponentType, Craft\IFieldType, Craft\IPreviewableFieldType, Craft\ISavableComponentType, IApplicationComponent
Extended by
Craft\CheckboxesFieldType, Craft\DropdownFieldType, Craft\MultiSelectFieldType, Craft\RadioButtonsFieldType
Since
1.0

Class BaseOptionsFieldType

See also http://craftcms.com

View source

Public Properties

PropertyDescription
$behaviorsarray – The behaviors that should be attached to this component.
$elementCraft\BaseElementModel
$modelCraft\BaseModel

Protected Properties

$multi

Signature

protected boolean $multi = false

Public Methods

MethodDescription
__call()Calls the named method which is not a class method.
__get()Returns a property value, an event handler list or a behavior based on its name.
__isset()Checks if a property value is null.
__set()Sets value of a component property.
__unset()Sets a component property to be null.
asa()Returns the named behavior object.
attachBehavior()Attaches a behavior to this component.
attachBehaviors()Attaches a list of behaviors to the component.
attachEventHandler()Attaches an event handler to an event.
canGetProperty()Determines whether a property can be read.
canSetProperty()Determines whether a property can be set.
defineContentAttribute()Returns the field’s content attribute config.
detachBehavior()Detaches a behavior from the component.
detachBehaviors()Detaches all behaviors from the component.
detachEventHandler()Detaches an existing event handler.
disableBehavior()Disables an attached behavior.
disableBehaviors()Disables all behaviors attached to this component.
enableBehavior()Enables an attached behavior.
enableBehaviors()Enables all behaviors attached to this component.
evaluateExpression()Evaluates a PHP expression or callback under the context of this component.
getClassHandle()Returns the component’s handle, ideally based on the class name.
getEventHandlers()Returns the list of attached event handlers for an event.
getInputHtml()Returns the field’s input HTML.
getIsInitialized()Checks if this application component has been initialized.
getName()Returns the component’s name.
getSearchKeywords()Returns the search keywords that should be associated with this field.
getSettings()Returns the component’s settings model.
getSettingsHtml()Returns the component’s settings HTML.
getStaticHtml()Returns a static (non-editable) version of the field’s input HTML.
getTableAttributeHtml()
hasEvent()Determines whether an event is defined.
hasEventHandler()Checks whether the named event has attached handlers.
hasProperty()Determines whether a property is defined.
init()Initializes the application component.
isInitialized()Checks if this application component has been initialized yet, or not.
isSelectable()Returns whether this component should be shown when the user is creating a component of this type.
modifyElementsQuery()Modifies an element query.
onAfterDelete()Performs any actions after a field is deleted.
onAfterElementSave()Performs any additional actions after the element has been saved.
onAfterSave()Performs any actions after a field is saved.
onBeforeDelete()Performs any actions before a field is deleted.
onBeforeSave()Performs any actions before a field is saved.
prepSettings()Preps the settings before they’re saved to the database.
prepValue()Prepares the field’s value for use.
prepValueFromPost()Returns the input value as it should be stored in the database.
raiseEvent()Raises an event.
setElement()Sets the element that the field type is associated with.
setIsFresh()Sets whether the field is fresh.
setSettings()Sets the setting values.
validate()Validates the field’s value.

defineContentAttribute()

Returns the field’s content attribute config.

The attribute config returned by this method is used to define two things:

  • This field’s attribute in {@link ContentModel::defineAttributes()}.
  • This field’s column in the craft_content table.

The method can return a string (e.g. AttributeType::Number) or an array with additional settings (e.g. array(AttributeType::Number, 'min' => 0, 'max' => 100, 'decimals' => 2)) if the attribute type’s default settings defined by {@link ModelHelper::$attributeTypeDefaults} aren’t good enough.

If you return AttributeType::Mixed, your field type can work with array data, and it will automatically be JSON-encoded when getting saved to the database, and automatically JSON-decoded when getting fetched from the database. All your field type will ever see is the actual array.

If the field type is storing its data in its own table and doesn’t need a column in the craft_content table, this method should return false. You can then save your data manually from {@link onAfterElementSave}.

IFieldType::defineContentAttribute()

IFieldType::defineContentAttribute()

View source

Returns

mixed – The field’s content attribute config, or false if it’s storing data in its own table.

Signature

public mixed defineContentAttribute ( )

getSettingsHtml()

Returns the component’s settings HTML.

An extremely simple implementation would be to directly return some HTML:

return '<textarea name="foo">'.$this->getSettings()->foo.'</textarea>';

For more complex settings, you might prefer to create a template, and render it via {@link TemplatesService::render()}. For example, the following code would render a template loacated at craft/plugins/myplugin/templates/_settings.html, passing the settings to it:

return craft()->templates->render('myplugin/_settings', array(
    'settings' => $this->getSettings()
));

If you need to tie any JavaScript code to your settings, it’s important to know that any name= and id= attributes within the returned HTML will probably get {@link TemplatesService::namespaceInputs() namespaced}, however your JavaScript code will be left untouched.

For example, if getSettingsHtml() returns the following HTML:

<textarea id="foo" name="foo"></textarea>

<script type="text/javascript">
    var textarea = document.getElementById('foo');
</script>

…then it might actually look like this before getting output to the browser:

<textarea id="namespace-foo" name="namespace[foo]"></textarea>

<script type="text/javascript">
    var textarea = document.getElementById('foo');
</script>

As you can see, that JavaScript code will not be able to find the textarea, because the textarea’s id= attribute was changed from foo to namespace-foo.

Before you start adding namespace- to the beginning of your element ID selectors, keep in mind that the actual namespace is going to change depending on the context. Often they are randomly generated. So it’s not quite that simple.

Thankfully, {@link TemplatesService} provides a couple handy methods that can help you deal with this:

  • {@link TemplatesService::namespaceInputId()} will give you the namespaced version of a given ID.
  • {@link TemplatesService::namespaceInputName()} will give you the namespaced version of a given input name.
  • {@link TemplatesService::formatInputId()} will format an input name to look more like an ID attribute value.

So here’s what a getSettingsHtml() method that includes field-targeting JavaScript code might look like:

public function getSettingsHtml()
{
    // Come up with an ID value for 'foo'
    $id = craft()->templates->formatInputId('foo');

    // Figure out what that ID is going to be namespaced into
    $namespacedId = craft()->templates->namespaceInputId($id);

    // Render and return the input template
    return craft()->templates->render('myplugin/_fieldinput', array(
        'id'           => $id,
        'namespacedId' => $namespacedId,
        'settings'     => $this->getSettings()
    ));
}

And the _settings.html template might look like this:

<textarea id="{{ id }}" name="foo">{{ settings.foo }}</textarea>

<script type="text/javascript">
    var textarea = document.getElementById('{{ namespacedId }}');
</script>

The same principles also apply if you’re including your JavaScript code with {@link TemplatesService::includeJs()}.

BaseElementFieldType::getSettingsHtml()

View source

Returns

string, null

Signature

public string, null getSettingsHtml ( )

getTableAttributeHtml()

IPreviewableFieldType::getTableAttributeHtml()

View source

Arguments

  • $value (mixed)

Returns

string

Signature

public string getTableAttributeHtml ( $value )

prepSettings()

Preps the settings before they’re saved to the database.

ISavableComponentType::prepSettings()

View source

Arguments

  • $settings (array) – The settings, as they exist in the POST data.

Returns

array – The prepped settings, which will be stored in the database.

Signature

public array prepSettings ( $settings )

prepValue()

Prepares the field’s value for use.

This method is called when the field’s value is first acessed from the element. For example, the first time entry.myFieldHandle is called from a template, or right before {@link getFieldHtml()} is called. Whatever this method returns is what entry.myFieldHandle will likewise return, and what getFieldHandle()’s $value argument will be set to.

IFieldType::prepValue()

IFieldType::prepValue()

View source

Arguments

  • $value (mixed) – The field’s stored value.

Returns

mixed – The prepped value.

Signature

public mixed prepValue ( $value )

validate()

Validates the field’s value.

The $value passed into this method will be based on the value that {@link prepValueFromPost()} returned. It may have gone through additional modification when it was set on the {@link ContentModel} as well, depending on the attribute type {@link defineContentAttribute()} returns.

Some validation may already occur for this field without any help from this method. For example, if the field is required by the field layout, but doesn’t have any value, the {@link ContentModel} will take care of that. Also, if {@link defineContentAttribute()} defines any validation rules (e.g. min or max for Number attributes), those will also be applied automatically. So this method should only be used for custom validation rules that aren’t already provided for free.

IFieldType::validate()

IFieldType::validate()

View source

Arguments

  • $value (mixed) – The field’s value.

Returns

true, string, arraytrue if everything checks out; otherwise a string for a single validation error, or an array of strings if there are multiple validation errors.

Signature

public true, string, array validate ( $value )

Protected Methods

MethodDescription
defineSettings()Defines the settings.
getContentPostLocation()Returns the location in POST that this field's content was pulled from.
getDefaultValue()Returns the default field value.
getOptionLabel()Returns an option's label by its value.
getOptions()Returns the field options, accounting for the old school way of saving them.
getOptionsSettingsLabel()Returns the label for the Options setting.
getSettingsModel()Returns the settings model.
getTranslatedOptions()Returns the field options, with labels run through Craft::t().
isFresh()Returns whether this is the first time the element's content has been edited.

defineSettings()

Defines the settings.

BaseSavableComponentType::defineSettings()

View source

Returns

array

Signature

protected array defineSettings ( )

getDefaultValue()

Returns the default field value.

View source

Returns

array, string, null

Signature

protected array, string, null getDefaultValue ( )

getOptionLabel()

Returns an option's label by its value.

View source

Arguments

Returns

string

Signature

protected string getOptionLabel ( $value )

getOptions()

Returns the field options, accounting for the old school way of saving them.

View source

Returns

array

Signature

protected array getOptions ( )

getOptionsSettingsLabel()

Returns the label for the Options setting.

View source

Returns

string

Signature

protected abstract string getOptionsSettingsLabel ( )

getTranslatedOptions()

Returns the field options, with labels run through Craft::t().

View source

Returns

array

Signature

protected array getTranslatedOptions ( )