/** * @return stirng * @param string $templ_name - Шаблон оформления * @desc МАКРОС: Выводит форму подписки на рассылки */ function form($templ_name = 'default') { $templ_file = '/subscription/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('subscription.form', $templ_file); } $list = ''; $sel = new ormSelect('subscription'); $sel->where('lang', '=', languages::curId()); $sel->where('domain', '=', domains::curId()); $sel->where('active', '=', 1); $num = 0; while ($obj = $sel->getObject()) { page::assign('obj.id', $obj->id); page::assign('obj.name', $obj->name); $num++; page::assign('obj.num', $num); 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' : ''); $list .= page::parse($TEMPLATE['list']); } // Парсим текст сообщения об ошибке page::parseError('subscription'); if (empty($list)) { return page::parse($TEMPLATE['empty']); } else { page::assign('list', $list); return page::parse($TEMPLATE['frame']); } }
/** * @return HTML * @param string $templ_name - Шаблон оформления * @desc МАКРОС: Выводит форму обратной связи (добавления отзыва, вопрос-ответа и пр.) */ public function form($templ_name = 'default') { $templ_file = '/feedback/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('feedback.form', $templ_file); } if (!user::isGuest()) { page::assign('feedback.name', user::get('surname') . ' ' . user::get('name')); page::assign('feedback.email', user::get('email')); } page::assignSavingPost('feedback'); // Парсим текст сообщения об ошибке page::parseError('feedback'); return page::parse($TEMPLATE['frame'], 1); }
/** * @return HTML * @param int $obj_id - ID раздела, для которого необходимо вывести теги. * @param string $templ_name - Шаблон оформления. * @desc МАКРОС: Выводит список тегов для указанной страницы. */ public function tags($obj_id, $templ_name = 'tags') { $templ_file = '/search/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('search.tags', $templ_file); } $tags = tags::getTagsForObject($obj_id); $list = ''; while (list($num, $tag) = each($tags)) { page::assign('obj.id', $tag['id']); page::assign('obj.name', $tag['name']); page::assign('obj.count', $tag['count']); page::assign('obj.url', '/search/tag/' . $tag['id']); $list .= !empty($num) ? page::parse($TEMPLATE['separator']) : ''; $list .= page::parse($TEMPLATE['list']); } if (!empty($list)) { page::assign('list', $list); return page::parse($TEMPLATE['frame']); } else { return page::parse($TEMPLATE['empty']); } }
/** * @return string * @param string $templ_name - Шаблон оформления * @desc МАКРОС: Выводит форму второго шага авторизации через соц сети, если требуется указать e-mail или согласиться с правилами. */ function socialAuthConfirm($templ_name = 'social_auth_confirm') { $templ_file = '/users/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('users.socialAuthConfirm', $templ_file); } if (user::isGuest() && !empty($_SESSION['SOCIAL_AUTH_USER_INFO'])) { page::assign('obj.email', ''); foreach ($_SESSION['SOCIAL_AUTH_USER_INFO'] as $key => $val) { page::assign('obj.' . $key, $val); } page::assign('email_block', reg::getKey('/users/ask_email') && empty($_SESSION['SOCIAL_AUTH_USER_INFO']['email']) ? page::parse($TEMPLATE['email']) : ''); page::assign('confirm_block', reg::getKey('/users/confirm') ? page::parse($TEMPLATE['confirm']) : ''); // Вывод сообщения об ошибках page::parseError('social_auth_confirm'); return page::parse($TEMPLATE['frame']); } }
/** * @return HTML * @param int $comment_id - ID комментария * @param string $templ_name - Шаблон оформления комментария * @desc МАКРОС: Выводит информацию об указанном комментарии */ public function view($comment_id, $templ_name = 'tree') { $templ_file = '/comments/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('comments.view', $templ_file); } if ($comment = comments::get($comment_id)) { if ($comment->isActive() || reg::getKey('/comments/show_noactive')) { page::assign('obj.id', $comment->id()); page::assign('obj.parent_id', $comment->getParentId()); page::assign('obj.user_id', $comment->getUserId()); page::assign('obj.publ_date', $comment->getPublDate()); page::assign('obj.username', $comment->getUserName()); page::assign('obj.email', $comment->getEmail()); page::assign('obj.text', $comment->getText()); page::assign('obj.rate', $comment->getRate()); if (isset($_SESSION['comments_rate'][$comment->id()])) { page::fParse('rate', $TEMPLATE['rate_change']); } else { page::fParse('rate', $TEMPLATE['rate']); } page::assign('list', ''); return page::parse($TEMPLATE['list']); } } }
public function goodsList($order_id, $templ_name = 'goods_list') { $templ_file = '/eshop/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('eshop.goodsList', $templ_file); } if ($order = ormObjects::get($order_id, 'eshop_order')) { $fields = page::getFields('obj', $TEMPLATE['list']); $sel = new ormSelect('eshop_goods'); $sel->where('parents', '=', $order_id); $list = ''; $num = $cost = 0; while ($goods = $sel->getObject()) { if ($obj = ormPages::get($goods->goods_id, 'goods')) { $num++; if (isset($fields['obj'])) { while (list($key, $val) = each($fields['obj'])) { if ($val != 'url' && $val != 'class' && $val != 'num') { page::assign('obj.' . $val, $obj->__get($val)); } } } page::assign('obj.num', $num); 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' : ''); page::assign('obj.id', $obj->id); page::assign('obj.name', $obj->name); page::assign('obj.cost', $goods->cost); page::assign('obj.count', $goods->count); page::assign('obj.url', $obj->url); $cost_all = $goods->cost * $goods->count; page::assign('obj.cost_all', $cost_all); $cost += $cost_all; $list .= page::parse($TEMPLATE['list']); } } if (!empty($list)) { page::assign('cost', $cost); page::assign('list', $list); return page::parse($TEMPLATE['frame']); } else { return page::parse($TEMPLATE['empty']); } } }
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']); }
/** * @return HTML * @param int $obj_id - ID раздела, из которого необходимо вывести список голосований. * Если вывести список всех голосований на сайте, укажите "all". * @param string $templ_name - Шаблон оформления. * @param int $max_count - Максимальное количество элементов в списке. * @param string $order_by - Способ сортировки элементов списка. SQL-подобный синтаксис, например: "name DESC". * @desc МАКРОС: Выводит список голосований из указанного раздела. */ public function objList($obj_id = 'all', $templ_name = 'default', $max_count = 10, $order_by = 0) { $templ_file = '/voting/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('voting.objList', $templ_file); } $key = 'vote-list' . $obj_id . $templ_name . $max_count; if (!($data = cache::get($key)) || $order_by == 'random') { if ($obj_id != 'all') { $info = ormPages::getSectionByPath($obj_id); if ($info['section'] === false) { return ''; } if ($info['section'] instanceof ormPage) { $section = $info['section']; $obj_id = $section->id; } } // Получаем список голосований $sel = new ormSelect('vote'); $sel->findInPages(); $sel->where('active', '=', 1); $sel->where('view_in_menu', '=', 1); // Сортировка списка 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('publ_date', desc); } $sel->limit($max_count); if (is_numeric($obj_id)) { $sel->where('parents', '=', $obj_id); } // Узнаем какие поля объектов будут участвовать в выборке $fields_str = 'close, multiselect'; $fields = page::getFields('obj', $TEMPLATE['vote_result'] . $TEMPLATE['vote']); if (isset($fields['obj'])) { while (list($okey, $val) = each($fields['obj'])) { if ($val != 'url' && $val != 'class' && $val != 'num') { $fields_str .= empty($fields_str) ? $val : ', ' . $val; } } } $sel->fields($fields_str); $data = $sel->getData(); // Записываем в кэш cache::set($key, $data); } // Выводим список на страницу $list = ''; foreach ($data as $obj) { $list .= $this->objView($obj, $TEMPLATE); } page::assign('list', $list); return page::parse($TEMPLATE['frame']); }
/** * @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; }
/** * @return HTML * @param int $section_id - ID новостной ленты, для которой необходимо построить RSS-ленту * @param string $templ_name - Шаблон оформления, по которому будет строится RSS-лента * @desc МАКРОС: Выводит содержимое RSS-ленты. */ public function rss($section_id, $templ_name = 'rss') { $templ_file = '/structure/rss/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('structure.rss', $templ_file); } $cur_domain = 'http://' . domains::curDomain()->getName(); page::assign('channel.url', $cur_domain); page::assign('channel.date', date('r')); page::assign('channel.notice', ''); // Определяем из каких категорий выводить ленту новостей $sections = array(); if ($section_id == 'all') { // Из нескольких $sel = new ormSelect('news_feed'); $sel->findInPages(); $sel->fields('id'); $sel->where('rss_export', '=', 1); $sel->where('active', '=', 1); while ($obj = $sel->getObject()) { $sections[] = $obj->id; } page::assign('channel.title', domains::curDomain()->getSiteName()); } else { // Из одной $section_id = system::checkVar($section_id, isInt); if (empty($section_id)) { return ''; } $sections[] = $section_id; if ($sect = ormPages::get($section_id)) { page::assign('channel.title', $sect->name); } } // Формируем выборку объектов $sel = new ormSelect(); $sel->findInPages(); $sel->fields('name, notice, publ_date'); $sel->where('parents', '=', $sections, 'OR'); $sel->where('active', '=', 1); $sel->orderBy('publ_date', desc); $sel->limit(3); // Формируем список $list = ''; while ($obj = $sel->getObject()) { $num = $sel->getObjectNum() + 1; page::assign('obj.num', $num); page::assign('obj.id', $obj->id); page::assign('obj.url', $cur_domain . $obj->_url); page::assign('obj.name', $obj->name); $notice = str_replace(' ', '', strip_tags($obj->notice)); page::assign('obj.notice', $notice); $date = date('r', strtotime($obj->publ_date)); page::assign('obj.date', $date); /* if ($obj->podkast != '') { page::assign('obj.media_url', $cur_domain.$obj->podkast); page::fParse('media', $TEMPLATE['media']); } else page::assign('media', ''); */ if (isset($TEMPLATE['list'])) { $list .= page::parse($TEMPLATE['list']); } else { return page::errorBlock('structure.rss', $templ_file, 'list'); } } if (!empty($list)) { page::assign('list', $list); if (isset($TEMPLATE['frame_list'])) { $list = page::parse($TEMPLATE['frame_list']); } else { return page::errorBlock('structure.rss', $templ_file, 'frame_list'); } } return $list; }