dimti
2 years ago
commit
3a439538ca
7 changed files with 240 additions and 0 deletions
-
1.gitignore
-
96Plugin.php
-
90README.md
-
26classes/observer/BaseObserver.php
-
6classes/observer/Observer.php
-
20composer.json
-
1updates/version.yaml
@ -0,0 +1 @@ |
|||
/.idea |
@ -0,0 +1,96 @@ |
|||
<?php namespace Wpstudio\Helpers; |
|||
|
|||
use Backend; |
|||
use System\Classes\PluginBase; |
|||
|
|||
/** |
|||
* helpers Plugin Information File |
|||
*/ |
|||
class Plugin extends PluginBase |
|||
{ |
|||
/** |
|||
* Returns information about this plugin. |
|||
* |
|||
* @return array |
|||
*/ |
|||
public function pluginDetails() |
|||
{ |
|||
return [ |
|||
'name' => 'helpers', |
|||
'description' => 'No description provided yet...', |
|||
'author' => 'wpstudio', |
|||
'icon' => 'icon-leaf' |
|||
]; |
|||
} |
|||
|
|||
/** |
|||
* Register method, called when the plugin is first registered. |
|||
* |
|||
* @return void |
|||
*/ |
|||
public function register() |
|||
{ |
|||
|
|||
} |
|||
|
|||
/** |
|||
* Boot method, called right before the request route. |
|||
* |
|||
* @return array |
|||
*/ |
|||
public function boot() |
|||
{ |
|||
|
|||
} |
|||
|
|||
/** |
|||
* Registers any front-end components implemented in this plugin. |
|||
* |
|||
* @return array |
|||
*/ |
|||
public function registerComponents() |
|||
{ |
|||
return []; // Remove this line to activate
|
|||
|
|||
return [ |
|||
'Wpstudio\Helpers\Components\MyComponent' => 'myComponent', |
|||
]; |
|||
} |
|||
|
|||
/** |
|||
* Registers any back-end permissions used by this plugin. |
|||
* |
|||
* @return array |
|||
*/ |
|||
public function registerPermissions() |
|||
{ |
|||
return []; // Remove this line to activate
|
|||
|
|||
return [ |
|||
'wpstudio.helpers.some_permission' => [ |
|||
'tab' => 'helpers', |
|||
'label' => 'Some permission' |
|||
], |
|||
]; |
|||
} |
|||
|
|||
/** |
|||
* Registers back-end navigation items for this plugin. |
|||
* |
|||
* @return array |
|||
*/ |
|||
public function registerNavigation() |
|||
{ |
|||
return []; // Remove this line to activate
|
|||
|
|||
return [ |
|||
'helpers' => [ |
|||
'label' => 'helpers', |
|||
'url' => Backend::url('wpstudio/helpers/mycontroller'), |
|||
'icon' => 'icon-leaf', |
|||
'permissions' => ['wpstudio.helpers.*'], |
|||
'order' => 500, |
|||
], |
|||
]; |
|||
} |
|||
} |
@ -0,0 +1,90 @@ |
|||
# Observers |
|||
|
|||
Observers maybe used for creating and clearing cache purposes |
|||
|
|||
## Example observer use |
|||
|
|||
Create you own class with observer: |
|||
|
|||
```php |
|||
<?php namespace Dimti\Mirsporta\Classes\Observers; |
|||
|
|||
use Dimti\Mirsporta\Models; |
|||
use Wpstudio\Helpers\Classes\Observer\BaseObserver; |
|||
|
|||
class TagObserver extends BaseObserver |
|||
{ |
|||
public static function getClass(): string |
|||
{ |
|||
return Models\Tag::class; |
|||
} |
|||
} |
|||
``` |
|||
|
|||
Use in models: |
|||
|
|||
```php |
|||
<?php namespace Dimti\Mirsporta\Models; |
|||
|
|||
use Dimti\Mirsporta\Classes\Observers; |
|||
|
|||
class Tag extends Model |
|||
{ |
|||
//... |
|||
|
|||
public function afterSave() |
|||
{ |
|||
Observers\TagObserver::clearCache(); |
|||
} |
|||
|
|||
//... |
|||
} |
|||
``` |
|||
|
|||
And in your code for caching data based on this model/observer: |
|||
|
|||
```php |
|||
use Dimti\Mirsporta\Classes\Observers; |
|||
//... |
|||
|
|||
$cacheTags = Observers\TagObserver::getCacheTag(); |
|||
|
|||
$cacheKey = CacheManager::formatCacheKey([__CLASS__, __METHOD__, $siteId]); |
|||
|
|||
\Cache::tags($cacheTags)->rememberForever($cacheKey, fn() => |
|||
Models\Tag::all() |
|||
)); |
|||
``` |
|||
|
|||
* CacheManager::formatCacheKey - that is simple helper for concatenate array elements to string |
|||
|
|||
## Clearing cache from admin dashboard widget |
|||
|
|||
### Template |
|||
|
|||
```html |
|||
<input |
|||
type="button" |
|||
class='btn btn-primary' |
|||
value="Clear tag model cache" |
|||
data-request="<?= $this->getEventHandler('onClearTagCache') ?>" |
|||
data-request-success="$.oc.flashMsg({text: 'Cache of tag model is clearing', 'class': 'success', 'interval': 5}); return false;" |
|||
/> |
|||
``` |
|||
|
|||
### Controller widget action |
|||
|
|||
```php |
|||
use Dimti\Mirsporta\Classes\Observers; |
|||
|
|||
//... |
|||
|
|||
public function onClearTagCache() |
|||
{ |
|||
Observers\TagObserver::clearCache(); |
|||
|
|||
return ['status' => 1]; |
|||
} |
|||
|
|||
//... |
|||
``` |
@ -0,0 +1,26 @@ |
|||
<?php namespace Wpstudio\Helpers\Classes\Observer; |
|||
|
|||
abstract class BaseObserver implements Observer |
|||
{ |
|||
protected static string $class; |
|||
|
|||
/** |
|||
* Очистка кэша |
|||
* @return void |
|||
*/ |
|||
public static function clearCache(): void |
|||
{ |
|||
$tags = [self::getCacheTag()]; |
|||
|
|||
\Cache::tags($tags)->flush(); |
|||
} |
|||
|
|||
/** |
|||
* Получение тэка кеша |
|||
* @return string |
|||
*/ |
|||
public static function getCacheTag(): string |
|||
{ |
|||
return static::getClass(); |
|||
} |
|||
} |
@ -0,0 +1,6 @@ |
|||
<?php namespace Wpstudio\Helpers\Classes\Observer; |
|||
|
|||
interface Observer |
|||
{ |
|||
public static function getClass(): string; |
|||
} |
@ -0,0 +1,20 @@ |
|||
{ |
|||
"name": "wpstudio/helpers-plugin", |
|||
"type": "october-plugin", |
|||
"description": "Some extends models & controllers", |
|||
"require": { |
|||
"composer/installers": "~1.0" |
|||
}, |
|||
"keywords": [ |
|||
"models", |
|||
"api", |
|||
"observer" |
|||
], |
|||
"license": "MIT", |
|||
"authors": [ |
|||
{ |
|||
"name": "WP Studio Team", |
|||
"email": "info@wpstudio.ru" |
|||
} |
|||
] |
|||
} |
@ -0,0 +1 @@ |
|||
1.0.1: First version of helpers |
Write
Preview
Loading…
Cancel
Save
Reference in new issue