Exemple #1
0
 /**
  * Вызов задач повешанных на событие
  *
  * @param string $events_name название обытия
  */
 public static function fire_events($events_name)
 {
     // задач на собыьтие не создано
     if (!isset(self::$events[$events_name])) {
         return false;
     }
     // задачи на событие есть - выполняем их поочередно
     foreach (self::$events[$events_name] as $event) {
         if (is_callable($event)) {
             JDEBUG ? joosDebug::add(sprintf('Запускаем обработку события %s', $events_name)) : null;
             call_user_func_array($event, func_get_args());
         }
     }
 }
Exemple #2
0
 /**
  * Автоматическое определение и запуск метода действия
  * @todo добавить сюда события events ДО, ПОСЛЕ и ВМЕСТО выполнения задачи контроллера
  */
 public function run()
 {
     $router = $this->router = joosCore::instance()->get_router();
     $controller_class_name = 'actions' . ucfirst($router->param('controller'));
     $controller = new $controller_class_name();
     $action = $router->param('action');
     JDEBUG ? joosDebug::add($controller_class_name . '->' . $action) : null;
     if (method_exists($controller_class_name, $action)) {
         $results = $controller->{$action}();
         $page_body = $this->views($results);
         // главное содержимое - стек вывода компонента - mainbody
         joosDocument::set_body($page_body);
         return $this;
     } else {
         //  в контроллере нет запрашиваемого метода
         joosPages::page404('Метод не найден');
     }
 }
Exemple #3
0
 public static function dispatch_ajax()
 {
     $id = joosRequest::int('id', 0);
     $page = joosRequest::int('page', false, $_GET);
     $page = $page ? $page : 0;
     $id = $id ? $id : $page;
     $task = joosRequest::param('task', 'index');
     $option = joosRequest::param('option');
     $class = 'actionsAjaxAdmin' . ucfirst($option);
     JDEBUG ? joosDebug::add($class . '::' . $task) : null;
     // в контроллере можно прописать общие действия необходимые при любых действиях контроллера - они будут вызваны первыми, например подклбчение можделей, скриптов и т.д.
     method_exists($class, 'action_before') ? call_user_func_array($class . '::action_before', array()) : null;
     $events_name = sprintf('ajax.controller.admin.*');
     joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name, $class, $task) : null;
     $events_name = sprintf('ajax.controller.admin.%s.*', $class);
     joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name, $task) : null;
     $events_name = sprintf('ajax.controller.admin.%s.%s', $class, $task);
     joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name) : null;
     if (method_exists($class, $task)) {
         $result = call_user_func_array($class . '::' . $task, array($option, $id, $page, $task));
     } else {
         $result = call_user_func_array($class . '::index', array($option, $id, $page, $task));
     }
     // контроллер может содержать метод вызываемый после окончания работы основного контроллера, но тоже вызовется
     method_exists($class, 'action_after') ? call_user_func_array($class . '::action_after', array($task, $result)) : null;
     if (is_array($result)) {
         echo json_encode($result);
     } elseif (is_string($result)) {
         echo $result;
     }
 }