Skip to content

Instantly share code, notes, and snippets.

@ostark
Created September 11, 2017 10:22
Show Gist options
  • Save ostark/020d4dbefe71dfe107b580b80a91e8cf to your computer and use it in GitHub Desktop.
Save ostark/020d4dbefe71dfe107b580b80a91e8cf to your computer and use it in GitHub Desktop.
Craft 3 - Events - config/app.php
<?php
// VIEW EVENTS
$elements = [];
yii\base\Event::on(\craft\elements\db\ElementQuery::class, \craft\elements\db\ElementQuery::EVENT_AFTER_POPULATE_ELEMENT, function ($event) use (&$elements) {
// Don't collect MatrixBlock and User elements for now
if (in_array(get_class($event->element),['craft\elements\User', 'craft\elements\MatrixBlock'])) {
return;
}
// Collect elements only for frontend GET requests
$request = \Craft::$app->getRequest();
if ($request->getIsGet() && !$request->getIsCpRequest()) {
$elements[] = $event->row;
}
});
yii\base\Event::on(\craft\web\View::class, \craft\web\View::EVENT_AFTER_RENDER_PAGE_TEMPLATE, function ($event) use (&$elements) {
if (count($elements) === 0) {
return;
}
$cacheKeys = ['id' => [], 'sectionId' => [], 'structureId' => []];
// collect
foreach ($elements as $el) {
foreach (array_keys($cacheKeys) as $key) {
if (isset($el[$key])) {
$cacheKeys[$key][] = $el[$key];
}
}
}
foreach ($cacheKeys as $key => $values) {
$cacheKeys[$key] = array_unique($values);
}
// add headers
foreach ($cacheKeys as $key => $values) {
foreach ($values as $value) {
\Craft::$app->getResponse()->getHeaders()->add('X-CACHE-TAG', "$key:$value");
}
}
});
// UPDATE EVENTS
yii\base\Event::on(\craft\services\Elements::class, \craft\services\Elements::EVENT_AFTER_SAVE_ELEMENT, function ($event) {
if (!$event->isNew) {
error_log("EVENT_AFTER_SAVE_ELEMENT - id: " . $event->element->id . " .. type: " . get_class($event->element));
}
});
yii\base\Event::on(\craft\services\Structures::class, \craft\services\Structures::EVENT_AFTER_MOVE_ELEMENT, function ($event) {
error_log("EVENT_AFTER_MOVE_ELEMENT - structureId: " . $event->structureId);
});
yii\base\Event::on(\craft\services\Sections::class, \craft\services\Sections::EVENT_AFTER_SAVE_SECTION, function ($event) {
error_log("EVENT_AFTER_SAVE_SECTION - sectionId: " . $event->section->id);
});
yii\base\Event::on(\craft\base\Element::class, \craft\base\Element::EVENT_AFTER_MOVE_IN_STRUCTURE, function ($event) {
error_log("EVENT_AFTER_MOVE_IN_STRUCTURE - structureId: " . $event->structureId);
});
@ostark
Copy link
Author

ostark commented Sep 11, 2017

Example headers for happylager.dev/work

X-Cache-Tag:id:234
X-Cache-Tag:id:232
X-Cache-Tag:id:133
X-Cache-Tag:sectionId:3
X-Cache-Tag:id:130
X-Cache-Tag:id:146
X-Cache-Tag:id:147
X-Cache-Tag:id:148
X-Cache-Tag:sectionId:7
X-Cache-Tag:id:81

Example error_log

[11-Sep-2017 10:10:44 UTC] EVENT_AFTER_SAVE_ELEMENT - id: 257 .. type: craft\elements\Entry
[11-Sep-2017 10:11:49 UTC] EVENT_AFTER_SAVE_ELEMENT - id: 123 .. type: craft\elements\Asset
[11-Sep-2017 10:12:21 UTC] EVENT_AFTER_SAVE_ELEMENT - id: 232 .. type: craft\elements\GlobalSet
[11-Sep-2017 10:23:42 UTC] EVENT_AFTER_SAVE_ELEMENT - id: 259 .. type: craft\elements\MatrixBlock
[11-Sep-2017 10:23:42 UTC] EVENT_AFTER_SAVE_ELEMENT - id: 257 .. type: craft\elements\Entry
[11-Sep-2017 10:42:04 UTC] EVENT_AFTER_MOVE_IN_STRUCTURE  - structureId: 1
[11-Sep-2017 10:42:04 UTC] EVENT_AFTER_MOVE_ELEMENT - structureId: 1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment