diff --git a/src/EventRegistrar.php b/src/EventRegistrar.php index 298b548..9b7bcdc 100644 --- a/src/EventRegistrar.php +++ b/src/EventRegistrar.php @@ -42,7 +42,7 @@ public static function registerUpdateEvents() Event::on(Structures::class, Structures::EVENT_AFTER_MOVE_ELEMENT, function ($event) { static::handleUpdateEvent($event); }); - Event::on( Entries::class, Entries::EVENT_AFTER_SAVE_SECTION, function ($event) { + Event::on(Entries::class, Entries::EVENT_AFTER_SAVE_SECTION, function ($event) { static::handleUpdateEvent($event); }); } @@ -85,7 +85,16 @@ public static function registerFrontendEvents() Plugin::getInstance()->getTagCollection()->add($event->element->handle); } - // Add to collection + // Nested elements inherit the root owner's entry tag + $rootOwner = $event->element->getRootOwner(); + if ($rootOwner !== null && $rootOwner !== $event->element) { + Plugin::getInstance()->getTagCollection()->add( + Plugin::TAG_PREFIX_ELEMENT . $rootOwner->getId() + ); + return; + } + + // Add top-level element tags to the collection Plugin::getInstance()->getTagCollection()->addTagsFromElement($event->row); }); @@ -137,7 +146,6 @@ public static function registerFrontendEvents() }); } - public static function registerCpEvents() { // Register cache purge checkbox @@ -157,7 +165,6 @@ function (RegisterCacheOptionsEvent $event) { ); } - public static function registerFallback() { @@ -202,7 +209,6 @@ public static function registerFallback() }); } - /** * @param \yii\base\Event $event */ @@ -210,7 +216,6 @@ protected static function handleUpdateEvent(Event $event) { $tags = []; - if ($event instanceof ElementEvent) { // Prevent purge on updates of drafts or revisions @@ -223,16 +228,11 @@ protected static function handleUpdateEvent(Event $event) return; } - // For nested elements (blocks), purge the root owner's tags + // For nested elements (blocks), purge only the root owner's entry tag $rootOwner = $event->element->getRootOwner(); - if ($rootOwner !== $event->element) { - if (isset($rootOwner->sectionId)) { - $tags[] = Plugin::TAG_PREFIX_SECTION . $rootOwner->sectionId; - } + if ($rootOwner !== null && $rootOwner !== $event->element) { $tags[] = Plugin::TAG_PREFIX_ELEMENT . $rootOwner->getId(); - } - - if (Plugin::getInstance()->getSettings()->isCachableElement(get_class($event->element))) { + } elseif (Plugin::getInstance()->getSettings()->isCachableElement(get_class($event->element))) { if ($event->element instanceof \craft\elements\GlobalSet && is_string($event->element->handle)) { $tags[] = $event->element->handle; } elseif ($event->element instanceof \craft\elements\Asset && $event->isNew) {