You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.1 KiB

  1. <?php
  2. /**
  3. * Рутовый класс для любого действия.
  4. * Описывает основной функционал для работы с классами действий.
  5. * $Id$
  6. */
  7. abstract class Action
  8. {
  9. public $template; //шаблон действия
  10. public $template_dir = '.'; //путь к шаблону действия
  11. public $class; //имя дочернего класса
  12. protected $templater; //шаблонизатор
  13. public function __construct()
  14. {
  15. $this->class = get_class($this);
  16. $this->template = substr($this->class, 0, -strlen(ACTION_POSTFIX));
  17. if (CACHE_ENABLE && ($cache_name = $this->getCacheKey()) !== false) {
  18. $cache = new Cache($this->class.'_'.$cache_name, $this->getCacheTime());
  19. if ($cache->isCached()) {
  20. $this->restore($cache->load());
  21. } else {
  22. $this->init();
  23. $cache->save($this->store());
  24. }
  25. } else {
  26. $this->init();
  27. }
  28. }
  29. /**
  30. * Выдает результат действия.
  31. *
  32. * @return string
  33. */
  34. public function display()
  35. {
  36. $this->templater = Load::templater(ACTION_TPL_PATH.'/'.$this->template_dir);
  37. $this->prepare();
  38. return $this->templater->fetch($this->template.'.tpl');
  39. }
  40. /**
  41. * Инициализация данных действия.
  42. * Тут должна быть ВСЯ работа с установкой данных,
  43. * дабы потом они нормально закешировались.
  44. * Этот метод НЕ исполняется при срабатывании кеша.
  45. *
  46. */
  47. abstract protected function init();
  48. /**
  49. * Подготовка данных для шаблона.
  50. * Этот метод выполняется ВСЕГДА
  51. */
  52. protected function prepare() {}
  53. /**
  54. * Возвращает имя файла для кеширования
  55. * Переопределяется в доченрих классах.
  56. *
  57. * @return false/string - имя файла кеша либо false если кеш запрещен
  58. */
  59. protected function getCacheKey()
  60. {
  61. return false;
  62. }
  63. /**
  64. * Возвращает время жизни кеша в секундах
  65. * При отрицательном значении кеш вечен.
  66. * Переопределяется в доченрих классах.
  67. *
  68. * @return false/integer - время жизни кеша либо false если кеш запрещен
  69. */
  70. protected function getCacheTime()
  71. {
  72. return 0;
  73. }
  74. /**
  75. * Выдает строку для кеширования.
  76. */
  77. protected function store()
  78. {
  79. return serialize(get_object_vars($this));
  80. }
  81. /**
  82. * Разбирает строку кеша, созданную методом store
  83. */
  84. protected function restore($data)
  85. {
  86. foreach(unserialize($data) as $key => $val) {
  87. $this->$key = $val;
  88. }
  89. }
  90. }
  91. ?>