Обновление кэша записей (cache_db) при расширении собственного класса
Была у меня задача (может, кому-то поможет по признакам схожести): расширить стандартный класс xPDOSimpleObject шаблоном, который потом нужно расширить другими классами. Естественно, с панелью в админке в виде грида (Ext JS Grid). Так вот столкнулся с тем, что когда активен кэш БД (cache_bd), при создании или удалении дочерних классов (в которых не прописаны таблицы БД — object class=«myChildClass» extends=«myClass») от моего шаблонно-родительского (в котором указана таблица БД — object class=«myClass» table=«my_records» extends=«xPDOSimpleObject»), ничего в таблице не меняется, пока не скинуть системный кэш. Ковыряя несколько дней тему кэширования пришел, на мой взгляд, к весьма простому способу это дело поправить.
Так как все это происходит через процессоры, туда нам и нужно. Нужно поправить, собственно, два процессора — создания и удаления (например, create.class.php и remove.class.php для тех, кто использует modExtra, например, от Василия), а точнее, добавить очистку кэша БД для данного модуля (данной модели), или вообще очистку для кэша БД:
Процессор создания (create.class.php), добавляем два метода:
процессор удаления (remove.class.php), добавляем один метод и поправляем метод process():
Всем хороших выходных ;)
3
Так как все это происходит через процессоры, туда нам и нужно. Нужно поправить, собственно, два процессора — создания и удаления (например, create.class.php и remove.class.php для тех, кто использует modExtra, например, от Василия), а точнее, добавить очистку кэша БД для данного модуля (данной модели), или вообще очистку для кэша БД:
Процессор создания (create.class.php), добавляем два метода:
public function cleanup()
{
$this->clearCache();
return parent::cleanup();
}
public function clearCache()
{
$this->modx->cacheManager->refresh([
'db' => [
'objects' => 'myClass' // Это можно не указывать, тогда почистим весь кэш БД
],
]);
return true;
},процессор удаления (remove.class.php), добавляем один метод и поправляем метод process():
public function process()
{
...
$this->clearCache();
return $this->success();
}
public function clearCache()
{
$this->modx->cacheManager->refresh([
'db' => [
'objects' => 'myClass'
],
]);
return true;
}Всем хороших выходных ;)
Комментарии: 3