AssetsFieldType
- Type
- Class
- Namespace
- Craft
- Inherits
- Craft\AssetsFieldType » Craft\BaseElementFieldType » Craft\BaseFieldType » Craft\BaseSavableComponentType » Craft\BaseComponentType » Craft\BaseApplicationComponent » CApplicationComponent (opens new window) » CComponent (opens new window)
- Implements
- Craft\IComponentType, Craft\IEagerLoadingFieldType, Craft\IFieldType, Craft\IPreviewableFieldType, Craft\ISavableComponentType,
IApplicationComponent
- Since
- 1.0
Assets fieldtype.
See also http://craftcms.com
View source (opens new window)
# Public Properties
Property | Description |
---|---|
$behaviors (opens new window) | array (opens new window) – The behaviors that should be attached to this component. |
$element | Craft\BaseElementModel |
$model | Craft\BaseModel |
# Protected Properties
# $allowLargeThumbsView
Signature
protected boolean $allowLargeThumbsView = true
# $elementType
Signature
protected string $elementType = 'Asset'
# $inputJsClass
Signature
protected string, null $inputJsClass = 'Craft.AssetSelectInput'
# $inputTemplate
Signature
protected string $inputTemplate = '_components/fieldtypes/Assets/input'
# Public Methods
Method | Description |
---|---|
__call() (opens new window) | Calls the named method which is not a class method. |
__get() (opens new window) | Returns a property value, an event handler list or a behavior based on its name. |
__isset() (opens new window) | Checks if a property value is null. |
__set() (opens new window) | Sets value of a component property. |
__unset() (opens new window) | Sets a component property to be null. |
asa() (opens new window) | Returns the named behavior object. |
attachBehavior() (opens new window) | Attaches a behavior to this component. |
attachBehaviors() (opens new window) | Attaches a list of behaviors to the component. |
attachEventHandler() (opens new window) | Attaches an event handler to an event. |
canGetProperty() (opens new window) | Determines whether a property can be read. |
canSetProperty() (opens new window) | Determines whether a property can be set. |
defineContentAttribute() | Returns the field’s content attribute config. |
detachBehavior() (opens new window) | Detaches a behavior from the component. |
detachBehaviors() (opens new window) | Detaches all behaviors from the component. |
detachEventHandler() (opens new window) | Detaches an existing event handler. |
disableBehavior() (opens new window) | Disables an attached behavior. |
disableBehaviors() (opens new window) | Disables all behaviors attached to this component. |
enableBehavior() (opens new window) | Enables an attached behavior. |
enableBehaviors() (opens new window) | Enables all behaviors attached to this component. |
evaluateExpression() (opens new window) | Evaluates a PHP expression or callback under the context of this component. |
getClassHandle() | Returns the component’s handle, ideally based on the class name. |
getEagerLoadingMap() | Returns an array that maps source-to-target element IDs based on this custom field. |
getEventHandlers() (opens new window) | Returns the list of attached event handlers for an event. |
getInputHtml() | Returns the field’s input HTML. |
getIsInitialized() (opens new window) | 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() (opens new window) | Determines whether an event is defined. |
hasEventHandler() (opens new window) | Checks whether the named event has attached handlers. |
hasProperty() (opens new window) | Determines whether a property is defined. |
init() | |
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() (opens new window) | Raises an event. |
resolveSourcePath() | Resolve source path for uploading for this field. |
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. |
# getInputHtml()
Returns the field’s input HTML.
An extremely simple implementation would be to directly return some HTML:
return '<textarea name="'.$name.'">'.$value.'</textarea>';
For more complex inputs, 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/_fieldinput.html, passing the $name and $value variables to it:
return craft()->templates->render('myplugin/_fieldinput', array(
'name' => $name,
'value' => $value
));
If you need to tie any JavaScript code to your input, 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 getInputHtml() 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 getInputHtml() method that includes field-targeting JavaScript code might look like:
public function getInputHtml($name, $value)
{
// Come up with an ID value based on $name
$id = craft()->templates->formatInputId($name);
// 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(
'name' => $name,
'id' => $id,
'namespacedId' => $namespacedId,
'value' => $value
));
}
And the _fieldinput.html template might look like this:
<textarea id="{{ id }}" name="{{ name }}">{{ value }}</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()}.
IFieldType::getInputHtml()
IFieldType::getInputHtml()
IFieldType::getInputHtml()
View source (opens new window)
Arguments
$name
(string (opens new window)) – The name that the field’s HTML inputs should have.$criteria
(mixed
)
Returns
string (opens new window) – The input HTML.
Signature
public string getInputHtml ( $name, $criteria )
# 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()}.
ISavableComponentType::getSettingsHtml()
ISavableComponentType::getSettingsHtml()
View source (opens new window)
Returns
Signature
public string, null getSettingsHtml ( )
# init()
Signature
public void init ( )
# onAfterElementSave()
Performs any additional actions after the element has been saved.
If your field type is storing data in its own table, this is the best place to do it. That’s because by the time this method has been called, you can be sure that the element will have an ID, even if it’s getting saved for the first time.
IFieldType::onAfterElementSave()
IFieldType::onAfterElementSave()
IFieldType::onAfterElementSave()
View source (opens new window)
Returns
Signature
public null onAfterElementSave ( )
# prepValueFromPost()
Returns the input value as it should be stored in the database.
This method is called from {@link BaseElementModel::setContentFromPost()}, and is the only chance your plugin has
to modify the POST data before it is saved to the craft_content table (assuming {@link defineContentAttribute()}
doesn’t return false
and the field actually has a column in the craft_content table).
IFieldType::prepValueFromPost()
View source (opens new window)
Arguments
$value
(mixed
) – The value that was in the POST data for the field.
Returns
mixed
– The value that should be stored in the database.
Signature
public mixed prepValueFromPost ( $value )
# resolveSourcePath()
Resolve source path for uploading for this field.
View source (opens new window)
Returns
mixed
, null (opens new window)
Signature
public mixed, null resolveSourcePath ( )
# 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()
IFieldType::validate()
View source (opens new window)
Arguments
$value
(array (opens new window)) – The field’s value.
Returns
true (opens new window), string (opens new window), array (opens new window) – true
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
Method | Description |
---|---|
defineSettings() | Defines the settings. |
getAddButtonLabel() | Returns the label for the "Add" button. |
getAvailableSources() | Returns the sources that should be available to choose from within the field's settings |
getContentPostLocation() | Returns the location in POST that this field's content was pulled from. |
getElementType() | Returns the element type. |
getInputSelectionCriteria() | Returns any additional criteria parameters limiting which elements the field should be able to select. |
getInputSources() | Returns an array of the source keys the field should be able to select elements from. |
getInputTemplateVariables() | Returns an array of variables that should be passed to the input template. |
getSettingsModel() | Returns the settings model. |
getSourceOptions() | Normalizes the available sources into select input options. |
getSupportedViewModes() | Returns the field’s supported view modes. |
getTargetLocale() | Returns the locale that target elements should have. |
getTargetLocaleFieldHtml() | Returns the HTML for the Target Locale setting. |
getViewMode() | Returns the field’s current view mode. |
getViewModeFieldHtml() | Returns the HTML for the View Mode setting. |
isFresh() | Returns whether this is the first time the element's content has been edited. |
# defineSettings()
Defines the settings.
BaseSavableComponentType::defineSettings()
BaseSavableComponentType::defineSettings()
View source (opens new window)
Returns
Signature
protected array defineSettings ( )
# getAddButtonLabel()
Returns the label for the "Add" button.
BaseElementFieldType::getAddButtonLabel()
View source (opens new window)
Returns
Signature
protected string getAddButtonLabel ( )
# getInputSelectionCriteria()
Returns any additional criteria parameters limiting which elements the field should be able to select.
BaseElementFieldType::getInputSelectionCriteria()
View source (opens new window)
Returns
Signature
protected array getInputSelectionCriteria ( )
# getInputSources()
Returns an array of the source keys the field should be able to select elements from.
BaseElementFieldType::getInputSources()
View source (opens new window)
Returns
Throws
Signature
protected array getInputSources ( )