-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.php
82 lines (67 loc) · 2.21 KB
/
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
include_once __DIR__ . '/helpers.php';
$flush = function() {
kirby()->cache('lukaskleinschmidt.resolve')->flush();
};
Kirby::plugin('lukaskleinschmidt/resolve', [
'options' => [
'cache' => true,
],
'hooks' => [
'page.changeNum:before' => $flush,
'page.changeSlug:before' => $flush,
'page.changeStatus:before' => $flush,
'route:after' => function ($route, $path, $method, $result) {
if (option('lukaskleinschmidt.resolve.cache') === false) {
return $result;
}
if (is_a($result, 'Kirby\Cms\Page') === false) {
return $result;
}
$kirby = kirby();
$cache = $kirby->cache('lukaskleinschmidt.resolve');
$proxy = $cache->get($path, false);
if ($proxy !== false) {
$kirby->setCurrentTranslation($proxy['lang']);
$kirby->setCurrentLanguage($proxy['lang']);
}
if ($proxy === false && $result->isResolvable()) {
$cache->set($path, [
'dir' => $result->diruri(),
'lang' => $kirby->languageCode(),
]);
}
return $result;
},
'route:before' => function ($route, $path, $method) {
if (option('lukaskleinschmidt.resolve.cache') === false) {
return;
}
$kirby = kirby();
$cache = $kirby->cache('lukaskleinschmidt.resolve');
$proxy = $cache->get($path, false);
if ($proxy === false) {
return;
}
if ($page = resolveDir($proxy['dir'])) {
return $kirby->extend([
'pages' => [$path => $page]
]);
}
$cache->remove($path);
},
],
'pageMethods' => [
'isResolvable' => function () {
$path = $this->kirby()->path();
$id = $this->id();
if ($path && $path !== $id) {
return true;
}
if (substr_count($id, '/')) {
return true;
}
return false;
}
]
]);