|
29 | 29 | use craft\events\RegisterElementSourcesEvent;
|
30 | 30 | use craft\events\RegisterElementTableAttributesEvent;
|
31 | 31 | use craft\events\RegisterPreviewTargetsEvent;
|
| 32 | +use craft\events\RenderElementsEvent; |
32 | 33 | use craft\events\SetElementRouteEvent;
|
33 | 34 | use craft\events\SetElementTableAttributeHtmlEvent;
|
34 | 35 | use craft\helpers\ArrayHelper;
|
@@ -187,6 +188,11 @@ abstract class Element extends Component implements ElementInterface
|
187 | 188 | */
|
188 | 189 | const EVENT_REGISTER_HTML_ATTRIBUTES = 'registerHtmlAttributes';
|
189 | 190 |
|
| 191 | + /** |
| 192 | + * @event RenderElementsEvent The event that is triggered when rendering elements |
| 193 | + */ |
| 194 | + const EVENT_RENDER_ELEMENTS = 'renderElements'; |
| 195 | + |
190 | 196 | /**
|
191 | 197 | * @event SetElementRouteEvent The event that is triggered when defining the route that should be used when this element’s URL is requested
|
192 | 198 | *
|
@@ -574,17 +580,19 @@ protected static function defineSearchableAttributes(): array
|
574 | 580 | */
|
575 | 581 | public static function indexHtml(ElementQueryInterface $elementQuery, array $disabledElementIds = null, array $viewState, string $sourceKey = null, string $context = null, bool $includeContainer, bool $showCheckboxes): string
|
576 | 582 | {
|
| 583 | + $source = ElementHelper::findSource(static::class, $sourceKey, $context); |
| 584 | + |
577 | 585 | $variables = [
|
578 | 586 | 'viewMode' => $viewState['mode'],
|
579 | 587 | 'context' => $context,
|
580 | 588 | 'disabledElementIds' => $disabledElementIds,
|
581 | 589 | 'collapsedElementIds' => Craft::$app->getRequest()->getParam('collapsedElementIds'),
|
582 | 590 | 'showCheckboxes' => $showCheckboxes,
|
| 591 | + 'source' => $source |
583 | 592 | ];
|
584 | 593 |
|
585 | 594 | // Special case for sorting by structure
|
586 | 595 | if (isset($viewState['order']) && $viewState['order'] === 'structure') {
|
587 |
| - $source = ElementHelper::findSource(static::class, $sourceKey, $context); |
588 | 596 |
|
589 | 597 | if (isset($source['structureId'])) {
|
590 | 598 | $elementQuery->orderBy(['lft' => SORT_ASC]);
|
@@ -621,7 +629,14 @@ public static function indexHtml(ElementQueryInterface $elementQuery, array $dis
|
621 | 629 |
|
622 | 630 | $template = '_elements/' . $viewState['mode'] . 'view/' . ($includeContainer ? 'container' : 'elements');
|
623 | 631 |
|
624 |
| - return Craft::$app->getView()->renderTemplate($template, $variables); |
| 632 | + // Give plugins a chance to modify the element rendering |
| 633 | + $event = new RenderElementsEvent([ |
| 634 | + 'variables' => $variables, |
| 635 | + 'template' => $template |
| 636 | + ]); |
| 637 | + Event::trigger(static::class, self::EVENT_RENDER_ELEMENTS, $event); |
| 638 | + |
| 639 | + return Craft::$app->getView()->renderTemplate($event->template, $event->variables); |
625 | 640 | }
|
626 | 641 |
|
627 | 642 | /**
|
|
0 commit comments