exit('No direct script access allowed'); } /** * MaxSite CMS * (c) http://max-3000.com/ * 25-11-2015 */ /* Универсальный юнит для вывода записей по множеству критериев [unit] file = last-pages.php limit = 3 [/unit] Значение ключей по-умолчанию см. переменную $def */ # используем кэширование $home_cache_time = (int) mso_get_option('home_cache_time', 'templates', 0); $home_cache_key = getinfo('template') . '-' . __FILE__ . '-' . mso_current_paged() . '-' . $UNIT_NUM; if ($home_cache_time > 0 and $k = mso_get_cache($home_cache_key)) { echo $k; } else { $def = array('limit' => 3, 'cat_id' => "0", 'page_id' => "0", 'pagination' => false, 'type' => 'blog', 'order' => 'page_date_publish', 'order_asc' => 'desc', 'cut' => '»»»', 'show_cut' => false, 'date_now' => true, 'page_id_autor' => 0, 'thumb' => true, 'thumb_width' => 100, 'thumb_height' => 100, 'class_thumb' => 'b-left mar15-r rounded', 'content' => true, 'content_words' => 0, 'content_chars' => 0, 'content_cut' => '...', 'content_start' => '<div class="mso-page-content clearfix">', 'content_end' => '</div>', 'line1' => '[title][date]', 'line2' => '[thumb]', 'line3' => '', 'line4' => '[cat]', 'line5' => '<p class="t-right"><a href="[page_url]">Читать дальше</a></p>', 'title_start' => '<h4>', 'title_end' => '</h4>', 'block_start' => '<div class="layout-center flex flex-wrap pad5-rl">', 'block_end' => '</div>', 'page_start' => '<div class="w32 w48-tablet w100-phone pad20 mar15-tb bor1px bor-solid bor-gray400 rounded">', 'page_end' => '</div>', 'date' => 'j F Y, H:i', 'date_start' => '<p class="italic t90 i-calendar"><time datetime="[page_date_publish_iso]">', 'date_end' => '</time></p>', 'cat_start' => '<p class="i-folder t90">', 'cat_end' => '', 'cat_sep' => ',&NBSP;', 'tag_start' => '<p class="i-tag t90">', 'tag_end' => '</p>', 'tag_sep' => ',&NBSP;', 'author_start' => '', 'author_end' => '', 'read' => '»»»', 'read_start' => '<p>', 'read_end' => '</p>', 'comments_count_start' => '', 'comments_count_end' => '', 'placehold' => true, 'placehold_path' => 'http://placehold.it/', 'placehold_pattern' => '[W]x[H].png', 'placehold_file' => 'data', 'placehold_data_bg' => '#EEEEEE', 'pagination_start' => '', 'pagination_end' => '', 'exclude_page_allow' => true, 'exclude_page_add' => true); $UNIT = mso_merge_array($UNIT, $def); ob_start(); $b = new Block_pages(array('limit' => $UNIT['limit'], 'cat_id' => $UNIT['cat_id'], 'page_id' => $UNIT['page_id'], 'pagination' => $UNIT['pagination'], 'type' => $UNIT['type'], 'order' => $UNIT['order'], 'order_asc' => $UNIT['order_asc'], 'cut' => $UNIT['cut'], 'show_cut' => $UNIT['show_cut'], 'date_now' => $UNIT['date_now'], 'page_id_autor' => $UNIT['page_id_autor'], 'exclude_page_allow' => $UNIT['exclude_page_allow'])); if ($b->go) { $b->output(array('block_start' => $UNIT['block_start'], 'block_end' => $UNIT['block_end'], 'content' => $UNIT['content'], 'content_words' => $UNIT['content_words'], 'content_chars' => $UNIT['content_chars'], 'content_cut' => $UNIT['content_cut'], 'content_start' => $UNIT['content_start'], 'content_end' => $UNIT['content_end'], 'thumb' => $UNIT['thumb'], 'thumb_width' => $UNIT['thumb_width'], 'thumb_height' => $UNIT['thumb_height'], 'thumb_class' => $UNIT['class_thumb'], 'line1' => $UNIT['line1'], 'line2' => $UNIT['line2'], 'line3' => $UNIT['line3'], 'line4' => $UNIT['line4'], 'line5' => $UNIT['line5'], 'title_start' => $UNIT['title_start'], 'title_end' => $UNIT['title_end'], 'page_start' => $UNIT['page_start'], 'page_end' => $UNIT['page_end'], 'date' => $UNIT['date'], 'date_start' => $UNIT['date_start'], 'date_end' => $UNIT['date_end'], 'cat_start' => $UNIT['cat_start'], 'cat_end' => $UNIT['cat_end'], 'cat_sep' => $UNIT['cat_sep'], 'tag_start' => $UNIT['tag_start'], 'tag_end' => $UNIT['tag_end'], 'tag_sep' => $UNIT['tag_sep'], 'author_start' => $UNIT['author_start'], 'author_end' => $UNIT['author_end'], 'read' => $UNIT['read'], 'read_start' => $UNIT['read_start'], 'read_end' => $UNIT['read_end'], 'comments_count_start' => $UNIT['comments_count_start'], 'comments_count_end' => $UNIT['comments_count_start'], 'placehold' => $UNIT['placehold'], 'placehold_path' => $UNIT['placehold_path'], 'placehold_pattern' => $UNIT['placehold_pattern'], 'placehold_file' => $UNIT['placehold_file'], 'placehold_data_bg' => $UNIT['placehold_data_bg'], 'pagination_start' => $UNIT['pagination_start'], 'pagination_end' => $UNIT['pagination_end'], 'exclude_page_add' => $UNIT['exclude_page_add'])); } mso_add_cache($home_cache_key, ob_get_flush(), $home_cache_time * 60); } # end of file
function paginator_go($r = array()) { global $MSO; $r_orig = $r; if (!$r) { return $r; } if (!isset($r['maxcount']) || $r['maxcount'] == '1') { return $r; } if (!isset($r['limit'])) { return $r; } if (!isset($r['type'])) { $r['type'] = false; } if (!isset($r['next_url'])) { $r['next_url'] = 'next'; } $options = mso_get_option('paginator', 'plugins', array()); if (!isset($options['page_count'])) { $options['page_count'] = '10'; } if (!isset($options['returnOrder'])) { $options['returnOrder'] = '0'; } if (!isset($options['lang_next'])) { $options['lang_next'] = t('Следующая'); } if (!isset($options['lang_prior'])) { $options['lang_prior'] = t('Предыдущая'); } if (!isset($options['lang_last'])) { $options['lang_last'] = t('Последняя'); } if (!isset($options['lang_first'])) { $options['lang_first'] = t('Первая'); } $current_paged = mso_current_paged($r['next_url']); if ($current_paged > $r['maxcount']) { $current_paged = $r['maxcount']; } if ($r['type'] !== false) { $type = $r['type']; } else { $type = $MSO->data['type']; } $a_cur_url = $MSO->data['uri_segment']; if ($type != 'page_404') { $cur_url = getinfo('site_url') . $type; } else { $cur_url = getinfo('site_url'); } foreach ($a_cur_url as $val) { if ($val == $r['next_url']) { break; } else { if ($val != $type) { $cur_url .= '/@@' . $val; } } } $cur_url = str_replace('//@@', '/', $cur_url); $cur_url = str_replace('@@', '', $cur_url); $returnOrder = $options['returnOrder'] == '1' ? 'true' : 'false'; $id = mt_rand(1, 999); echo '<script>$(document).ready(function() {$("#pag' . $id . '").paginator({pagesTotal:' . $r['maxcount'] . ', pagesSpan:' . $options['page_count'] . ', pageCurrent:' . $current_paged . ', baseUrl:"' . $cur_url . '/next/", returnOrder:' . $returnOrder . ', lang: {next:"' . $options['lang_next'] . '", last:"' . $options['lang_last'] . '", prior:"' . $options['lang_prior'] . '", first:"' . $options['lang_first'] . '", arrowRight:String.fromCharCode(8594), arrowLeft:String.fromCharCode(8592)}});})</script>' . NR . '<div id="pag' . $id . '" class="paginator"></div>' . NR; return $r_orig; }
header = заголовок text = текст с html без переносов link = ссылка img = адрес картинки [/slide] */ // где выводить записи $slidesjs_output = mso_get_option('slidesjs_output', 'templates', array()); if (!$slidesjs_output) { return; } // ничего не отмечено - нигде не показывать if (!in_array('all', $slidesjs_output)) { if (!in_array(getinfo('type'), $slidesjs_output)) { return; } elseif (mso_current_paged() > 1) { return; } // на страницах пагинации не показывать (или показывать?..) } // опции слайдера $slides_def = ' [slide] header = заголовок1 text = текст с html без переносов link = http://maxsite.org/ img = TEMPLATE_URL/images/placehold/1140x300.png [/slide] [slide] header = заголовок2
function _mso_sql_build_author($r, &$pag) { $CI =& get_instance(); if ($r['slug']) { $slug = $r['slug']; } else { $slug = mso_segment(2); } // если slug есть число, то выполняем поиск по id if (!is_numeric($slug)) { $id = 0; } else { $id = (int) $slug; } $offset = 0; if ($r['pagination']) { # пагинация # для неё нужно при том же запросе указываем общее кол-во записей и кол-во на страницу # сама пагинация выводится отдельным плагином # запрос один в один, кроме limit и юзеров $CI->db->select('SQL_BUFFER_RESULT ' . $CI->db->dbprefix('page') . '.`page_id`', false); $CI->db->from('page'); if ($r['page_status']) { $CI->db->where('page_status', $r['page_status']); } if ($r['type']) { if (is_array($r['type'])) { $CI->db->where_in('page_type_name', $r['type']); } else { $CI->db->where('page_type_name', $r['type']); } } // if ($r['date_now']) $CI->db->where('page_date_publish < ', 'DATE_ADD(NOW(), INTERVAL "' . $r['time_zone'] . '" HOUR_MINUTE)', false); if ($r['date_now'] and $r['page_id_date_now']) { $CI->db->where_not_in('page.page_id', $r['page_id_date_now']); } $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id'); $CI->db->where('page.page_id_autor', $id); $CI->db->group_by('page.page_id'); if ($function_add_custom_sql = $r['function_add_custom_sql']) { $function_add_custom_sql(); } $query = $CI->db->get(); $pag_row = $query->num_rows(); if ($pag_row > 0) { $pag['maxcount'] = ceil($pag_row / $r['limit']); // всего станиц пагинации $pag['limit'] = $r['limit']; // записей на страницу $current_paged = mso_current_paged($r['pagination_next_url']); if ($current_paged > $pag['maxcount']) { $current_paged = $pag['maxcount']; } $offset = $current_paged * $pag['limit'] - $pag['limit']; } else { $pag = false; } } else { $pag = false; } // теперь сами страницы if (!$r['all_fields']) { if ($r['content']) { $CI->db->select('page.page_id, page_type_name, page_slug, page_title, page_date_publish, page_status, users_nik, page_content, page_view_count, page_rating, page_rating_count, page_password, page_comment_allow, page_id_parent, users_avatar_url, page.page_id_autor, users_description, users_login'); } else { $CI->db->select('page.page_id, page_type_name, page_slug, page_title, "" AS page_content, page_date_publish, page_status, users_nik, page_view_count, page_rating, page_rating_count, page_password, page_comment_allow, users_avatar_url, page.page_id_autor, users_description, users_login', false); } } else { $CI->db->select('page.*, page_type.*, users.*'); } $CI->db->from('page'); if ($r['page_status']) { $CI->db->where('page_status', $r['page_status']); } // if ($r['date_now']) $CI->db->where('page_date_publish < ', 'DATE_ADD(NOW(), INTERVAL "' . $r['time_zone'] . '" HOUR_MINUTE)', false); if ($r['date_now'] and $r['page_id_date_now']) { $CI->db->where_not_in('page.page_id', $r['page_id_date_now']); } if ($r['only_feed']) { $CI->db->where('page.page_feed_allow', '1'); } if ($r['type']) { if (is_array($r['type'])) { $CI->db->where_in('page_type_name', $r['type']); } else { $CI->db->where('page_type_name', $r['type']); } } $CI->db->join('users', 'users.users_id = page.page_id_autor'); $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id'); $CI->db->where('page.page_id_autor', $id); $CI->db->order_by($r['order'], $r['order_asc']); $CI->db->group_by('page.page_id'); if (!$r['no_limit']) { if ($pag and $offset) { $CI->db->limit($r['limit'], $offset); } else { $CI->db->limit($r['limit']); } } if ($function_add_custom_sql = $r['function_add_custom_sql']) { $function_add_custom_sql(); } }
$CI->table->set_heading('ID', ' ', t('Ник'), t('Актив.'), t('Кол.'), t('Последний вход'), t('E-mail'), t('Сайт')); // для пагинации нам нужно знать общее количество записей // только после этого выполняем запрос $pag = array(); // для пагинации $pag['limit'] = 30; // записей на страницу $offset = 0; $CI->db->select('comusers_id'); $CI->db->from('comusers'); $query = $CI->db->get(); $pag_row = $query->num_rows(); if ($pag_row > 0) { $pag['maxcount'] = ceil($pag_row / $pag['limit']); // всего станиц пагинации $current_paged = mso_current_paged(); if ($current_paged > $pag['maxcount']) { $current_paged = $pag['maxcount']; } $offset = $current_paged * $pag['limit'] - $pag['limit']; } else { $pag = false; } $CI->db->select('comusers_id, comusers_nik, comusers_email, comusers_url, comusers_activate_key, comusers_activate_string, comusers_date_registr, comusers_last_visit, comusers_count_comments'); $CI->db->from('comusers'); $CI->db->order_by('comusers_id'); if ($pag) { if ($pag and $offset) { $CI->db->limit($pag['limit'], $offset); } else { $CI->db->limit($pag['limit']);
$tmpl = array('table_open' => '<table class="page tablesorter">', 'row_alt_start' => '<tr class="alt">', 'cell_alt_start' => '<td class="alt">'); $CI->table->set_template($tmpl); // шаблон таблицы $CI->table->set_heading('ID', '•', '+', t('Текст')); # подготавливаем выборку из базы $CI->db->select('SQL_CALC_FOUND_ROWS comments_id, comments_users_id, comments_comusers_id, comments_author_name, comments_date, comments_content, comments_approved, comments_author_ip, users.users_nik, comusers.comusers_nik, page.page_title, page.page_slug', false); $CI->db->from('comments'); $CI->db->join('users', 'users.users_id = comments.comments_users_id', 'left'); $CI->db->join('comusers', 'comusers.comusers_id = comments.comments_comusers_id', 'left'); $CI->db->join('page', 'page.page_id = comments.comments_page_id', 'left'); if (!$f_all_comments) { $CI->db->where('comments_approved', 0); } $CI->db->order_by('comments_date', 'desc'); $limit = 20; $CI->db->limit($limit, mso_current_paged() * $limit - $limit); // не более $limit $query = $CI->db->get(); $pagination = mso_sql_found_rows($limit); // определим общее кол-во записей для пагинации mso_hook('pagination', $pagination); // если есть данные, то выводим if ($query->num_rows() > 0) { $this_url = $MSO->config['site_admin_url'] . 'comments/'; $view_url = $MSO->config['site_url'] . 'page/'; foreach ($query->result_array() as $row) { $id = $row['comments_id']; // для вывода делаем чекбокс + hidden всех комментов для того, чтобы проверить тех, // которые окажутся не отмечены - их POST не передает $id_out = '<input type="checkbox" name="f_check_comments[' . $id . ']">' . NR; $act = '<a href="' . $this_url . 'edit/' . $id . '">' . t('Изменить') . '</a>';
function mso_link_rel($rel = 'canonical', $add = '', $url_only = false) { if (!$rel) { return; } // пустой тип if ($rel == 'canonical') { if ($add) { return '<link rel="canonical" ' . $add . '>'; } else { // для разных типов данных формируем разный канонический адрес // он напрямую зависит от типа $url = ''; // если есть хук canonical, то выполняем его // если хук вернул какое-то значение, то это $url // если нет, то выполняем типовое определение канонического адреса if (mso_hook_present('canonical')) { $url = mso_hook('canonical'); } if (!$url) { if (is_type('page') or is_type('category') or is_type('tag') or is_type('author') or is_type('users') or mso_segment(1) == 'sitemap' or mso_segment(1) == 'contact') { if (mso_segment(2)) { $url = getinfo('site_url') . mso_segment(1) . '/' . mso_segment(2); } else { $url = getinfo('site_url') . mso_segment(1); } } elseif (is_type('home')) { $url = getinfo('site_url'); } } // echo $url; // пагинация if (($cur = mso_current_paged()) > 1) { if (is_type('home')) { $url .= 'home/next/' . $cur; } else { $url .= '/next/' . $cur; } } if ($url) { if ($url_only) { return $url; } else { return '<link rel="canonical" href="' . $url . '">'; } } } } else { if ($add) { return '<link rel="' . $rel . '" ' . $add . '>'; } } }
function pagination_go($r = array()) { global $MSO; $r_orig = $r; if (!$r) { return $r; } if (!isset($r['maxcount'])) { return $r; } if (!isset($r['limit'])) { return $r; } // нужно указать сколько записей выводить if (!isset($r['type'])) { $r['type'] = false; } // можно задать свой тип if (!isset($r['next_url'])) { $r['next_url'] = 'next'; } $options = mso_get_option('plugin_pagination', 'plugins', array()); // получаем опции if (!isset($r['range'])) { $r['range'] = isset($options['range']) ? (int) $options['range'] : 3; } if (!isset($r['sep'])) { $r['sep'] = isset($options['sep']) ? $options['sep'] : ' · '; } if (!isset($r['sep2'])) { $r['sep2'] = isset($options['sep2']) ? $options['sep2'] : ' | '; } if (!isset($r['format'])) { // $r['format'] = $r['format'][] = isset($options['format_first']) ? $options['format_first'] : '« ' . tf('Первая'); $r['format'][] = isset($options['format_prev']) ? $options['format_prev'] : '‹ ' . tf('предыдущая'); $r['format'][] = isset($options['format_next']) ? $options['format_next'] : tf('следующая') . ' ›'; $r['format'][] = isset($options['format_last']) ? $options['format_last'] : tf('последняя') . ' »'; } # текущая пагинация вычисляется по адресу url # должно быть /next/6 - номер страницы $current_paged = mso_current_paged($r['next_url']); if ($current_paged > $r['maxcount']) { $current_paged = $r['maxcount']; } if ($r['type'] !== false) { $type = $r['type']; } else { $type = $MSO->data['type']; } // текущий урл сделаем $a_cur_url = $MSO->data['uri_segment']; // $cur_url = getinfo('site_url') . $type; if ($type != 'page_404') { $cur_url = getinfo('site_url') . $type; } else { $cur_url = getinfo('site_url'); } // pr($cur_url); foreach ($a_cur_url as $val) { #if ($val == 'next') break; // next - дальше не нужно if ($val == $r['next_url']) { break; } else { if ($val != $type) { $cur_url .= '/@@' . $val; } } } $cur_url = str_replace('//@@', '/', $cur_url); $cur_url = str_replace('@@', '', $cur_url); // pr($cur_url); if ($type == 'home') { $home_url = getinfo('site_url'); } else { $home_url = $cur_url; } //pr($home_url); $out = _pagination($r['maxcount'], $current_paged, $cur_url . '/' . $r['next_url'] . '/', $r['range'], $cur_url, '', $r['sep'], $home_url, $r['sep2']); if ($out) { $out = str_replace(array('%FIRST%', '%PREV%', '%NEXT%', '%LAST%'), $r['format'], $out); echo NR . '<div class="pagination">' . $out . '</div>' . NR; } return $r_orig; }
function pagination_go($r = array()) { global $MSO; $r_orig = $r; if (!$r) { return $r; } if (!isset($r['maxcount'])) { return $r; } if (!isset($r['limit'])) { return $r; } // нужно указать сколько записей выводить if (!isset($r['type'])) { $r['type'] = false; } // можно задать свой тип if (!isset($r['next_url'])) { $r['next_url'] = 'next'; } $options = mso_get_option('plugin_pagination', 'plugins', array()); // получаем опции if (!isset($r['range'])) { $r['range'] = isset($options['range']) ? (int) $options['range'] : 3; } if (!isset($r['sep'])) { $r['sep'] = isset($options['sep']) ? $options['sep'] : ' '; } if (!isset($r['sep2'])) { $r['sep2'] = isset($options['sep2']) ? $options['sep2'] : ' '; } if (!isset($r['format'])) { // $r['format'] = $r['format'][] = isset($options['format_first']) ? $options['format_first'] : '<<'; $r['format'][] = isset($options['format_prev']) ? $options['format_prev'] : '<'; $r['format'][] = isset($options['format_next']) ? $options['format_next'] : '>'; $r['format'][] = isset($options['format_last']) ? $options['format_last'] : '>>'; } # текущая пагинация вычисляется по адресу url # должно быть /next/6 - номер страницы $current_paged = mso_current_paged($r['next_url']); if ($current_paged > $r['maxcount']) { $current_paged = $r['maxcount']; } if ($r['type'] !== false) { $type = $r['type']; } else { $type = $MSO->data['type']; } // текущий адрес $cur_url = mso_current_url(true); // в текущем адресе нужно исключить пагинацию next if (preg_match("!/" . $r['next_url'] . "/!is", $cur_url, $matches, PREG_OFFSET_CAPTURE)) { $cur_url = substr($cur_url, 0, $matches[0][1]); } if ($type == 'home' and $current_paged == 1) { $cur_url = $cur_url . 'home'; } // pr($cur_url); if ($type == 'home') { $home_url = getinfo('site_url'); } else { $home_url = $cur_url; } $out = _pagination($r['maxcount'], $current_paged, $cur_url . '/' . $r['next_url'] . '/', $r['range'], $cur_url, '', $r['sep'], $home_url, $r['sep2']); if ($out) { $out = str_replace(array('%FIRST%', '%PREV%', '%NEXT%', '%LAST%'), $r['format'], $out); echo '<div class="pagination"><nav>' . $out . '</nav></div>'; } return $r_orig; }
function mso_sql_found_rows($limit = 20, $pagination_next_url = 'next') { $CI =& get_instance(); // определим общее кол-во записей $query_row = $CI->db->query('SELECT FOUND_ROWS() as found_rows', false); if ($query_row->num_rows() > 0) { $ar = $query_row->result_array(); $found_rows = $ar[0]['found_rows']; $maxcount = ceil($found_rows / $limit); // всего страниц пагинации $current_paged = mso_current_paged($pagination_next_url); if ($current_paged > $maxcount) { $current_paged = $maxcount; } $offset = $current_paged * $limit - $limit; $out = array('limit' => $limit, 'offset' => $offset, 'found_rows' => $found_rows, 'maxcount' => $maxcount, 'next_url' => $pagination_next_url); } else { $out = false; } $CI->db->cache_delete_all(); return $out; }