|
33 | 33 | use craft\events\RegisterElementTableAttributesEvent;
|
34 | 34 | use craft\events\RegisterPreviewTargetsEvent;
|
35 | 35 | use craft\events\SetEagerLoadedElementsEvent;
|
| 36 | +use craft\events\RenderElementsEvent; |
36 | 37 | use craft\events\SetElementRouteEvent;
|
37 | 38 | use craft\events\SetElementTableAttributeHtmlEvent;
|
38 | 39 | use craft\fieldlayoutelements\BaseField;
|
@@ -237,6 +238,11 @@ abstract class Element extends Component implements ElementInterface
|
237 | 238 | */
|
238 | 239 | const EVENT_REGISTER_HTML_ATTRIBUTES = 'registerHtmlAttributes';
|
239 | 240 |
|
| 241 | + /** |
| 242 | + * @event RenderElementsEvent The event that is triggered when rendering elements |
| 243 | + */ |
| 244 | + const EVENT_RENDER_ELEMENTS = 'renderElements'; |
| 245 | + |
240 | 246 | /**
|
241 | 247 | * @event SetElementRouteEvent The event that is triggered when defining the route that should be used when this element’s URL is requested
|
242 | 248 | *
|
@@ -691,17 +697,19 @@ protected static function defineSearchableAttributes(): array
|
691 | 697 | */
|
692 | 698 | public static function indexHtml(ElementQueryInterface $elementQuery, array $disabledElementIds = null, array $viewState, string $sourceKey = null, string $context = null, bool $includeContainer, bool $showCheckboxes): string
|
693 | 699 | {
|
| 700 | + $source = ElementHelper::findSource(static::class, $sourceKey, $context); |
| 701 | + |
694 | 702 | $variables = [
|
695 | 703 | 'viewMode' => $viewState['mode'],
|
696 | 704 | 'context' => $context,
|
697 | 705 | 'disabledElementIds' => $disabledElementIds,
|
698 | 706 | 'collapsedElementIds' => Craft::$app->getRequest()->getParam('collapsedElementIds'),
|
699 | 707 | 'showCheckboxes' => $showCheckboxes,
|
| 708 | + 'source' => $source |
700 | 709 | ];
|
701 | 710 |
|
702 | 711 | // Special case for sorting by structure
|
703 | 712 | if (isset($viewState['order']) && $viewState['order'] === 'structure') {
|
704 |
| - $source = ElementHelper::findSource(static::class, $sourceKey, $context); |
705 | 713 |
|
706 | 714 | if (isset($source['structureId'])) {
|
707 | 715 | $elementQuery->orderBy(['lft' => SORT_ASC]);
|
@@ -738,7 +746,14 @@ public static function indexHtml(ElementQueryInterface $elementQuery, array $dis
|
738 | 746 |
|
739 | 747 | $template = '_elements/' . $viewState['mode'] . 'view/' . ($includeContainer ? 'container' : 'elements');
|
740 | 748 |
|
741 |
| - return Craft::$app->getView()->renderTemplate($template, $variables); |
| 749 | + // Give plugins a chance to modify the element rendering |
| 750 | + $event = new RenderElementsEvent([ |
| 751 | + 'variables' => $variables, |
| 752 | + 'template' => $template |
| 753 | + ]); |
| 754 | + Event::trigger(static::class, self::EVENT_RENDER_ELEMENTS, $event); |
| 755 | + |
| 756 | + return Craft::$app->getView()->renderTemplate($event->template, $event->variables); |
742 | 757 | }
|
743 | 758 |
|
744 | 759 | /**
|
|
0 commit comments