Joostina CMS / CMF v2.* API
  • Docs
  • Package
  • Class
  • Tree
  • Todo
Overview

Packages

  • Components
    • Acls
      • Models
        • Admin
        • Site
    • BlogCategory
      • Models
        • Admin
        • Site
    • Blogs
      • Controllers
        • Admin
        • Site
      • Helpers
      • Models
        • Admin
        • Site
    • Coder
      • Controllers
        • Admin
      • Models
        • Admin
    • Comments
      • Controllers
        • Admin
        • Site
      • Helpers
      • Models
        • Admin
        • Site
    • CommentsCounter
      • Models
        • Admin
        • Site
    • Mainpage
      • Controllers
        • Site
    • News
      • Controllers
        • Admin
        • Site
      • Helpers
      • Models
        • Admin
        • Site
    • Pages
      • Controllers
        • Admin
        • Site
      • Models
        • Site
    • Search
      • Controllers
        • Site
    • Site
      • Controllers
        • Admin
        • Site
    • Sitemap
      • Controllers
        • Admin
        • Site
      • Models
        • Admin
        • Site
    • Test
      • Controllers
        • Site
    • Torrents
      • Controllers
        • Site
    • Users
      • Controllers
        • Admin
        • Site
      • Models
        • Admin
        • Site
  • Compression
  • Core
    • Libraries
      • Arhive
      • Array
      • Attached
      • Autoadmin
      • Autoloader
      • Benchmark
      • Breadcrumbs
      • Cache
      • Config
      • Cookie
      • Csrf
      • Database
        • Drivers
          • Interfaces
      • Datetime
      • Debug
      • Editor
      • Events
      • File
      • Filter
      • Flashmessage
      • Folder
      • Hit
      • Html
      • Image
      • Inflector
      • Inputfilter
      • Libraries
      • Mail
      • Module
      • Nestedset
      • Pager
      • Pages
      • Params
      • Randomizer
      • Request
      • RobotLoader
      • Route
      • Security
      • Session
      • Static
      • String
      • Text
      • Trash
      • Validate
  • Email
  • Extra
    • Libraries
      • Basket
  • Joostina
    • Controller
    • Core
    • Document
  • JSMin
  • Libraries
    • Extra
      • Basket
        • Models
          • Site
  • None
  • Plugins
    • Autoadmin
    • Editor
    • Sitemap
  • SimpleMail
  • Vendors
    • Libraries
      • Email

Classes

  • helperAcl
  • joosAdminToolbarButtons
  • joosAdminView
  • joosAdminViewToolbarEdit
  • joosAdminViewToolbarListing
  • joosAutoadminHTML
  • joosTemplater
  • joosValidateHelper
  • modelAdminCoder_Faker
  • moduleActions
  • moduleActionsLogin
  • moduleActionsMenu
  • moduleActionsNews
  • moduleActionsTest
  • Route
  • rulesValidation
  • TreeBuilder

Interfaces

  • joosAutoadminPluginsEdit
  • joosAutoadminPluginsTable

Exceptions

  • joosAutoadminClassPlugionNotFoundException
  • joosAutoadminFilePluginNotFoundException
  • joosAutoloaderClassNotFoundException
  • joosAutoloaderFileNotFoundException
  • joosAutoloaderOnStartFileNotFoundException
  • joosCacheException
  • joosCoreException
  • joosDatabaseException
  • joosException
  • joosFileLibrariesException
  • joosFolderLibrariesException
  • joosImageLibrariesException
  • joosModulesException
  • joosSimpleMailException
  • joosUploadLibrariesException
  • joosUserException
  • JSMinException

Functions

  • navigation_ul_li_recurse
  • quoted_printable_encode
  1: <?php defined('_JOOS_CORE') or exit();
  2: 
  3: /**
  4:  * joosModule - Общий класс работы с модулями ( на фронте )
  5:  *
  6:  * @version    2.0
  7:  * @package    Core\Libraries
  8:  * @subpackage Module
  9:  * @category   Libraries
 10:  * @category   joosModule
 11:  * @author     Joostina Team <info@joostina.ru>
 12:  * @copyright  (C) 2007-2012 Joostina Team
 13:  * @license    MIT License http://www.opensource.org/licenses/mit-license.php
 14:  * Информация об авторах и лицензиях стороннего кода в составе Joostina CMS: docs/copyrights
 15:  *
 16:  * */
 17: class joosModule
 18: {
 19:     /**
 20:      * Весь конфиг modules.php
 21:      */
 22:     private static $data = array();
 23: 
 24:     /**
 25:      * Конфиг, пересортированный по ключу "position"
 26:      */
 27:     private static $modules_by_positions = array();
 28: 
 29:     /**
 30:      * Конфиг, пересортированный по ключу "route"
 31:      */
 32:     private static $modules_by_routes = array();
 33: 
 34:     /**
 35:      * Результаты выполнения текущего метода контроллера
 36:      */
 37:     private static $controller_data = array();
 38: 
 39:     /**
 40:      * Инициализация модулей. На этом этапе пробегаемся по массиву параметров
 41:      */
 42:     public static function init()
 43:     {
 44:         if (empty(self::$data)) {
 45:             self::$data = require_once JPATH_APP_CONFIG . DS . 'modules.php';
 46: 
 47:             foreach (self::$data as $name => $m) {
 48:                 $modules_by_name[$name] = $m;
 49:                 foreach ($m as $m_r) {
 50:                     self::$modules_by_routes[$m_r['route']][$name] = $m_r;
 51:                     self::$modules_by_positions[$m_r['position']][$name][] = $m_r;
 52:                 }
 53:             }
 54:         }
 55:     }
 56: 
 57:     /**
 58:      * Передача данных выполнения метода текущего контроллера
 59:      * Данные передаются из joosController::views()
 60:      * @var $controller_data array
 61:      */
 62:     public static function set_controller_data($controller_data)
 63:     {
 64:         self::$controller_data = $controller_data;
 65:     }
 66: 
 67:     /**
 68:      * Получение данных выполнения метода текущего контроллера
 69:      * @return $controller_data array
 70:      */
 71:     public static function get_controller_data()
 72:     {
 73:         return self::$controller_data;
 74:     }
 75: 
 76:     /**
 77:      * Получение всего содержимого конфига modules.php
 78:      * @return array
 79:      */
 80:     public static function get_data()
 81:     {
 82:         return self::$data;
 83:     }
 84: 
 85:     /**
 86:      * Запуск подключения модулей по заданной позиции
 87:      * Учитывается текущее правило роутинга
 88:      * если $name == '__all' - модуль выводится на всех страницах
 89:      * @var name str Имя позиции
 90:      */
 91:     public static function load_by_position($name)
 92:     {
 93:         $modules = '';
 94: 
 95:         //@todo Рефакторинг
 96:         if (isset(self::$modules_by_positions[$name])) {
 97:             foreach (self::$modules_by_positions[$name] as $name => $modules_array) {
 98: 
 99:                 foreach ($modules_array as $params) {
100: 
101:                     $params['action'] = isset($params['action']) ? $params['action'] : 'default_action';
102: 
103:                     if (joosController::$activroute == $params['route'] || $params['route'] == '__all') {
104:                         $params['params'] = isset($params['params']) ? $params['params'] : array();
105:                         $modules .= self::execute($name, $params['action'], $params['params']);
106:                     } elseif ($params['route'] == '__exept') {
107:                         if (!in_array(joosController::$activroute, $params['__exept_routes'])) {
108:                             $params['params'] = isset($params['params']) ? $params['params'] : array();
109:                             $modules .= self::execute($name, $params['action'], $params['params']);
110:                         }
111:                     }
112:                 }
113:             }
114:         }
115: 
116:         return $modules;
117:     }
118: 
119:     /**
120:      * Получение массива модулей для заданного правила роутинга
121:      * @var route_name str Правило роутинга
122:      * @return array Массив массивов модулей, где ключом является имя позиции, в которой выводится модуль
123:      */
124:     public static function get_array_by_route($route_name)
125:     {
126:         $modules = array();
127: 
128:         //@todo Рефакторинг
129: 
130:         if (isset(self::$modules_by_routes[$route_name])) {
131:             foreach (self::$modules_by_routes[$route_name] as $name => $params) {
132:                 $params['action'] = isset($params['action']) ? $params['action'] : 'default_action';
133:                 $params['params'] = isset($params['params']) ? $params['params'] : array();
134:                 $modules[$params['position']][] = self::execute($name, $params['action'], $params['params']);
135:             }
136:         }
137: 
138:         //для модулей, которые должны выводиться на всех страницах
139:         foreach (self::$modules_by_routes['__all'] as $name => $params) {
140:             $params['action'] = isset($params['action']) ? $params['action'] : 'default_action';
141:             $params['params'] = isset($params['params']) ? $params['params'] : array();
142:             $modules[$params['position']][] = self::execute($name, $params['action'], $params['params']);
143:         }
144: 
145:         //для модулей, которые должны выводиться на всех страницах, кроме заданных
146:         foreach (self::$modules_by_routes['__exept'] as $name => $params) {
147:             if (!in_array($route_name, $params['__exept_routes'])) {
148:                 $params['action'] = isset($params['action']) ? $params['action'] : 'default_action';
149:                 $params['params'] = isset($params['params']) ? $params['params'] : array();
150:                 $modules[$params['position']][] = self::execute($name, $params['action'], $params['params']);
151:             }
152: 
153:         }
154: 
155:         return $modules;
156:     }
157: 
158:     /**
159:      * Исполнение модуля и его метода с указанными параметрами
160:      * @var name str Имя модуля
161:      * @var action str исполняемый метод модуля
162:      * @var $config array Массив параметров
163:      */
164:     public static function execute($name, $action = 'default_action', $config = array())
165:     {
166:         $file = JPATH_BASE . DS . 'app' . DS . 'modules' . DS . $name . DS . $name . '.php';
167:         require_once($file);
168: 
169:         $class = 'moduleActions' . ucfirst($name);
170:         if (!method_exists($class, $action)) {
171:             throw new joosModulesException("Метод $action в модуле $name не обнаружен");
172:         }
173: 
174:         //устанавливаем параметры вызова
175:         $class::$config = $config;
176:         $class::$task = $action;
177: 
178:         //вызов метода и его оберток
179:         if (method_exists($class, 'action_before')) {
180:             call_user_func_array($class . '::action_before', array());
181:         }
182:         $results = call_user_func($class . '::' . $action);
183:         if (method_exists($class, 'action_after')) {
184:             call_user_func_array($class . '::action_after', array($results));
185:         }
186: 
187:         moduleActions::set_current_module_action_results($results);
188: 
189:         //вывод результатов
190:         if (is_array($results)) {
191:             return self::as_html($results, $name, $action, $config);
192:         } elseif (is_string($results)) {
193:             return $results;
194:         }
195:     }
196: 
197:     /**
198:      * Вывод шаблона модуля в зависимости от того, что нагенерил класс модуля
199:      */
200:     private static function as_html($params, $module_name, $method, $config)
201:     {
202:         //сначала смотрим в настройки конфига
203:         $template = isset($config['template']) ? $config['template'] : 'default';
204:         //но то, что пришло по результатм выполнения метода считаем более приоритетным
205:         $template = isset($params['template']) ? $params['template'] : $template;
206: 
207:         $view = isset($params['view']) ? $params['view'] : $method;
208: 
209:         extract($params, EXTR_OVERWRITE);
210: 
211:         $viewfile = JPATH_BASE . DS . 'app' . DS . 'modules' . DS . $module_name . DS . 'views' . DS . $view . DS . $template . '.php';
212: 
213:         $template_engine = joosTemplater::instance(isset($params['template_engine']) ? $params['template_engine'] : 'default');
214: 
215:         $output = '<div class="module module-' . $module_name . '">';
216:         $output .= $template_engine->render_file($viewfile, $params);
217:         $output .= '</div>';
218: 
219:         return $output;
220:     }
221: }
222: 
223: /**
224:  * Родительский класс-заглушка для модулей
225:  */
226: class moduleActions
227: {
228:     //параметры вызова модуля
229:     public static $config = array();
230: 
231:     //вызываемый метод модуля
232:     public static $task = '';
233: 
234:     //сохраняем результаты выполнения методов (для благодарных потомков)
235:     private static $current_module_action_results;
236: 
237:     public static function set_current_module_action_results($results)
238:     {
239:         self::$current_module_action_results = $results;
240:     }
241: 
242:     public static function get_current_module_action_results()
243:     {
244:         return self::$current_module_action_results;
245:     }
246: 
247: }
248: 
249: /**
250:  * Обработка исключений работы с модулями
251:  */
252: class joosModulesException extends joosException
253: {
254: }
255: 
Joostina CMS / CMF v2.* API API documentation generated by ApiGen 2.6.1 – Template adapted by @olvlv and Joostina Team