Elements
- Type
- Class
- Namespace
- craft\services
- Inherits
- craft\services\Elements » yii\base\Component » yii\base\BaseObject
- Implements
- yii\base\Configurable
- Since
- 3.0.0
The Elements service provides APIs for managing elements.
An instance of the service is available via Craft::$app->elements
.
Public Properties
Property | Description |
---|---|
allElementTypes | string[] – The available element classes. |
behaviors | yii\base\Behavior – List of behaviors attached to this component. |
duplicatedElementIds | integer[] – Stores a mapping of source element IDs to their duplicated element IDs. |
duplicatedElementSourceIds | integer[] – Stores a mapping of duplicated element IDs to their source element IDs. |
isCollectingCacheTags | boolean |
placeholderElement | craft\base\ElementInterface – The element currently being edited by Live Preview. |
placeholderElements | craft\base\ElementInterface[] |
allElementTypes
- Type
- string[]
- Default value
null
- Access
- Read-only
The available element classes.
duplicatedElementIds
- Type
- integer[]
- Default value
[]
Stores a mapping of source element IDs to their duplicated element IDs.
duplicatedElementSourceIds
- Type
- integer[]
- Default value
[]
- Since
- 3.4.0
Stores a mapping of duplicated element IDs to their source element IDs.
isCollectingCacheTags
- Type
- boolean
- Default value
null
- Access
- Read-only
- Since
- 3.5.0
placeholderElement
- Type
- craft\base\ElementInterface
- Default value
null
- Access
- Write-only
The element currently being edited by Live Preview.
placeholderElements
- Type
- craft\base\ElementInterface[]
- Default value
null
- Access
- Read-only
- Since
- 3.2.5
Public Methods
Method | Description |
---|---|
__call() | Calls the named method which is not a class method. |
__clone() | This method is called after the object is created by cloning an existing one. |
__construct() | Constructor. |
__get() | Returns the value of a component property. |
__isset() | Checks if a property is set, i.e. defined and not null. |
__set() | Sets the value of a component property. |
__unset() | Sets a component property to be null. |
attachBehavior() | Attaches a behavior to this component. |
attachBehaviors() | Attaches a list of behaviors to the component. |
behaviors() | Returns a list of behaviors that this component should behave as. |
canGetProperty() | Returns a value indicating whether a property can be read. |
canSetProperty() | Returns a value indicating whether a property can be set. |
className() | Returns the fully qualified name of this class. |
collectCacheTags() | Adds element cache invalidation tags to the current collection. |
createAction() | Creates an element action with a given config. |
createEagerLoadingPlans() | Normalizes a with element query param into an array of eager-loading plans. |
createElement() | Creates an element with a given config. |
createElementQuery() | Creates an element query for a given element type. |
createExporter() | Creates an element exporter with a given config. |
deleteElement() | Deletes an element. |
deleteElementById() | Deletes an element by its ID. |
detachBehavior() | Detaches a behavior from the component. |
detachBehaviors() | Detaches all behaviors from the component. |
duplicateElement() | Duplicates an element. |
eagerLoadElements() | Eager-loads additional elements onto a given set of elements. |
ensureBehaviors() | Makes sure that the behaviors declared in behaviors() are attached to this component. |
getAllElementTypes() | Returns all available element classes. |
getBehavior() | Returns the named behavior object. |
getBehaviors() | Returns all behaviors attached to this component. |
getElementById() | Returns an element by its ID. |
getElementByUid() | Returns an element by its UID. |
getElementByUri() | Returns an element by its URI. |
getElementTypeById() | Returns the class of an element with a given ID. |
getElementTypeByRefHandle() | Returns an element class by its handle. |
getElementTypeByUid() | Returns the class of an element with a given UID. |
getElementTypesByIds() | Returns the classes of elements with the given IDs. |
getElementUriForSite() | Returns an element’s URI for a given site. |
getEnabledSiteIdsForElement() | Returns the site IDs that a given element is enabled in. |
getIsCollectingCacheTags() | Returns whether we are currently collecting element cache invalidation tags. |
getPlaceholderElement() | Returns a placeholder element by its ID and site ID. |
getPlaceholderElements() | Returns all placeholder elements. |
hasEventHandlers() | Returns a value indicating whether there is any handler attached to the named event. |
hasMethod() | Returns a value indicating whether a method is defined. |
hasProperty() | Returns a value indicating whether a property is defined for this component. |
init() | Initializes the object. |
invalidateAllCaches() | Invalidates all element caches. |
invalidateCachesForElement() | Invalidates caches for the given element. |
invalidateCachesForElementType() | Invalidates caches for the given element type. |
mergeCanonicalChanges() | Merges recent canonical element changes into a given derivative, such as a draft. |
mergeElements() | Merges two elements together. |
mergeElementsByIds() | Merges two elements together by their IDs. |
off() | Detaches an existing event handler from this component. |
on() | Attaches an event handler to an event. |
parseRefs() | Parses a string for element reference tags. |
propagateElement() | Propagates an element to a different site. |
propagateElements() | Propagates all elements that match a given element query to another site(s). |
resaveElements() | Resaves all elements that match a given element query. |
restoreElement() | Restores an element. |
restoreElements() | Restores multiple elements. |
saveElement() | Handles all of the routine tasks that go along with saving elements. |
setPlaceholderElement() | Stores a placeholder element that element queries should use instead of populating a new element with a matching ID and site ID. |
startCollectingCacheTags() | Starts collecting element cache invalidation tags. |
stopCollectingCacheTags() | Stops collecting element cache invalidation tags, and returns a cache dependency object. |
trigger() | Triggers an event. |
updateCanonicalElement() | Updates the canonical element from a given derivative, such as a draft or revision. |
updateDescendantSlugsAndUris() | Updates an element’s descendants’ slugs and URIs. |
updateElementSlugAndUri() | Updates an element’s slug and URI, along with any descendants. |
updateElementSlugAndUriInOtherSites() | Updates an element’s slug and URI, for any sites besides the given one. |
collectCacheTags()
- Since
- 3.5.0
Adds element cache invalidation tags to the current collection.
Arguments
$tags
(string[])
createAction()
Creates an element action with a given config.
Arguments
$config
(mixed
) – The element action’s class name, or its config, with atype
value and optionally asettings
value
Returns
craft\base\ElementActionInterface – The element action
createEagerLoadingPlans()
- Since
- 3.5.0
Normalizes a with
element query param into an array of eager-loading plans.
Arguments
$with
Returns
craft\elements\db\EagerLoadPlan[]
createElement()
Creates an element with a given config.
Arguments
$config
(mixed
) – The field’s class name, or its config, with atype
value and optionally asettings
value
Returns
craft\base\ElementInterface – The element
createElementQuery()
- Since
- 3.5.0
Creates an element query for a given element type.
Arguments
$elementType
(string) – The element class
Returns
craft\elements\db\ElementQueryInterface – The element query
Throws
- yii\base\InvalidArgumentException
if $elementType is not a valid element
createExporter()
Creates an element exporter with a given config.
Arguments
$config
(mixed
) – The element exporter’s class name, or its config, with atype
value and optionally asettings
value
Returns
craft\base\ElementExporterInterface – The element exporter
deleteElement()
Deletes an element.
Arguments
$element
(craft\base\ElementInterface) – The element to be deleted$hardDelete
Returns
boolean – Whether the element was deleted successfully
Throws
deleteElementById()
Deletes an element by its ID.
Arguments
$elementId
(integer) – The element’s ID$elementType
(string, null) – The element class.$siteId
(integer, null) – The site to fetch the element in. Defaults to the current site.$hardDelete
Returns
boolean – Whether the element was deleted successfully
Throws
duplicateElement()
Duplicates an element.
Arguments
$element
(craft\base\ElementInterface) – The element to duplicate$newAttributes
(array) – Any attributes to apply to the duplicate$placeInStructure
(boolean) – Whether to position the cloned element after the original one in its structure. (This will only happen if the duplicated element is canonical.)$trackDuplication
(boolean) – Whether to keep track of the duplication from craft\services\Elements::$duplicatedElementIds and craft\services\Elements::$duplicatedElementSourceIds
Returns
craft\base\ElementInterface – The duplicated element
Throws
- craft\errors\UnsupportedSiteException
if the element is being duplicated into a site it doesn’t support - craft\errors\InvalidElementException
if saveElement() returns false for any of the sites - Throwable
if reasons
eagerLoadElements()
Eager-loads additional elements onto a given set of elements.
Arguments
$elementType
(string) – The root element type class$elements
(craft\base\ElementInterface[]) – The root element models that should be updated with the eager-loaded elements$with
(string, craft\elements\db\EagerLoadPlan[], array) – Dot-delimited paths of the elements that should be eager-loaded into the root elements
getAllElementTypes()
Returns all available element classes.
Returns
string[] – The available element classes.
getElementById()
Returns an element by its ID.
If no element type is provided, the method will first have to run a DB query to determine what type of element the $id is, so you should definitely pass it if it’s known. The element’s status will not be a factor when using this method.
Arguments
$elementId
(integer) – The element’s ID.$elementType
(string, null) – The element class.$siteId
(integer, integer[], string, null) – The site(s) to fetch the element in. Defaults to the current site.$criteria
(array)
Returns
craft\base\ElementInterface, null – The matching element, or null
.
getElementByUid()
- Since
- 3.5.13
Returns an element by its UID.
If no element type is provided, the method will first have to run a DB query to determine what type of element the $uid is, so you should definitely pass it if it’s known. The element’s status will not be a factor when using this method.
Arguments
$uid
(string) – The element’s UID.$elementType
(string, null) – The element class.$siteId
(integer, integer[], string, null) – The site(s) to fetch the element in. Defaults to the current site.$criteria
(array)
Returns
craft\base\ElementInterface, null – The matching element, or null
.
getElementByUri()
Returns an element by its URI.
Arguments
$uri
(string) – The element’s URI.$siteId
(integer, null) – The site to look for the URI in, and to return the element in. Defaults to the current site.$enabledOnly
(boolean) – Whether to only look for an enabled element. Defaults tofalse
.
Returns
craft\base\ElementInterface, null – The matching element, or null
.
getElementTypeById()
Returns the class of an element with a given ID.
Arguments
$elementId
(integer) – The element’s ID
Returns
string, null – The element’s class, or null if it could not be found
getElementTypeByRefHandle()
Returns an element class by its handle.
Arguments
$refHandle
(string) – The element class handle
Returns
string, null – The element class, or null if it could not be found
getElementTypeByUid()
- Since
- 3.5.13
Returns the class of an element with a given UID.
Arguments
$uid
(string) – The element’s UID
Returns
string, null – The element’s class, or null if it could not be found
getElementTypesByIds()
Returns the classes of elements with the given IDs.
Arguments
$elementIds
(integer[]) – The elements’ IDs
Returns
string[]
getElementUriForSite()
Returns an element’s URI for a given site.
Arguments
$elementId
(integer) – The element’s ID.$siteId
(integer) – The site to search for the element’s URI in.
Returns
string, null, false – The element’s URI or null
, or false
if the element doesn’t exist.
getEnabledSiteIdsForElement()
Returns the site IDs that a given element is enabled in.
Arguments
$elementId
(integer) – The element’s ID.
Returns
integer[] – The site IDs that the element is enabled in. If the element could not be found, an empty array will be returned.
getIsCollectingCacheTags()
- Since
- 3.5.0
Returns whether we are currently collecting element cache invalidation tags.
See also:
Returns
getPlaceholderElement()
Returns a placeholder element by its ID and site ID.
See also setPlaceholderElement()View source
Arguments
Returns
craft\base\ElementInterface, null – The placeholder element if one exists, or null.
getPlaceholderElements()
- Since
- 3.2.5
Returns all placeholder elements.
Returns
invalidateAllCaches()
- Since
- 3.5.0
Invalidates all element caches.
invalidateCachesForElement()
- Since
- 3.5.0
Invalidates caches for the given element.
Arguments
$element
(craft\base\ElementInterface)
invalidateCachesForElementType()
- Since
- 3.5.0
Invalidates caches for the given element type.
Arguments
$elementType
(string)
mergeCanonicalChanges()
- Since
- 3.7.0
Merges recent canonical element changes into a given derivative, such as a draft.
Arguments
$element
(craft\base\ElementInterface) – The derivative element
Returns
void
mergeElements()
- Since
- 3.1.31
Merges two elements together.
This method will update the following:
- Any relations involving the merged element
- Any structures that contain the merged element
- Any reference tags in textual custom fields referencing the merged element
Arguments
$mergedElement
(craft\base\ElementInterface) – The element that is going away.$prevailingElement
(craft\base\ElementInterface) – The element that is sticking around.
Returns
boolean – Whether the elements were merged successfully.
Throws
- Throwable
if reasons
mergeElementsByIds()
Merges two elements together by their IDs.
This method will update the following:
- Any relations involving the merged element
- Any structures that contain the merged element
- Any reference tags in textual custom fields referencing the merged element
Arguments
$mergedElementId
(integer) – The ID of the element that is going away.$prevailingElementId
(integer) – The ID of the element that is sticking around.
Returns
boolean – Whether the elements were merged successfully.
Throws
- craft\errors\ElementNotFoundException
if one of the element IDs don’t exist. - Throwable
if reasons
parseRefs()
Parses a string for element reference tags.
Arguments
$str
(string) – The string to parse$defaultSiteId
(integer, null) – The default site ID to query the elements in
Returns
string – The parsed string
propagateElement()
- Since
- 3.0.13
Propagates an element to a different site.
Arguments
$element
(craft\base\ElementInterface) – The element to propagate$siteId
(integer) – The site ID that the element should be propagated to$siteElement
(craft\base\ElementInterface, false, null) – The element loaded for the propagated site (only pass this if you already had a reason to load it). Set tofalse
if it is known to not exist yet.
Throws
- yii\base\Exception
if the element couldn't be propagated - craft\errors\UnsupportedSiteException
if the element doesn’t support$siteId
propagateElements()
- Since
- 3.2.0
Propagates all elements that match a given element query to another site(s).
Arguments
$query
(craft\elements\db\ElementQueryInterface) – The element query to fetch elements with$siteIds
(integer, integer[], null) – The site ID(s) that the elements should be propagated to. If null, elements will be$continueOnError
(boolean) – Whether to continue going if an error occurs
Throws
- Throwable
if reasons propagated to all supported sites, except the one they were queried in.
resaveElements()
- Since
- 3.2.0
Resaves all elements that match a given element query.
Arguments
$query
(craft\elements\db\ElementQueryInterface) – The element query to fetch elements with$continueOnError
(boolean) – Whether to continue going if an error occurs$skipRevisions
(boolean) – Whether elements that are (or belong to) a revision should be skipped$updateSearchIndex
(boolean, null) – Whether to update the element search index for the element (this will happen via a background job if this is a web request)$touch
(boolean) – Whether to update thedateUpdated
timestamps for the elements
Throws
- Throwable
if reasons
restoreElement()
- Since
- 3.1.0
Restores an element.
Arguments
$element
(craft\base\ElementInterface)
Returns
boolean – Whether the element was restored successfully
Throws
- yii\base\Exception
if the $element doesn’t have any supported sites - Throwable
if reasons
restoreElements()
Restores multiple elements.
Arguments
$elements
(craft\base\ElementInterface[])
Returns
boolean – Whether at least one element was restored successfully
Throws
- craft\errors\UnsupportedSiteException
if an element is being restored for a site it doesn’t support - Throwable
if reasons
saveElement()
Handles all of the routine tasks that go along with saving elements.
Those tasks include:
- Validating its content (if $validateContent is
true
, or it’s left asnull
and the element is enabled) - Ensuring the element has a title if its type has titles, and giving it a default title in the event that $validateContent is set to
false
- Saving a row in the
elements
table - Assigning the element’s ID on the element model, if it’s a new element
- Assigning the element’s ID on the element’s content model, if there is one and it’s a new set of content
- Updating the search index with new keywords from the element’s content
- Setting a unique URI on the element, if it’s supposed to have one.
- Saving the element’s row(s) in the
elements_sites
andcontent
tables - Deleting any rows in the
elements_sites
andcontent
tables that no longer need to be there - Cleaning any template caches that the element was involved in
The function will fire beforeElementSave
and afterElementSave
events, and will call beforeSave()
and afterSave()
methods on the passed-in element, giving the element opportunities to hook into the save process.
Example usage - creating a new entry:
$entry = new Entry();
$entry->sectionId = 10;
$entry->typeId = 1;
$entry->authorId = 5;
$entry->enabled = true;
$entry->title = "Hello World!";
$entry->setFieldValues([
'body' => "<p>I can’t believe I literally just called this “Hello World!”.</p>",
]);
$success = Craft::$app->elements->saveElement($entry);
if (!$success) {
Craft::error('Couldn’t save the entry "'.$entry->title.'"', __METHOD__);
}
Arguments
$element
(craft\base\ElementInterface) – The element that is being saved$runValidation
(boolean) – Whether the element should be validated$propagate
(boolean) – Whether the element should be saved across all of its supported sites (this can only be disabled when updating an existing element)$updateSearchIndex
(boolean, null) – Whether to update the element search index for the element (this will happen via a background job if this is a web request)
Returns
Throws
- craft\errors\ElementNotFoundException
if $element has an invalid $id - yii\base\Exception
if the $element doesn’t have any supported sites - Throwable
if reasons
setPlaceholderElement()
Stores a placeholder element that element queries should use instead of populating a new element with a matching ID and site ID.
This is used by Live Preview and Sharing features.
See also getPlaceholderElement()View source
Arguments
$element
(craft\base\ElementInterface) – The element currently being edited by Live Preview.
Throws
- yii\base\InvalidArgumentException
if the element is missing an ID
startCollectingCacheTags()
- Since
- 3.5.0
Starts collecting element cache invalidation tags.
stopCollectingCacheTags()
- Since
- 3.5.0
Stops collecting element cache invalidation tags, and returns a cache dependency object.
Returns
updateCanonicalElement()
- Since
- 3.7.0
Updates the canonical element from a given derivative, such as a draft or revision.
Arguments
$element
(craft\base\ElementInterface) – The derivative element$newAttributes
(array) – Any attributes to apply to the canonical element
Returns
craft\base\ElementInterface – The updated canonical element
Throws
- yii\base\InvalidArgumentException
if the element is already a canonical element
updateDescendantSlugsAndUris()
Updates an element’s descendants’ slugs and URIs.
Arguments
$element
(craft\base\ElementInterface) – The element whose descendants should be updated.$updateOtherSites
(boolean) – Whether the element’s other sites should also be updated.$queue
(boolean) – Whether the descendants’ slugs and URIs should be updated via a job in the queue.
updateElementSlugAndUri()
Updates an element’s slug and URI, along with any descendants.
Arguments
$element
(craft\base\ElementInterface) – The element to update.$updateOtherSites
(boolean) – Whether the element’s other sites should also be updated.$updateDescendants
(boolean) – Whether the element’s descendants should also be updated.$queue
(boolean) – Whether the element’s slug and URI should be updated via a job in the queue.
Throws
- craft\errors\OperationAbortedException
if a unique URI can’t be generated based on the element’s URI format
updateElementSlugAndUriInOtherSites()
Updates an element’s slug and URI, for any sites besides the given one.
Arguments
$element
(craft\base\ElementInterface) – The element to update.
Events
EVENT_AFTER_DELETE_ELEMENT
The event that is triggered after an element is deleted.
EVENT_AFTER_MERGE_CANONICAL_CHANGES
- Type
- craft\events\ElementEvent
- Since
- 3.7.0
The event that is triggered after canonical element changes are merged into a derivative.
EVENT_AFTER_MERGE_ELEMENTS
The event that is triggered after two elements are merged together.
EVENT_AFTER_PERFORM_ACTION
The event that is triggered after an element action is performed.
EVENT_AFTER_PROPAGATE_ELEMENT
The event that is triggered after an element is propagated.
EVENT_AFTER_PROPAGATE_ELEMENTS
The event that is triggered after propagating a batch of elements.
EVENT_AFTER_RESAVE_ELEMENT
The event that is triggered after an element is resaved.
EVENT_AFTER_RESAVE_ELEMENTS
The event that is triggered after resaving a batch of elements.
EVENT_AFTER_RESTORE_ELEMENT
- Type
- craft\events\ElementEvent
- Since
- 3.1.0
The event that is triggered after an element is restored.
EVENT_AFTER_SAVE_ELEMENT
The event that is triggered after an element is saved.
If you want to ignore events for drafts or revisions, call craft\helpers\ElementHelper::isDraftOrRevision() from your event handler:
use craft\events\ElementEvent;
use craft\helpers\ElementHelper;
use craft\services\Elements;
Craft::$app->elements->on(Elements::EVENT_AFTER_SAVE_ELEMENT, function(ElementEvent $e) {
if (ElementHelper::isDraftOrRevision($e->element)) {
return;
}
// ...
});
EVENT_AFTER_UPDATE_SLUG_AND_URI
The event that is triggered after an element’s slug and URI are updated, usually following a Structure move.
EVENT_BEFORE_DELETE_ELEMENT
The event that is triggered before an element is deleted.
EVENT_BEFORE_EAGER_LOAD_ELEMENTS
- Type
- craft\events\EagerLoadElementsEvent
- Since
- 3.5.0
The event that is triggered before elements are eager-loaded.
EVENT_BEFORE_MERGE_CANONICAL_CHANGES
- Type
- craft\events\ElementEvent
- Since
- 3.7.0
The event that is triggered before canonical element changes are merged into a derivative.
EVENT_BEFORE_PERFORM_ACTION
The event that is triggered before an element action is performed.
You may set craft\events\CancelableEvent::$isValid to false
to prevent the action from being performed.
EVENT_BEFORE_PROPAGATE_ELEMENT
The event that is triggered before an element is propagated.
EVENT_BEFORE_PROPAGATE_ELEMENTS
The event that is triggered before propagating a batch of elements.
EVENT_BEFORE_RESAVE_ELEMENT
The event that is triggered before an element is resaved.
EVENT_BEFORE_RESAVE_ELEMENTS
The event that is triggered before resaving a batch of elements.
EVENT_BEFORE_RESTORE_ELEMENT
- Type
- craft\events\ElementEvent
- Since
- 3.1.0
The event that is triggered before an element is restored.
EVENT_BEFORE_SAVE_ELEMENT
The event that is triggered before an element is saved.
If you want to ignore events for drafts or revisions, call craft\helpers\ElementHelper::isDraftOrRevision() from your event handler:
use craft\events\ElementEvent;
use craft\helpers\ElementHelper;
use craft\services\Elements;
Craft::$app->elements->on(Elements::EVENT_BEFORE_SAVE_ELEMENT, function(ElementEvent $e) {
if (ElementHelper::isDraftOrRevision($e->element)) {
return;
}
// ...
});
EVENT_BEFORE_UPDATE_SEARCH_INDEX
- Type
- craft\events\ElementEvent
- Since
- 3.7.12
The event that is triggered before indexing an element’s search keywords, or queuing the element’s search keywords to be updated.
You may set craft\events\CancelableEvent::$isValid to false
to prevent the search index from being updated.
EVENT_BEFORE_UPDATE_SLUG_AND_URI
The event that is triggered before an element’s slug and URI are updated, usually following a Structure move.
EVENT_REGISTER_ELEMENT_TYPES
The event that is triggered when registering element types.
Element types must implement craft\base\ElementInterface. craft\base\Element provides a base implementation.
See Element Types for documentation on creating element types.
Example
use craft\events\RegisterComponentTypesEvent;
use craft\services\Elements;
use yii\base\Event;
Event::on(Elements::class,
Elements::EVENT_REGISTER_ELEMENT_TYPES,
function(RegisterComponentTypesEvent $event) {
$event->types[] = MyElementType::class;
}
);