public static function dispatch() { $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', 'site'); $class = 'actionsAdmin' . joosInflector::camelize($option); self::$active_actions_class = $class; self::$option = $option; self::$task = $task; // подключаем js код библиотеки joosDocument::instance()->add_js_file(JPATH_SITE . '/core/libraries/autoadmin/media/js/autoadmin.js'); !JDEBUG ?: joosDebug::add('joosAutoadmin::dispatch() - ' . $class . '::' . $task); // в контроллере можно прописать общие действия необходимые при любых действиях контроллера - они будут вызваны первыми, например подклбчение можделей, скриптов и т.д. method_exists($class, 'action_before') ? call_user_func_array($class . '::action_before', array(self::$task)) : null; $events_name = sprintf('controller.admin.*'); joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name, $class, $task) : null; $events_name = sprintf('controller.admin.%s.*', $class); joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name, $task) : null; $events_name = sprintf('controller.admin.%s.%s', $class, $task); joosEvents::has_events($events_name) ? joosEvents::fire_events($events_name) : null; if (method_exists($class, $task)) { $results = call_user_func_array($class . '::' . $task, array($option, $id, $page, $task)); method_exists($class, 'action_after') ? call_user_func_array($class . '::action_after', array(self::$task)) : null; } elseif (method_exists($class, 'index')) { $results = call_user_func_array($class . '::index', array($option, $id, $page, $task)); method_exists($class, 'action_after') ? call_user_func_array($class . '::action_after', array(self::$task)) : null; } else { throw new joosException('Контроллер :controller, либо требуемая задача :task не найдены.', array(':controller' => $class, ':task' => $task)); } if (is_array($results)) { self::views($results, self::$option, self::$task); } elseif (is_string($results)) { echo $results; } // если контроллер содержит метод вызываемый после окончания работы основного контроллера, то он тоже вызовется method_exists($class, 'action_after') ? call_user_func_array($class . '::action_after', array()) : null; }