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.

54 lines
1.6 KiB

  1. <?php
  2. /**
  3. * Родительский класс для всех декораторов. Содержит основной функционал.
  4. *
  5. */
  6. abstract class Decorator
  7. {
  8. protected $layout = false;
  9. protected $action = false;
  10. protected $action_name = 'Action';
  11. protected $templater = false;
  12. function __construct()
  13. {
  14. if (!$this->layout) {
  15. throw new MJException('$layout not set in '.get_class($this));
  16. }
  17. $this->templater = Load::templater();
  18. }
  19. /**
  20. * Основной метод вывода
  21. *
  22. */
  23. function display(Action $action)
  24. {
  25. $this->action = $action;
  26. $this->templater->assign($this->action_name, $this->action->display(), $this->layout);
  27. $this->exec();
  28. $this->templater->setPath(WRAPPERS_TPL_PATH);
  29. return $this->templater->fetch($this->layout);
  30. }
  31. /**
  32. * Добавить данные на вывод
  33. *
  34. * @param string $var_name - имя переменной, в которую будет осуществлен вывод
  35. * @param Action $action - действие
  36. * @param Decorator $decorator - декоратор, в котором должно выполнится действие.
  37. */
  38. function addOutput($var_name, Action $action, Decorator $decorator = null)
  39. {
  40. $this->templater->assign($var_name, $decorator ? $decorator->display($action) : $action->display(), $this->layout);
  41. }
  42. /**
  43. * Основной метод для дочерних декораторов
  44. *
  45. */
  46. abstract function exec();
  47. }
  48. ?>