Esempio n. 1
0
 function getHTML($templ_name = 'table')
 {
     $templ_name = $templ_name . '_' . $this->style;
     if (file_exists(MODUL_DIR . '/mpanel/template/' . $templ_name . '.tpl')) {
         include MODUL_DIR . '/mpanel/template/' . $templ_name . '.tpl';
         // Устанавливаем настройки по умолчанию
         $this->prefix = md5(system::url(0) . system::url(1) . (system::url(2) != '' ? system::url(2) : ''));
         if (!isset($_SESSION['table_' . $this->prefix])) {
             $_SESSION['table_' . $this->prefix]['max_count'] = 20;
             $_SESSION['table_' . $this->prefix]['page_num'] = 1;
             $_SESSION['table_' . $this->prefix]['table_search'] = '';
             $_SESSION['table_' . $this->prefix]['page_num_temp'] = 1;
         }
         // Смотрим пришедшие данные из POST
         if (!isset($_POST['filter'])) {
             // Сортировка по столбцу
             if (isset($_POST['field']) && isset($_POST['parram'])) {
                 $_SESSION['table_' . $this->prefix]['order_field'] = system::POST('field');
                 $_SESSION['table_' . $this->prefix]['order_parram'] = system::POST('parram');
             }
             // Количество строк в таблице
             if (isset($_POST['max_count'])) {
                 $_SESSION['table_' . $this->prefix]['max_count'] = $_POST['max_count'];
                 $_SESSION['table_' . $this->prefix]['page_num'] = 1;
             }
             // Выбор нужной страницы
             if (isset($_POST['page_num'])) {
                 $_SESSION['table_' . $this->prefix]['page_num'] = $_POST['page_num'];
             }
             // Поиск по таблице
             if (isset($_POST['table_search'])) {
                 $_SESSION['table_' . $this->prefix]['page_num_temp'] = $_SESSION['table_' . $this->prefix]['page_num'];
                 $_SESSION['table_' . $this->prefix]['page_num'] = 1;
                 if ($_POST['table_search'] == '') {
                     $_SESSION['table_' . $this->prefix]['page_num'] = $_SESSION['table_' . $this->prefix]['page_num_temp'];
                 }
                 $_SESSION['table_' . $this->prefix]['table_search'] = $_POST['table_search'];
             }
             // Очистка результатов поиска
             if (isset($_POST['clear_search'])) {
                 $_SESSION['table_' . $this->prefix]['page_num'] = $_SESSION['table_' . $this->prefix]['page_num_temp'];
                 $_SESSION['table_' . $this->prefix]['table_search'] = '';
                 if ($this->isSelection) {
                     $this->filter->clear();
                 }
                 //$_SESSION['table_'.$this->prefix]['max_count'] = 3;
             }
             // Нажали ссылку "обычный поиск" (скрыть / показать фильтры)
             if ($this->isSelection && isset($_POST['showfilter'])) {
                 if ($_POST['showfilter'] == 0) {
                     $_SESSION['table_' . $this->prefix]['filters'] = '';
                 }
                 $_SESSION['table_' . $this->prefix]['showfilter'] = $_POST['showfilter'];
                 system::stop();
             }
         }
         // Сортировка по столбцу
         if ($this->isSelection && isset($_SESSION['table_' . $this->prefix]['order_field'])) {
             $this->select->orderBy($_SESSION['table_' . $this->prefix]['order_field'], $_SESSION['table_' . $this->prefix]['order_parram']);
         }
         $up_line = '';
         // Устанавливаем список полей для выборки
         if ($this->isSelection && !$this->select->fieldsIsDefined()) {
             /*
                             $class_name = $this->select->getObjectsClass();
                             if (!empty($class_name))
                             	$select = (ormClasses::get($class_name)->issetField('active')) ? 'active' : '';
                             else    */
             $select = 'active';
             while (list($key, $column) = each($this->columns)) {
                 $zpt = !empty($select) ? ', ' : '';
                 if (strpos($column['field'], ' ')) {
                     $vals = explode(' ', $column['field']);
                     while (list($k, $val) = each($vals)) {
                         $select .= $zpt . $val;
                     }
                 } else {
                     $select .= $zpt . $column['field'];
                 }
             }
             $this->select->fields($select);
         }
         // Вывод формы ПОИСКа и установка параметров
         if ($this->show_search) {
             if ($this->isSelection && !empty($_SESSION['table_' . $this->prefix]['table_search'])) {
                 $query = $_SESSION['table_' . $this->prefix]['table_search'];
                 $this->inSearch = true;
                 $where = array();
                 reset($this->columns);
                 while (list($key, $column) = each($this->columns)) {
                     if ($column['field'] != 'children' && $column['field'] != 'parent') {
                         if (strpos($column['field'], ' ')) {
                             $vals = explode(' ', $column['field']);
                             while (list($k, $val) = each($vals)) {
                                 $where[] = $this->select->val($val, 'LIKE', '%' . $query . '%');
                             }
                         } else {
                             $where[] = $this->select->val($column['field'], 'LIKE', '%' . $query . '%');
                         }
                     }
                 }
                 $this->select->where($this->select->logOr($where));
             }
             page::assign('table_search', $_SESSION['table_' . $this->prefix]['table_search']);
             $up_line .= page::parse($TEMPLATE['search']);
         }
         // +  +  +	Все что касается вывода ФИЛЬТРОВ  +	+	+	+	+	+	+	+
         if ($this->isSelection && !$this->disable_filters) {
             //$_SESSION['table_'.$this->prefix]['page_num'] = 1;
             if (!isset($_SESSION['table_' . $this->prefix]['showfilter'])) {
                 $_SESSION['table_' . $this->prefix]['showfilter'] = $this->filters;
             }
             // Определяем нужно или нет показывать список фильтров
             $show_filter = $this->filters;
             if ($_SESSION['table_' . $this->prefix]['showfilter']) {
                 $show_filter = true;
             }
             page::assign('mores', $show_filter ? 'mores' : '');
             $this->filter->setFilters();
             page::assign('filters', $this->filter->getHTML());
             // Кнопка "Показать / спрятать фильтры"
             if ($this->show_search && $this->filter->getCount() > 0) {
                 if ($show_filter) {
                     page::assign('moresearch', 1);
                     page::assign('sh_text', lang::get('TABLE_SEARCH_MIN'));
                 } else {
                     page::assign('moresearch', 0);
                     page::assign('sh_text', lang::get('TABLE_SEARCH_MAX'));
                 }
                 page::fParse('filters_link', $TEMPLATE['filters_link']);
             } else {
                 page::assign('filters_link', '');
             }
             page::fParse('filters', $TEMPLATE['filters']);
             if ($show_filter && $this->filter->getCount() > 0 && !$this->show_search) {
                 page::assign('filters_link', '');
                 $up_line .= page::parse($TEMPLATE['without_search']);
             }
         } else {
             page::assign('filters', '');
         }
         page::assign('up_line', $up_line);
         // Кнопка "версия для печати"
         if ($this->print) {
             $up_line .= page::parse($TEMPLATE['print_link']);
         }
         // Дополнительные параметры запросов
         $str_param = '';
         while (list($key, $param) = each($this->moreParam)) {
             $str_param .= '/' . $param;
         }
         page::assign('parram', $str_param);
         // Вывод сообщения "Таблица пустая"
         $count = $this->isSelection ? $this->select->getCount() : count($this->data);
         if ($count <= 0) {
             if ($this->inSearch || $this->isSelection && $this->filter->isActive()) {
                 $message = lang::get('TABLE_NOT_FOUND') . '<br /><span onClick="stopSearch()">' . lang::get('TABLE_NOT_FOUND2') . '</span>';
             } else {
                 $message = empty($this->empty_text) ? lang::get('TABLE_EMPTY') : $this->empty_text;
             }
             page::assign('message', $message);
             if (system::isAjax()) {
                 echo page::parse($TEMPLATE['empty_frame']);
                 system::stop();
             } else {
                 page::fParse('content', $TEMPLATE['empty_frame']);
                 return page::parse($TEMPLATE['main']);
             }
         }
         // Постраничная навигация
         $this->navigation(5, $TEMPLATE);
         // Вывод прав
         $this->rights($TEMPLATE);
         // Определяем модуль для права по умолчанию
         $pos = strpos($this->def_right, '.');
         if (!empty($pos)) {
             $module = substr($this->def_right, 0, $pos);
             $this->def_right = substr($this->def_right, $pos + 1, strlen($this->def_right));
         } else {
             $module = system::url(0);
         }
         if (user::issetRight($this->def_right, $module)) {
             $this->def_right = system::au() . '/' . $module . '/' . $this->def_right . '/';
         } else {
             $this->def_right = '';
         }
         $this->count = $this->isSelection ? $this->select->getObjectCount() : count($this->data);
         if ($this->count == 0 && $_SESSION['table_' . $this->prefix]['page_num'] != 1) {
             $_SESSION['table_' . $this->prefix]['page_num'] -= 1;
         }
         page::assign('table_parent_id', 0);
         // Вывод строчек
         if ($this->isSelection) {
             $this->selItems($TEMPLATE);
         } else {
             $this->masItems($TEMPLATE);
         }
         // Вывод столбцов
         $this->columns($TEMPLATE);
         // Текст сообщения об удалении элементов
         if (empty($this->del_title) || empty($this->del_text)) {
             $this->del_title = lang::get('TABLE_DROP_TITLE');
             $this->del_text = lang::get('TABLE_DROP_TEXT');
         }
         if (empty($this->del_title_multi) || empty($this->del_text_multi)) {
             $this->del_title_multi = lang::get('TABLE_DROP_TITLE_MULTI');
             $this->del_text_multi = lang::get('TABLE_DROP_TEXT_MULTI');
         }
         page::assign('del_title', $this->del_title);
         page::assign('del_text', $this->del_text);
         page::assign('del_title_multi', $this->del_title_multi);
         page::assign('del_text_multi', $this->del_text_multi);
         page::assign('select_checkbox', lang::get('TABLE_SEL_CHECKBOX'));
         // Версия для печати (НУЖНО ДОДЕЛАТЬ)
         if (system::getCurrentNavVal() == 'print') {
             echo page::parse($TEMPLATE['frame']);
             system::stop();
         }
         if (system::isAjax()) {
             echo page::parse($TEMPLATE['frame']);
             system::stop();
         } else {
             page::fParse('content', $TEMPLATE['frame']);
             return page::parse($TEMPLATE['main']);
         }
     }
 }
Esempio n. 2
0
 /**
  * @return HTML
  * @param int $section_id - ID страницы сайта, подразделы которой будут выводиться в списке
  * @param string $templ_name - Шаблон оформления по которому будет строится список подразделов
  * @param int $max_count - Максимальное количество элементов в списке
  * @param string $order_by - Способ сортировки элементов списка. SQL-подобный синтаксис, например: "name DESC".
  * @param int $start_pos - Номер элемента по порядку с которого будет выводиться список.
  * @desc МАКРОС: Выводит содержимое конкретного раздела сайта, при необходимости формирует список подразделов.
  */
 public function objView($section_id, $templ_name = 0, $max_count = 0, $order_by = 0, $start_pos = 0)
 {
     if ($page = ormPages::get($section_id)) {
         if (empty($templ_name)) {
             $templ_obj = templates::get($page->template2_id);
             $templ_name = $templ_obj instanceof template ? $templ_obj->getFile() : 'default';
         }
         $templ_file = '/structure/objects/' . $templ_name . '.tpl';
         $TEMPLATE = page::getTemplate($templ_file);
         if (!is_array($TEMPLATE)) {
             return page::errorNotFound('structure.objView', $templ_file);
         }
         $class = $page->getClass()->getSName();
         $templ = 'frame_' . $class;
         if (!isset($TEMPLATE[$templ]) && isset($TEMPLATE['frame'])) {
             $templ = 'frame';
         }
         $pre = system::getCurrentNavVal() == 'print' && isset($TEMPLATE['print_' . $templ]) ? 'print_' : '';
         if (isset($TEMPLATE[$pre . $templ])) {
             $fields = page::getFields('obj', $TEMPLATE[$pre . $templ]);
             // Выводим список подразделов (если нужно)
             if (isset($fields['mono']) && in_array('list', $fields['mono'])) {
                 $list = $this->objList($page, $TEMPLATE, $max_count, $order_by, $start_pos);
                 if (!empty($list) && isset($TEMPLATE[$templ . '_list'])) {
                     // Выводим список в обрамлении
                     page::assign('list', $list);
                     $list = page::parse($TEMPLATE[$templ . '_list']);
                 } else {
                     if (empty($list)) {
                         // Выводим сообщение "Список пуст!"
                         if (isset($TEMPLATE['list_empty_' . $class])) {
                             $list = page::parse($TEMPLATE['list_empty_' . $class]);
                         }
                     }
                 }
                 page::assign('list', $list);
             }
             // Парсим поля страницы
             if (isset($fields['obj'])) {
                 while (list($num, $name) = each($fields['obj'])) {
                     page::assign('obj.' . $name, $page->__get($name));
                 }
             }
             page::assign('back_url', system::preUrl($page->url));
             page::assign('obj.class', $class);
             page::assign('print_url', $page->url . '=print');
             return page::parse($TEMPLATE[$pre . $templ]);
         }
     }
 }