Skip to content

Commit 315e811

Browse files
committed
EVENT_BEFORE_UPDATE_SEARCH_INDEX
#9801
1 parent dd9f517 commit 315e811

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22

33
## Unreleased
44

5+
### Added
6+
- Added `craft\services\Elements::EVENT_BEFORE_UPDATE_SEARCH_INDEX`. ([#9801](https://github.com/craftcms/cms/discussions/9801))
7+
58
### Changed
69
- Checkboxes, Dropdown, Multi-select, and Radio Buttons fields now include the selected options’ labels in their search keywords. ([#9799](https://github.com/craftcms/cms/issues/9799))
710
- It’s now possible for field types to disable delta name registration for nested custom fields by calling `Craft::$app->view->setIsDeltaRegistrationActive(false);` before rendering them.
11+
- `craft\events\ElementEvent` now extends `craft\events\CancelableEvent`.
812
- `craft\models\FieldLayout::createForm()` now accepts a `registerDeltas` key in its `$config` argument, which can be set to `true` or `false` to enable/disable delta name registration for any custom fields in the form.
913
- `craft\services\Elements::duplicateElement()` now has a `$placeInStructure` argument.
1014
- The `Craft.t()` JS method now supports translation messages with [`select` parameters](https://www.yiiframework.com/doc/guide/2.0/en/tutorial-i18n#selection).

src/events/ElementEvent.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* @author Pixel & Tonic, Inc. <[email protected]>
1717
* @since 3.0.0
1818
*/
19-
class ElementEvent extends Event
19+
class ElementEvent extends CancelableEvent
2020
{
2121
/**
2222
* @var ElementInterface|null The element model associated with the event.

src/services/Elements.php

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,16 @@ class Elements extends Component
170170
*/
171171
const EVENT_AFTER_SAVE_ELEMENT = 'afterSaveElement';
172172

173+
/**
174+
* @event ElementEvent The event that is triggered before indexing an element’s search keywords,
175+
* or queuing the element’s search keywords to be updated.
176+
*
177+
* You may set [[\craft\events\CancelableEvent::$isValid]] to `false` to prevent the search index from being updated.
178+
*
179+
* @since 3.7.12
180+
*/
181+
const EVENT_BEFORE_UPDATE_SEARCH_INDEX = 'beforeUpdateSearchIndex';
182+
173183
/**
174184
* @event ElementQueryEvent The event that is triggered before resaving a batch of elements.
175185
*/
@@ -2728,15 +2738,21 @@ private function _saveElementInternal(ElementInterface $element, bool $runValida
27282738

27292739
// Update search index
27302740
if ($updateSearchIndex && !ElementHelper::isRevision($element)) {
2731-
if (Craft::$app->getRequest()->getIsConsoleRequest()) {
2732-
Craft::$app->getSearch()->indexElementAttributes($element);
2733-
} else {
2734-
Queue::push(new UpdateSearchIndex([
2735-
'elementType' => get_class($element),
2736-
'elementId' => $element->id,
2737-
'siteId' => $propagate ? '*' : $element->siteId,
2738-
'fieldHandles' => $element->getDirtyFields(),
2739-
]), 2048);
2741+
$event = new ElementEvent([
2742+
'element' => $element,
2743+
]);
2744+
$this->trigger(self::EVENT_BEFORE_UPDATE_SEARCH_INDEX, $event);
2745+
if ($event->isValid) {
2746+
if (Craft::$app->getRequest()->getIsConsoleRequest()) {
2747+
Craft::$app->getSearch()->indexElementAttributes($element);
2748+
} else {
2749+
Queue::push(new UpdateSearchIndex([
2750+
'elementType' => get_class($element),
2751+
'elementId' => $element->id,
2752+
'siteId' => $propagate ? '*' : $element->siteId,
2753+
'fieldHandles' => $element->getDirtyFields(),
2754+
]), 2048);
2755+
}
27402756
}
27412757
}
27422758

0 commit comments

Comments
 (0)