exit('No direct script access allowed'); } /** * MaxSite CMS * (c) http://max-3000.com/ */ # подготовка данных $full_posts = mso_get_option('category_full_text', 'templates', '1'); // полные или короткие записи // параметры для получения страниц $par = array('limit' => mso_get_option('limit_post', 'templates', '7'), 'cut' => mso_get_option('more', 'templates', 'Читать полностью »'), 'cat_order' => 'category_name', 'cat_order_asc' => 'asc', 'type' => 'blog', 'content' => $full_posts); // подключаем кастомный вывод, где можно изменить массив параметров $par для своих задач if ($f = mso_page_foreach('author-mso-get-pages')) { require $f; } $pages = mso_get_pages($par, $pagination); // получим все - второй параметр нужен для сформированной пагинации $title_page = mso_head_meta('title', $pages, '%users_nik%'); // заголовок для записи на основе титла if ($f = mso_page_foreach('author-head-meta')) { require $f; } else { mso_head_meta('title', $pages, '%users_nik%|%title%', ' » '); // meta title страницы mso_head_meta('description', $pages, '%users_nik%'); // meta description страницы mso_head_meta('keywords', $pages, '%users_nik%'); // meta keywords страницы } if (!$pages and mso_get_option('page_404_http_not_found', 'templates', 1)) { header('HTTP/1.0 404 Not Found');
ob_start(); if ($home_cat_block) { // перебираем рубрики foreach ($home_cat_block as $cat_id) { if ($f = mso_page_foreach('home-cat-block')) { require $f; // подключаем кастомный вывод continue; // следующая итерация } $par['cat_id'] = $cat_id; // подключаем кастомный вывод, где можно изменить массив параметров $par для своих задач if ($f = mso_page_foreach('home-cat-block-mso-get-pages')) { require $f; } $pages = mso_get_pages($par, $temp); if ($pages) { $cat_info = mso_get_cat_from_id($cat_id); // все данные рубрики // название рубрики и ссылка echo '<div class="mso-header-home-cat">' . '<a href="' . getinfo('site_url') . 'category/' . $cat_info['category_slug'] . '">' . htmlspecialchars($cat_info['category_name']) . '</a>' . '</div>'; // выводить описание рубрики if (mso_get_option('default_description_home_cat', 'templates', '0') and $cat_info['category_desc']) { echo '<div class="mso-description-cat">' . $cat_info['category_desc'] . '</div>'; } if ($f = mso_page_foreach('home-cat-block-out-pages-do')) { require $f; } mso_set_val('container_class', 'mso-type-home mso-type-home-cat-block mso-type-home-cat-block-list'); if (mso_get_option('default_description_home', 'templates', '0')) { mso_set_val('list_line_format', '[title] - [date] [meta_description]');
function mso_remote_f_getpost($post) { if (!isset($post['remote_page_id']) or !$post['remote_page_id']) { return 'ERROR: missing arguments'; } require_once getinfo('common_dir') . 'page.php'; require_once getinfo('common_dir') . 'inifile.php'; // функции для работы с ini-файлом // удалим хуки для текста - должно отдаваться как в базе mso_remove_hook('content'); mso_remove_hook('content_auto_tag'); mso_remove_hook('content_balance_tags'); mso_remove_hook('content_out'); mso_remove_hook('content_complete'); $par = array('custom_type' => 'home', 'pagination' => false, 'content' => true, 'work_cut' => false, 'type' => false, 'page_id' => $post['remote_page_id'], 'date_now' => false, 'page_status' => false, 'page_id_autor' => $post['remote_users_id'], 'all_fields' => true); // если юзеру разрешено редактировать чужие страницы, то 'page_id_autor' сбрасываем // иначе только свои страницы можно загружать if (mso_check_user_password($post['remote_users_login'], $post['remote_users_password'], 'admin_page_edit_other')) { $par['page_id_autor'] = false; } $pages = mso_get_pages($par, $pagination); // получим странички $out = ''; if ($pages) { foreach ($pages as $page) { foreach ($page as $p_name => $p_val) { if ($p_name == 'page_categories_detail') { continue; } elseif ($p_name == 'users_description') { continue; } elseif ($p_name == 'users_avatar_url') { continue; } elseif ($p_name == 'users_login') { continue; } elseif ($p_name == 'page_content') { $p_val = str_replace("\n", '!RMTNR!', $p_val); } elseif ($p_name == 'page_categories') { // это массив, где хранятся id рубрик $p_val = implode(" ", $p_val); } elseif ($p_name == 'page_tags') { // это массив, где хранятся имена меток $p_val = implode('!RMTNR!', $p_val); } elseif ($p_name == 'page_meta') { // это массивы в массиве $pm = ''; foreach ($p_val as $page_meta_key => $page_meta_val) { $pm .= '!RMTMETA!' . $page_meta_key . '=' . implode('!RMTNR!', $page_meta_val); } $p_val = $pm; } elseif ($p_name == 'page_date_publish') { //page_date_publish=2009-01-05 22:27:22 $out .= NR . 'page_date_publish_year=' . mso_date_convert('Y', $p_val, false); $out .= NR . 'page_date_publish_mon=' . mso_date_convert('m', $p_val, false); $out .= NR . 'page_date_publish_day=' . mso_date_convert('d', $p_val, false); $out .= NR . 'page_date_publish_hour=' . mso_date_convert('H', $p_val, false); $out .= NR . 'page_date_publish_min=' . mso_date_convert('i', $p_val, false); $out .= NR . 'page_date_publish_sec=' . mso_date_convert('s', $p_val, false); } elseif (is_array($p_val)) { continue; } $out .= NR . $p_name . '=' . $p_val; } } # нужно передать и все метаполя, которые в шаблоне и admin_page/meta.ini. # Они могут быть пустыми, поэтому их нет в page_meta $all = mso_get_ini_file(getinfo('admin_plugins_dir') . 'admin_page/meta.ini'); if (file_exists(getinfo('template_dir') . 'meta.ini')) { $meta_templ = mso_get_ini_file(getinfo('template_dir') . 'meta.ini'); if ($meta_templ) { $all = array_merge($all, $meta_templ); } } $pm = ''; foreach ($all as $key => $val) { $pm .= '!RMTMETA!' . $key . '=' . _mso_implode($val); } $out .= NR . 'page_meta_template=' . $pm; } else { return 'ERROR: no page'; } return trim($out); }
function mso_next_prev_page($r = array()) { $out = array(); if (!isset($r['page_id']) or !isset($r['page_categories']) or !isset($r['page_date_publish'])) { $out['next'] = false; $out['prev'] = false; return $out; } // передаем дату отдельно, она используется в function_add_custom_sql mso_set_val('_sql_next_prev_pages_page_date_publish', $r['page_date_publish']); // $r['use_category'] — если нужно учитывать рубрику if (!isset($r['use_category'])) { $r['use_category'] = true; } if ($r['use_category']) { // рубрики $cat = $r['page_categories']; // если несколько рубрик, то ищем те, в которых // category_id_parent не равен 0 — это подрубрики // если такие есть, то по ним и делаем навигаци if (count($r['page_categories']) > 1) { $all_cat = mso_cat_array_single(); // все рубрики foreach ($r['page_categories'] as $id) { if ($all_cat[$id]['parents'] > 0) { $cat = array($id); break; } } } $cat = implode(',', $cat); } else { $cat = ''; // рубрика не учитывается } if (!isset($r['type'])) { $r['type'] = 'blog'; } // можно задать тип записей // next if ($pages = mso_get_pages(array('content' => false, 'cat_id' => $cat, 'order_asc' => 'asc', 'limit' => 1, 'pagination' => false, 'custom_type' => 'home', 'function_add_custom_sql' => '_sql_next_page', 'get_page_categories' => false, 'get_page_meta_tags' => false, 'get_page_count_comments' => false, 'type' => $r['type'], 'exclude_page_id' => $r['page_id']), $temp)) { $out['next'] = $pages[0]; } else { $out['next'] = false; } // prev if ($pages = mso_get_pages(array('content' => false, 'cat_id' => $cat, 'order_asc' => 'desc', 'limit' => 1, 'pagination' => false, 'custom_type' => 'home', 'function_add_custom_sql' => '_sql_prev_page', 'get_page_categories' => false, 'get_page_meta_tags' => false, 'get_page_count_comments' => false, 'type' => $r['type'], 'exclude_page_id' => $r['page_id']), $temp)) { $out['prev'] = $pages[0]; } else { $out['prev'] = false; } // $r['reverse'] — меняем местами пункты if (isset($r['reverse']) and $r['reverse']) { $o = array(); $o['next'] = $out['prev']; $o['prev'] = $out['next']; $out = $o; } return $out; }
if (!defined('BASEPATH')) { exit('No direct script access allowed'); } // Использовать в type/ шаблона // Директория должна быть уже создана, иначе смерть $dirName = getinfo('template_dir') . 'type/export/'; if (!file_exists($dirName)) { die("Directory {$dirName} is not found in root folder"); } // Плоский массив всех рубрик $allCategories = mso_cat_array_single('page', 'category_name', 'ASC', '', true, false); // pr($allCategories); // Делаем запрос к БД штатными средствами $par = array('type' => 'blog', 'get_page_count_comments' => false, 'cut' => '', 'custom_type' => 'home', 'no_limit' => true); $pages = mso_get_pages($par, $pag); // pr($pages); // Обходим массив с результатами запроса и пишем файлы foreach ($pages as $page) { // pr($page); // Имя создаваемого файла $fileName = mso_page_date($page['page_date_publish'], 'Y-m-d', '', '', false) . '-' . $page['page_slug'] . '.md'; // pr($fileName); // Рубрики $categories = ''; foreach ($page['page_categories'] as $catId) { $categories .= $allCategories[$catId]['category_slug'] . ', '; } // Метки $tags = ''; foreach ($page['page_tags'] as $tag) {
function sitemap($arg = '') { if (mso_segment(2) == 'cat') { return sitemap_cat($arg); } global $MSO; // кэш строим по url, потому что у он меняется от пагинации $cache_key = 'sitemap' . serialize($MSO->data['uri_segment']); $k = mso_get_cache($cache_key); if ($k) { return $k; } // да есть в кэше $options = mso_get_option('plugin_sitemap', 'plugins', array()); // получаем опции if (!isset($options['limit'])) { $options['limit'] = 30; } else { $options['limit'] = (int) $options['limit']; } if ($options['limit'] < 2) { $options['limit'] = 30; } $out = ''; // параметры для получения страниц $par = array('limit' => $options['limit'], 'custom_type' => 'home', 'content' => false, 'cat_order' => 'category_id_parent', 'cat_order_asc' => 'asc'); if ($f = mso_page_foreach('sitemap-mso-get-pages')) { require $f; } $pages = mso_get_pages($par, $pagination); // получим все if ($pages) { $out .= '<div class="page_content"><div class="sitemap">' . NR . mso_hook('sitemap_do'); $out .= '<div class="sitemap-link"><a href="' . getinfo('siteurl') . 'sitemap/cat">' . tf('Группировка по рубрикам') . '</a>' . NR . '</div>'; $first = true; foreach ($pages as $page) { $date = mso_date_convert('m/Y', $page['page_date_publish']); if ($first) { $out .= '<h3>' . $date . '</h3>' . NR . '<ul>' . NR; $first = false; } elseif ($date1 != $date) { $out .= '</ul>' . NR . '<h3>' . $date . '</h3>' . NR . '<ul>' . NR; } $slug = mso_slug($page['page_slug']); $out .= '<li>' . mso_date_convert('d', $page['page_date_publish']) . ': <a href="' . getinfo('siteurl') . 'page/' . $slug . '" title="' . htmlspecialchars($page['page_title']) . '">' . htmlspecialchars($page['page_title']) . '</a>'; if ($page['page_categories']) { $out .= ' <span>(' . mso_page_cat_link($page['page_categories'], ' → ', '', '', false) . ')</span>'; } # синонимы ссылок /* . ' (' . '<a href="' . getinfo('siteurl') . $slug . '" title="slug: ' . $slug . '">slug</a>, ' . '<a href="' . getinfo('siteurl') . 'page/' . $page['page_id'] . '" title="page: ' . $page['page_id'] . '">page: ' . $page['page_id'] . '</a>, ' . '<a href="' . getinfo('siteurl') . $page['page_id'] . '" title="id: ' . $page['page_id'] . '">id: ' . $page['page_id'] . '</a>)' */ # /синонимы ссылок $out .= '</li>' . NR; $date1 = $date; } $out .= '</ul>' . NR . mso_hook('sitemap_posle') . '</div></div>' . NR; } $pagination['type'] = ''; ob_start(); mso_hook('pagination', $pagination); $out .= ob_get_contents(); ob_end_clean(); mso_add_cache($cache_key, $out); // сразу в кэш добавим return $out; }
function mso_page_other_pages($page_id = 0, $page_categories = array()) { if ($bl_title = mso_get_option('page_other_pages', 'templates', tf('Еще записи по теме'))) { // алгоритм получения записей $algoritm = mso_get_option('page_other_pages_algoritm', 'templates', 'all'); if ($algoritm == 'lowlewel') { $all_cat = mso_cat_array_single(); // все рубрики $bl_page_categories = array(); // обработаный массив id-level foreach ($page_categories as $cat_id) { $bl_page_categories[$cat_id] = $all_cat[$cat_id]['level']; } arsort($bl_page_categories); // сортируем в обратном порядке $bl_page_categories = array_keys($bl_page_categories); // оставляем только ключи (id) // если что-то есть, то оставляем только первую рубрику, иначе $page_categories if (isset($bl_page_categories[0])) { $bl_page_categories = array($bl_page_categories[0]); } else { $bl_page_categories = $page_categories; } } else { // обычный вывод по всем рубрикам $bl_page_categories = $page_categories; } $bl_pages = mso_get_pages(array('type' => false, 'content' => false, 'pagination' => false, 'custom_type' => 'category', 'categories' => $bl_page_categories, 'exclude_page_id' => array($page_id), 'content' => false, 'limit' => mso_get_option('page_other_pages_limit', 'templates', 7), 'order' => mso_get_option('page_other_pages_order', 'templates', 'page_date_publish'), 'order_asc' => mso_get_option('page_other_pages_order_asc', 'templates', 'random')), $_temp); if ($bl_pages) { echo '<div class="page_other_pages">' . mso_get_val('page_other_pages_start', '<h3>') . $bl_title . mso_get_val('page_other_pages_end', '</h3>') . '<ul>'; foreach ($bl_pages as $bl_page) { mso_page_title($bl_page['page_slug'], $bl_page['page_title'], '<li>', '</li>', true); } echo '</ul></div>'; } } }
function last_pages_widget_custom($arg = array(), $num = 1) { if (!isset($arg['count'])) { $arg['count'] = 7; } if (!isset($arg['page_type'])) { $arg['page_type'] = 'blog'; } if (!isset($arg['sort'])) { $arg['sort'] = 'page_date_publish'; } if (!isset($arg['sort_order'])) { $arg['sort_order'] = 'desc'; } if (!isset($arg['date_format'])) { $arg['date_format'] = 'd/m/Y'; } if (!isset($arg['format'])) { $arg['format'] = '<h4>[TITLE]</h4><p>[DATE] [COMMENTS]</p>[IMG]<p>[TEXT]</p>'; } if (!isset($arg['comments_format'])) { $arg['comments_format'] = ' | ' . t('Комментариев: ') . '[COUNT]'; } if (!isset($arg['include_cat'])) { $arg['include_cat'] = ''; } if (!isset($arg['img_prev_def'])) { $arg['img_prev_def'] = ''; } if (!isset($arg['img_prev_attr'])) { $arg['img_prev_attr'] = 'class="b-left w100"'; } if (!isset($arg['max_words'])) { $arg['max_words'] = 20; } if (!isset($arg['text_do'])) { $arg['text_do'] = ''; } if (!isset($arg['text_posle'])) { $arg['text_posle'] = ''; } if (!isset($arg['header'])) { $arg['header'] = mso_get_val('widget_header_start', '<div class="mso-widget-header"><span>') . t('Последние записи') . mso_get_val('widget_header_end', '</span></div>'); } if (!isset($arg['block_start'])) { $arg['block_start'] = ''; } if (!isset($arg['block_end'])) { $arg['block_end'] = ''; } if ($arg['sort_order'] != 'random') { $cache_key = 'last_pages_widget' . serialize($arg) . $num; if ($k = mso_get_cache($cache_key)) { return $k; } // да есть в кэше } $par = array('limit' => $arg['count'], 'cut' => '', 'cat_order' => 'category_name', 'cat_order_asc' => 'asc', 'pagination' => false, 'cat_id' => $arg['include_cat'], 'order' => $arg['sort'], 'order_asc' => $arg['sort_order'], 'type' => $arg['page_type'], 'custom_type' => 'home'); $pages = mso_get_pages($par, $temp); $out = ''; if ($pages) { foreach ($pages as $page) { // [TITLE] [DATE] [TEXT] [IMG] [COMMENTS] [URL] $title = mso_page_title($page['page_slug'], $page['page_title'], '', '', true, false, 'page'); $url = getinfo('site_url') . 'page/' . $page['page_slug']; $date = mso_page_date($page['page_date_publish'], $arg['date_format'], '', '', false); $img = isset($page['page_meta']['image_for_page'][0]) ? $page['page_meta']['image_for_page'][0] : ''; if (!$img and $arg['img_prev_def']) { $img = $arg['img_prev_def']; } if ($img) { $img = '<a href="' . $url . '"><img src="' . $img . '" alt="' . $page['page_title'] . '" ' . $arg['img_prev_attr'] . '></a>'; } if ($page['page_count_comments']) { $comments = str_replace('[COUNT]', $page['page_count_comments'], $arg['comments_format']); } else { $comments = ''; } $text = mso_str_word(strip_tags($page['page_content']), $arg['max_words']) . ' ...'; $out_page = $arg['format']; $out_page = str_replace('[TITLE]', $title, $out_page); $out_page = str_replace('[DATE]', $date, $out_page); $out_page = str_replace('[COMMENTS]', $comments, $out_page); $out_page = str_replace('[URL]', $url, $out_page); $out_page = str_replace('[TEXT]', $text, $out_page); $out_page = str_replace('[IMG]', $img, $out_page); $out .= $out_page; } $out = $arg['header'] . $arg['block_start'] . $arg['text_do'] . $out . $arg['text_posle'] . $arg['block_end']; } if ($arg['sort_order'] != 'random') { mso_add_cache($cache_key, $out); } // в кэш return $out; }
protected function get_pages($r) { // дефолтные значения для получения записей $default = array('limit' => 1, 'cut' => '»»»', 'pagination' => false, 'cat_id' => 0, 'page_id' => 0, 'page_id_autor' => false, 'type' => 'blog', 'order' => 'page_date_publish', 'order_asc' => 'desc', 'show_cut' => true, 'date_now' => true, 'exclude_page_allow' => true); $this->param = array_merge($default, $r); // объединяем с дефолтом $exclude_page_id = $this->param['exclude_page_allow'] ? mso_get_val('exclude_page_id') : array(); $this->pages = mso_get_pages(array('limit' => $this->param['limit'], 'cut' => $this->param['cut'], 'pagination' => $this->param['pagination'], 'cat_id' => $this->param['cat_id'], 'page_id' => $this->param['page_id'], 'page_id_autor' => $this->param['page_id_autor'], 'type' => $this->param['type'], 'order' => $this->param['order'], 'order_asc' => $this->param['order_asc'], 'show_cut' => $this->param['show_cut'], 'show_xcut' => $this->param['show_cut'], 'date_now' => $this->param['date_now'], 'custom_type' => 'home', 'exclude_page_id' => $exclude_page_id), $this->pagination); $this->go = $this->pages ? true : false; }