예제 #1
0
 /**
 * @return HTML
 * @param int(string) $section - ID объекта, подразделы которой будут выводиться в списке
 					 или системное имя класса, объекты которого нужно вывести
 * @param string $templ_name - Шаблон оформления по которому будет строится список
 * @param int $max_count - Максимальное количество элементов в списке
 * @param string $order_by - Способ сортировки элементов списка. SQL-подобный синтаксис, например: "name DESC".
 * @param int $start_pos - Номер элемента по порядку с которого будет выводиться список.
 * @desc МАКРОС: Выводит список объектов.
 */
 public function objList($section, $TEMPLATE = 'default', $max_count = 0, $order_by = 0, $start_pos = 0)
 {
     $list = '';
     // Определяем источник данных: ID, имя класса, путь, объект ormPage
     $independent = $section instanceof ormObject ? false : true;
     $class_name = $class_frame = '';
     if ($independent) {
         if (!is_numeric($section)) {
             $pos = strpos($section, ' ');
             if ($pos) {
                 $class_name = substr($section, $pos + 1);
                 $section = substr($section, 0, $pos);
             } else {
                 $class_name = $section;
                 $section = -1;
             }
         }
     }
     // Если нужно, подгружаем файл шаблона
     if (!is_array($TEMPLATE)) {
         $templ_file = '/core/objects/' . $TEMPLATE . '.tpl';
         $TEMPLATE = page::getTemplate($templ_file);
         if (!is_array($TEMPLATE)) {
             return page::errorNotFound('core.objList', $templ_file);
         }
     }
     // Формируем выборку объектов
     $sel = new ormSelect($class_name);
     if ($section >= 0) {
         page::assign('parent_id', $section);
         $sel->where('parents', '=', $section);
     }
     // Сортировка списка
     if (!empty($order_by)) {
         $pos = strpos($order_by, ' ');
         if ($pos) {
             $parram = substr($order_by, $pos + 1);
             $order_by = substr($order_by, 0, $pos);
         } else {
             $parram = '';
         }
         $sel->orderBy($order_by, $parram);
     } else {
         $sel->orderBy(position, asc);
     }
     $class_list = $sel->getClassesList();
     if (!empty($class_list)) {
         // Узнаем какие поля объектов будут участвовать в выборке
         $fields_str = '';
         $fields = page::getFields('obj', $TEMPLATE, $class_list, $class_frame);
         if (isset($fields['obj'])) {
             while (list($key, $val) = each($fields['obj'])) {
                 if ($val != 'url' && $val != 'class' && $val != 'num') {
                     $fields_str .= empty($fields_str) ? $val : ', ' . $val;
                 }
             }
         }
         $sel->fields($fields_str);
         // Количество элементов и постраничная навигация
         if (!empty($max_count)) {
             if (isset($fields['funct']) && in_array('structure.navigation', $fields['funct'])) {
                 $count_page = ceil($sel->getCount() / $max_count);
                 page::assign('count_page', $count_page);
                 if (system::getCurrentNavNum() != 0) {
                     $niz = empty($start_pos) ? system::getCurrentNavNum() * $max_count - $max_count : $start_pos;
                     $sel->limit($niz, $max_count);
                 } else {
                     $sel->limit($max_count);
                 }
             } else {
                 if (!empty($start_pos)) {
                     $sel->limit($start_pos, $max_count);
                 } else {
                     $sel->limit($max_count);
                 }
             }
         }
         // Формируем список
         while ($obj = $sel->getObject()) {
             // Парсим поля страницы
             if (isset($fields['obj_all'])) {
                 reset($fields['obj_all']);
                 while (list($num, $name) = each($fields['obj_all'])) {
                     page::assign('obj.' . $name, $obj->__get($name));
                 }
             }
             $class = $obj->getClass()->getSName();
             $num = $sel->getObjectNum() + 1;
             page::assign('obj.num', $num);
             page::assign('obj.class', $class);
             page::assign('class-first', $num == 1 ? 'first' : '');
             page::assign('class-last', $num == $sel->getObjectCount() ? 'last' : '');
             page::assign('class-odd', $num % 2 == 0 ? 'odd' : '');
             page::assign('class-even', $num % 2 != 0 ? 'even' : '');
             page::assign('class-third', $num % 3 == 0 ? 'third' : '');
             if ($num === 1) {
                 page::assign('first_children_id', $obj->id);
             }
             page::assign('last_children_id', $obj->id);
             if (isset($TEMPLATE['list_' . $class])) {
                 $templ = 'list_' . $class;
             } else {
                 if (isset($TEMPLATE['list'])) {
                     $templ = 'list';
                 } else {
                     $templ = '';
                 }
             }
             if (isset($TEMPLATE[$templ])) {
                 if ($num > 1 && isset($TEMPLATE['separator'])) {
                     $list .= $TEMPLATE['separator'];
                 }
                 $list .= page::parse($TEMPLATE[$templ]);
             }
         }
     }
     if (!empty($list) && $independent) {
         page::assign('list', $list);
         if (isset($TEMPLATE['frame_list'])) {
             $list = page::parse($TEMPLATE['frame_list']);
         } else {
             $list = page::errorBlock('core.objList', $templ_file, 'frame_list');
         }
     }
     return $list;
 }
예제 #2
0
 public function tagAction()
 {
     $templ_file = '/search/gettag.tpl';
     $TEMPLATE = page::getTemplate($templ_file);
     if (!is_array($TEMPLATE)) {
         return page::errorNotFound('search.getTag', $templ_file);
     }
     if (system::issetUrl(2) && ($tag = tags::infoTag(system::url(2)))) {
         $msg = lang::get('SEARCH_H1_TAGS') . ' "' . $tag['name'] . '"';
         page::globalVar('h1', $msg);
         page::globalVar('title', $msg);
         // Получаем список классов
         $classes_filter = array();
         if (!empty($_POST['classes'])) {
             $tmp = explode(",", $_POST['classes']);
             $classes_filter = array();
             foreach ($tmp as $v) {
                 $v = trim($v);
                 if (!empty($v)) {
                     $classes_filter[] = $v;
                 }
             }
         }
         $max_count = reg::getKey(ormPages::getPrefix('search') . '/max_count');
         $start = (system::getCurrentNavNum() - 1) * $max_count;
         $result = tags::find(array($tag['id']), $max_count, $start, $classes_filter);
         $list = '';
         while (list($num, $val) = each($result['pages'])) {
             if ($page = ormPages::get($val['page_id'])) {
                 page::assign('obj.id', $page->id);
                 page::assign('obj.num', $num + $start + 1);
                 page::assign('obj.name', $page->name);
                 page::assign('obj.url', $page->_url);
                 //page::assign('obj.content', $page->content);
                 $cn = $page->getClass()->getSName();
                 $block_name = isset($TEMPLATE['list_' . $cn]) ? 'list_' . $cn : 'list';
                 $list .= page::parse($TEMPLATE[$block_name]);
             }
         }
         page::assign('count_page', ceil($result['count'] / $max_count));
     } else {
         $list = '';
         $msg = lang::get('SEARCH_H1_TAGS2');
         page::globalVar('h1', $msg);
         page::globalVar('title', $msg);
     }
     if (!empty($list)) {
         page::assign('list', $list);
         page::fParse('list', $TEMPLATE['frame_list']);
     } else {
         page::fParse('list', $TEMPLATE['not_found']);
     }
     return page::parse($TEMPLATE['frame']);
 }
예제 #3
0
 /**
  * @return HTML
  * @param int $count_page - Количество страниц которое необходимо отобразить. Если = 0, список не выведется.
  * @param int $smeshenie - Количество страниц выводящихся справа и слева от текущей.
  * @param string $templ_name - Шаблон оформления.
  * @desc МАКРОС: Вывод постраничной навигации.
  */
 public function navigation($count_page = 0, $smeshenie = 4, $templ_name = 'default')
 {
     $navbar = '';
     $templ_file = '/structure/navigation/' . $templ_name . '.tpl';
     $TEMPLATE = page::getTemplate($templ_file);
     if (!is_array($TEMPLATE)) {
         return page::errorNotFound('structure.navigation', $templ_file);
     } else {
         $current_num = system::getCurrentNavNum();
         $current_url = system::getCurrentUrl();
         if ($count_page > 1) {
             // Просчитывает какие страницы показывать
             $raznica1 = $current_num - $smeshenie;
             $raznica1 = $raznica1 < 0 ? -$raznica1 : 0;
             $raznica2 = $count_page - $current_num - $smeshenie;
             $raznica2 = $raznica2 < 0 ? -$raznica2 : 0;
             $niz = $current_num - $smeshenie - $raznica2;
             if ($niz < 1) {
                 $niz = 1;
             }
             $verx = $current_num + $smeshenie + $raznica1;
             if ($verx > $count_page) {
                 $verx = $count_page;
             }
             page::assign('current_num', $current_num);
             page::assign('count_page', $count_page);
             page::assign('first_page', $current_url . '=1');
             page::assign('previous_page', $current_url . '=' . ($current_num - 1));
             page::assign('next_page', $current_url . '=' . ($current_num + 1));
             page::assign('last_page', $current_url . '=' . $count_page);
             if (!empty($smeshenie)) {
                 // Определяемся с левым блоком
                 page::assign('num', $current_num - 1);
                 if ($niz !== 1 && isset($TEMPLATE['left_block'])) {
                     $left_block = page::parse($TEMPLATE['left_block']);
                 } else {
                     $left_block = '';
                 }
                 page::assign('left_block', $left_block);
                 // Определяемся с правым блоком
                 page::assign('num', $current_num + 1);
                 if ($verx != $count_page && isset($TEMPLATE['right_block'])) {
                     $right_block = page::parse($TEMPLATE['right_block']);
                 } else {
                     $right_block = '';
                 }
                 page::assign('right_block', $right_block);
                 // Вывод списка страниц
                 $pages = '';
                 for ($i = $niz; $i < $verx + 1; $i++) {
                     page::assign('page_num', $i);
                     page::assign('page_url', $current_url . '=' . $i);
                     $tmpl = $i == $current_num ? 'list_active' : 'list';
                     $pages .= page::parse($TEMPLATE[$tmpl]);
                 }
                 page::assign('list', $pages);
             } else {
                 // Определяемся с левым блоком
                 page::assign('num', $current_num - 1);
                 if ($current_num - 1 > 0 && isset($TEMPLATE['left_block'])) {
                     $left_block = page::parse($TEMPLATE['left_block']);
                 } else {
                     $left_block = '';
                 }
                 page::assign('left_block', $left_block);
                 // Определяемся с правым блоком
                 page::assign('num', $current_num + 1);
                 if ($current_num + 1 <= $count_page && isset($TEMPLATE['right_block'])) {
                     $right_block = page::parse($TEMPLATE['right_block']);
                 } else {
                     $right_block = '';
                 }
                 page::assign('right_block', $right_block);
                 page::assign('page_num', $current_num);
                 page::assign('page_url', $current_url . '=' . $current_num);
                 page::fParse('list', $TEMPLATE['list_active']);
             }
             $navbar = page::parse($TEMPLATE['frame']);
         }
     }
     return $navbar;
 }