Esempio n. 1
0
 function get_key($key)
 {
     $all = array();
     foreach ($this->pages as $p) {
         if (isset($p[$key])) {
             $ts = mso_explode($p[$key]);
             $all = array_merge($all, $ts);
         }
     }
     natsort($all);
     $this->pages = array_count_values($all);
 }
Esempio n. 2
0
function category_widget($num = 1)
{
    $widget = 'category_widget_' . $num;
    // имя для опций = виджет + номер
    $options = mso_get_option($widget, 'plugins', array());
    // получаем опции
    // заменим заголовок, чтобы был в  h2 class="box"
    if (isset($options['header']) and $options['header']) {
        $options['header'] = mso_get_val('widget_header_start', '<div class="mso-widget-header"><span>') . $options['header'] . mso_get_val('widget_header_end', '</span></div>');
    } else {
        $options['header'] = '';
    }
    if (isset($options['include'])) {
        $options['include'] = mso_explode($options['include']);
    } else {
        $options['include'] = array();
    }
    if (isset($options['exclude'])) {
        $options['exclude'] = mso_explode($options['exclude']);
    } else {
        $options['exclude'] = array();
    }
    return category_widget_custom($options, $num);
}
Esempio n. 3
0
if (!defined('BASEPATH')) {
    exit('No direct script access allowed');
}
/**
 * MaxSite CMS
 * (c) http://max-3000.com/
 */
echo NR . '<div class="mso-type-home-cat-block">' . NR;
if ($f = mso_page_foreach('home-cat-block-text-do')) {
    require $f;
}
// нужно считать каждую указанную рубрику и в цикле
// получить для неё все данные и сразу вывести
// параметры для получения страниц - общие для всех
$par = array('limit' => mso_get_option('home_limit_post', 'templates', '7'), 'cut' => mso_get_option('more', 'templates', tf('Читать полностью »')), 'cat_order' => 'category_id_parent', 'cat_order_asc' => 'asc', 'pagination' => false, 'exclude_page_id' => mso_get_val('exclude_page_id'));
$home_cat_block = mso_explode(mso_get_option('home_cat_id', 'templates', '0'));
// в массив
// все блоки можно закэшировать на 15 минут
$key_home_cache = serialize($home_cat_block);
if ($k = mso_get_cache($key_home_cache)) {
    print $k;
} else {
    ob_start();
    if ($home_cat_block) {
        // перебираем рубрики
        foreach ($home_cat_block as $cat_id) {
            if ($f = mso_page_foreach('home-cat-block')) {
                require $f;
                // подключаем кастомный вывод
                continue;
                // следующая итерация
Esempio n. 4
0
function mso_edit_page($data)
{
    global $MSO;
    $CI =& get_instance();
    $data = mso_xss_clean_data($data, array('user_login', 'password', 'page_id_autor', 'page_title', 'page_slug', 'page_password', 'page_date_publish', 'page_type_id', 'page_id_parent', 'page_status'));
    if (isset($data['user_login'])) {
        $user_login = $data['user_login'];
    } else {
        $user_login = $MSO->data['session']['users_login'];
    }
    if (isset($data['password'])) {
        $password = $data['password'];
    } else {
        $password = $MSO->data['session']['users_password'];
    }
    if (!isset($data['page_id_autor'])) {
        $data['page_id_autor'] = $MSO->data['session']['users_id'];
    }
    # проверка доступа этому пользователю с этим паролем и этим разрешением
    if (!mso_check_user_password($user_login, $password, 'admin_page_edit')) {
        return array('result' => 0, 'description' => 'Login/password incorrect');
    }
    # получаем данные пользователя, который отправил запрос
    $user_data = mso_get_user_data($user_login, $password);
    $page_id = (int) $data['page_id'];
    // проверим, чтобы это было число
    $page_id1 = (int) $page_id;
    if ((string) $page_id != (string) $page_id1) {
        $page_id = false;
    }
    // ошибочный id
    if (!$page_id) {
        return array('result' => 0, 'description' => 'Page ID incorrect');
    }
    // есть ли вообще такая страница?
    $CI->db->select('page_id');
    $CI->db->where(array('page_id' => $page_id));
    $query = $CI->db->get('page');
    if ($query->num_rows() == 0) {
        // нет такого
        return array('result' => 0, 'description' => 'Page ID incorrect');
    }
    $page_title = $data['page_title'];
    $page_content = $data['page_content'];
    // короткая ссылка
    $page_slug = isset($data['page_slug']) ? mso_slug($data['page_slug']) : false;
    if (!$page_slug) {
        if ($page_title) {
            $page_slug = mso_slug($page_title);
        } else {
            $page_slug = 'no-title';
        }
        if (!$page_slug) {
            $page_slug = 'no-title';
        }
    }
    // $page_slug нужно проверить на существование
    // если есть, то нужно добавить скажем их кол-во+1
    // при этом исключаем саму редактируемую страницу
    $CI->db->select('page_slug');
    $CI->db->where('page_id != ', $page_id);
    $query = $CI->db->get('page');
    // получили все slug
    if ($query->num_rows() > 0) {
        $all = array();
        // сделаем массив всех слаг
        foreach ($query->result_array() as $row) {
            $all[] = $row['page_slug'];
        }
        $count = 0;
        // начальное приращения слага
        $in = in_array($page_slug, $all);
        // признак вхождения -
        while ($in) {
            $count++;
            $in = in_array($page_slug . '-' . $count, $all);
        }
        if ($count) {
            $page_slug = $page_slug . '-' . $count;
        }
    }
    $page_password = isset($data['page_password']) ? mso_strip($data['page_password']) : '';
    // дата публикации
    $page_date_publish = isset($data['page_date_publish']) ? $data['page_date_publish'] : false;
    # дата последней модификации страницы
    $page_last_modified = date('Y-m-d H:i:s');
    $page_type_id = isset($data['page_type_id']) ? $data['page_type_id'] : '1';
    $page_id_parent = isset($data['page_id_parent']) ? $data['page_id_parent'] : '0';
    $page_status = isset($data['page_status']) ? $data['page_status'] : 'publish';
    if ($page_status != 'publish' and $page_status != 'draft' and $page_status != 'private') {
        $page_status = 'publish';
    }
    // если стоит разрешение admin_page_publish, то статус не меняем
    // иначе ставим только draft
    if (!mso_check_allow('admin_page_publish', $user_data['users_id'])) {
        $page_status = 'draft';
    }
    $page_comment_allow = isset($data['page_comment_allow']) ? (int) $data['page_comment_allow'] : '1';
    $page_ping_allow = isset($data['page_ping_allow']) ? (int) $data['page_ping_allow'] : '1';
    $page_feed_allow = isset($data['page_feed_allow']) ? (int) $data['page_feed_allow'] : '1';
    $page_menu_order = isset($data['page_menu_order']) ? (int) $data['page_menu_order'] : 0;
    $page_id_autor = isset($data['page_id_autor']) ? (int) $data['page_id_autor'] : 0;
    // нужно проверить вообще есть ли такой юзер $page_id_autor
    $CI->db->select('users_id');
    $CI->db->from('users');
    $CI->db->where(array('users_id' => $page_id_autor));
    $query = $CI->db->get();
    if (!$query->num_rows()) {
        // нет
        $page_id_autor = 0;
    }
    if ($page_id_autor != $user_data['users_id']) {
        if (!mso_check_allow('edit_page_author', $user_data['users_id'], false)) {
            $page_id_autor = $user_data['users_id'];
        }
    }
    $ins_data = array('page_type_id' => $page_type_id, 'page_id_parent' => $page_id_parent, 'page_id_autor' => $page_id_autor, 'page_title' => $page_title, 'page_content' => $page_content, 'page_status' => $page_status, 'page_slug' => $page_slug, 'page_password' => $page_password, 'page_comment_allow' => $page_comment_allow, 'page_ping_allow' => $page_ping_allow, 'page_feed_allow' => $page_feed_allow, 'page_last_modified' => $page_last_modified, 'page_menu_order' => $page_menu_order);
    if ($page_date_publish) {
        $ins_data['page_date_publish'] = $page_date_publish;
    }
    $CI->db->where(array('page_id' => $page_id));
    $res = $CI->db->update('page', $ins_data) ? '1' : '0';
    # $CI->db->cache_delete_all();
    if ($res) {
        $id = $page_id;
        // добавим теперь рубрики
        // вначале удалим все записи из рубрик с этим page_id
        $CI->db->where(array('page_id' => $page_id, 'links_id' => '0'));
        // чтобы линки не грохнуть
        $CI->db->delete('cat2obj');
        // рубрики указаны в виде номеров через запятую
        $page_id_cat = isset($data['page_id_cat']) ? $data['page_id_cat'] : '';
        $page_id_cat = mso_explode($page_id_cat);
        // в массив
        foreach ($page_id_cat as $key => $val) {
            $ins_data = array('page_id' => $id, 'category_id' => $val);
            $CI->db->insert('cat2obj', $ins_data);
            # $CI->db->cache_delete_all();
        }
        // $page_tags = метка
        // метки - это мета данные
        // дефолтные данные
        $def_data = array('meta_key' => 'tags', 'meta_id_obj' => $id, 'meta_table' => 'page');
        // вначале грохнем старые, потом добавим новые
        $CI->db->where($def_data);
        $CI->db->delete('meta');
        // получим существующие метки
        $CI->db->select('meta_id');
        $CI->db->where($def_data);
        $query = $CI->db->get('meta');
        if (!$query->num_rows()) {
            // значит инсерт
            $page_tags = isset($data['page_tags']) ? $data['page_tags'] : '';
            $tags = mso_explode($page_tags, false, false);
            // в массив - не только числа
            foreach ($tags as $key => $val) {
                $ins_data = $def_data;
                $ins_data['meta_value'] = $val;
                $CI->db->insert('meta', $ins_data);
                # $CI->db->cache_delete_all();
            }
        }
        // опции - мета
        require_once getinfo('common_dir') . 'meta.php';
        $page_meta_options = isset($data['page_meta_options']) ? $data['page_meta_options'] : '';
        // title##VALUE##титул##METAFIELD##description##VALUE##описание##METAFIELD##keywords##VALUE##ключи##METAFIELD##
        $page_meta_options = explode('##METAFIELD##', $page_meta_options);
        // вначале удалим все мета этой записи
        //$where_in = array(); // здесь meta_key
        //foreach ($page_meta_options as $key=>$val)
        //{
        //	if (trim($val))
        //	{
        //		$meta_temp = explode('##VALUE##', $val);
        //		$where_in[] = trim($meta_temp[0]);
        //	}
        //}
        // вначале грохнем старые, потом добавим новые
        //$CI->db->where( array('meta_id_obj' => $id, 'meta_table' => 'page') );
        //$CI->db->where_in('meta_key', $where_in );
        //$CI->db->delete('meta');
        // теперь тоже самое, только добавляем через insert
        foreach ($page_meta_options as $key => $val) {
            if (trim($val)) {
                $meta_temp = explode('##VALUE##', $val);
                $meta_key = trim($meta_temp[0]);
                $meta_value = trim($meta_temp[1]);
                mso_add_meta($meta_key, $id, 'page', $meta_value);
                //$CI->db->insert('meta', array('meta_key'=>$meta_key, 'meta_value'=>$meta_value,
                //							  'meta_table' => 'page', 'meta_id_obj' => $id) );
            }
        }
        // результат возвращается в виде массива
        $res = array($id, $page_slug, $page_status, $page_password, $page_date_publish);
        $response = array('result' => $res, 'description' => 'Updating page');
        mso_flush_cache();
        // сбросим кэш
    } else {
        $response = array('result' => 0, 'description' => 'Error inserting page');
    }
    if ($response['result']) {
        mso_hook('edit_page', $response['result']);
        mso_hook('edit_page_' . $page_status);
    }
    return $response;
}
Esempio n. 5
0
function xml_sitemap_custom($args = array())
{
    /* Настройки по-умолчанию */
    $options = mso_get_option('plugin_xml_sitemap', 'plugins', array());
    if (!isset($options['page_hide'])) {
        $options['page_hide'] = '';
    }
    $options['page_hide'] = mso_explode($options['page_hide']);
    if (!isset($options['page_cats_hide'])) {
        $options['page_cats_hide'] = '';
    }
    $options['page_cats_hide'] = mso_explode($options['page_cats_hide']);
    if (!isset($options['categories_show'])) {
        $options['categories_show'] = '';
    }
    $options['categories_show'] = mso_explode($options['categories_show']);
    if (!isset($options['tags_show'])) {
        $options['tags_show'] = true;
    }
    if (!isset($options['comusers_show'])) {
        $options['comusers_show'] = true;
    }
    if (!isset($options['users_show'])) {
        $options['users_show'] = true;
    }
    if (!isset($options['freq_priority'])) {
        $options['freq_priority'] = 'home | daily | 1 ' . NR . 'notblog | monthly | 0.7 ' . NR . 'blog | weekly | 0.5 ' . NR . 'category | weekly | 0.3 ' . NR . 'tag | weekly | 0.3 ' . NR . 'comuser | weekly | 0.3 ' . NR . 'user | weekly | 0.3 ';
    }
    $fp = explode(NR, trim($options['freq_priority']));
    $options['freq_priority'] = array();
    foreach ($fp as $ln) {
        $params = array_map('trim', explode('|', trim($ln)));
        $options['freq_priority'][$params[0]] = array('changefreq' => $params[1], 'priority' => $params[2]);
    }
    // создание sitemap.xml
    // $t = "\t"; // табулятор для отступа
    $t = '';
    // отступ для красоты
    $CI =& get_instance();
    $CI->load->helper('file');
    // хелпер для работы с файлами
    // временная зона сайта в формат +03:00 из 3.00
    $time_zone = getinfo('time_zone');
    // 3.00 -11.00;
    $znak = (int) $time_zone >= 0 ? '+' : '-';
    $time_zone = abs($time_zone);
    if ($time_zone == 0) {
        $time_zone = '0.0';
    }
    $time_zone = trim(str_replace('.', ' ', $time_zone));
    $time_z = explode(' ', $time_zone);
    if (!isset($time_z[0])) {
        $time_z[0] = '0';
    }
    if (!isset($time_z[1])) {
        $time_z[1] = '0';
    }
    if ($time_z[0] < 10) {
        $time_z[0] = '0' . $time_z[0];
    }
    if ($time_z[1] < 10) {
        $time_z[1] = '0' . $time_z[1];
    }
    $time_zone = $znak . $time_z[0] . ':' . $time_z[1];
    $url = getinfo('siteurl');
    $out = '<' . '?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>' . $url . '</loc>
<lastmod>' . date('Y-m-d') . 'T' . date('H:i:s') . $time_zone . '</lastmod>
<changefreq>' . $options['freq_priority']['home']['changefreq'] . '</changefreq>
<priority>' . $options['freq_priority']['home']['priority'] . '</priority>
</url>
';
    // временная зона для запросов с page_date_publish
    $tz = getinfo('time_zone');
    if ($tz < 10 and $tz > 0) {
        $tz = '0' . $tz;
    } elseif ($tz > -10 and $tz < 0) {
        $tz = '0' . $time_zone;
        $tz = str_replace('0-', '-0', $time_zone);
    } else {
        $tz = '00.00';
    }
    $tz = str_replace('.', ':', $tz);
    // страницы не blog
    $CI->db->select('page.page_id, page_slug, page_date_publish');
    if (count($options['page_cats_hide']) > 0) {
        $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id', 'left');
        $CI->db->where_not_in('category_id', $options['page_cats_hide']);
    }
    if (count($options['page_hide']) > 0) {
        $CI->db->where_not_in('page.page_id', $options['page_hide']);
    }
    $CI->db->where('page_type_name !=', 'blog');
    $CI->db->where('page_status', 'publish');
    $CI->db->where('page_date_publish < ', 'DATE_ADD(NOW(), INTERVAL "' . $tz . '" HOUR_MINUTE)', false);
    //$CI->db->where('page_date_publish <', mso_date_convert('Y-m-d H:i:s', date('Y-m-d H:i:s')));
    $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id', 'left');
    $CI->db->order_by('page_date_publish', 'desc');
    $CI->db->group_by('page.page_id');
    $query = $CI->db->get('page');
    if ($query->num_rows() > 0) {
        foreach ($query->result_array() as $row) {
            $date = str_replace(' ', 'T', $row['page_date_publish']) . $time_zone;
            $out .= $t . '<url>' . NR;
            $out .= $t . $t . '<loc>' . $url . 'page/' . $row['page_slug'] . '</loc>' . NR;
            $out .= $t . $t . '<lastmod>' . $date . '</lastmod>' . NR;
            $out .= $t . $t . '<changefreq>' . $options['freq_priority']['notblog']['changefreq'] . '</changefreq>' . NR;
            $out .= $t . $t . '<priority>' . $options['freq_priority']['notblog']['priority'] . '</priority>' . NR;
            $out .= $t . '</url>' . NR;
        }
    }
    // страницы
    $CI->db->select('page.page_id, page_slug, page_date_publish');
    if (count($options['page_cats_hide']) > 0) {
        $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id', 'left');
        $CI->db->where_not_in('category_id', $options['page_cats_hide']);
    }
    if (count($options['page_hide']) > 0) {
        $CI->db->where_not_in('page.page_id', $options['page_hide']);
    }
    $CI->db->where('page_type_name', 'blog');
    $CI->db->where('page_status', 'publish');
    $CI->db->where('page_date_publish < ', 'DATE_ADD(NOW(), INTERVAL "' . $tz . '" HOUR_MINUTE)', false);
    $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id', 'left');
    $CI->db->group_by('page.page_id');
    $CI->db->order_by('page_date_publish', 'desc');
    $query = $CI->db->get('page');
    if ($query->num_rows() > 0) {
        foreach ($query->result_array() as $row) {
            $date = str_replace(' ', 'T', $row['page_date_publish']) . $time_zone;
            $out .= $t . '<url>' . NR;
            $out .= $t . $t . '<loc>' . $url . 'page/' . $row['page_slug'] . '</loc>' . NR;
            $out .= $t . $t . '<lastmod>' . $date . '</lastmod>' . NR;
            $out .= $t . $t . '<changefreq>' . $options['freq_priority']['blog']['changefreq'] . '</changefreq>' . NR;
            $out .= $t . $t . '<priority>' . $options['freq_priority']['blog']['priority'] . '</priority>' . NR;
            $out .= $t . '</url>' . NR;
        }
    }
    // рубрики
    if (count($options['categories_show']) > 0) {
        $CI->db->or_where_in('category_id', $options['categories_show']);
    }
    $CI->db->where('category_type', 'page');
    $query = $CI->db->get('category');
    if ($query->num_rows() > 0) {
        $date = date('Y-m-d') . 'T' . date('H:i:s') . $time_zone;
        foreach ($query->result_array() as $row) {
            // $date = str_replace(' ', 'T', date('Y-m-d')) . $time_zone;
            $out .= $t . '<url>' . NR;
            $out .= $t . $t . '<loc>' . $url . 'category/' . $row['category_slug'] . '</loc>' . NR;
            $out .= $t . $t . '<lastmod>' . $date . '</lastmod>' . NR;
            $out .= $t . $t . '<changefreq>' . $options['freq_priority']['category']['changefreq'] . '</changefreq>' . NR;
            $out .= $t . $t . '<priority>' . $options['freq_priority']['category']['priority'] . '</priority>' . NR;
            $out .= $t . '</url>' . NR;
        }
    }
    // все метки
    if ($options['tags_show']) {
        require_once getinfo('common_dir') . 'meta.php';
        $alltags = mso_get_all_tags_page();
        foreach ($alltags as $tag => $count) {
            $out .= $t . '<url>' . NR;
            $out .= $t . $t . '<loc>' . $url . 'tag/' . htmlentities(urlencode($tag)) . '</loc>' . NR;
            $out .= $t . $t . '<lastmod>' . $date . '</lastmod>' . NR;
            $out .= $t . $t . '<changefreq>' . $options['freq_priority']['tag']['changefreq'] . '</changefreq>' . NR;
            $out .= $t . $t . '<priority>' . $options['freq_priority']['tag']['priority'] . '</priority>' . NR;
            $out .= $t . '</url>' . NR;
        }
    }
    // и все комюзеры
    if ($options['comusers_show']) {
        $CI->db->select('comusers_id');
        $query = $CI->db->get('comusers');
        if ($query->num_rows() > 0) {
            foreach ($query->result_array() as $row) {
                $out .= $t . '<url>' . NR;
                $out .= $t . $t . '<loc>' . $url . 'users/' . $row['comusers_id'] . '</loc>' . NR;
                $out .= $t . $t . '<lastmod>' . $date . '</lastmod>' . NR;
                $out .= $t . $t . '<changefreq>' . $options['freq_priority']['comuser']['changefreq'] . '</changefreq>' . NR;
                $out .= $t . $t . '<priority>' . $options['freq_priority']['comuser']['priority'] . '</priority>' . NR;
                $out .= $t . '</url>' . NR;
            }
        }
    }
    // и все юзеры
    if ($options['users_show']) {
        $CI->db->select('users_id');
        $query = $CI->db->get('users');
        if ($query->num_rows() > 0) {
            foreach ($query->result_array() as $row) {
                $out .= $t . '<url>' . NR;
                $out .= $t . $t . '<loc>' . $url . 'author/' . $row['users_id'] . '</loc>' . NR;
                $out .= $t . $t . '<lastmod>' . $date . '</lastmod>' . NR;
                $out .= $t . $t . '<changefreq>' . $options['freq_priority']['user']['changefreq'] . '</changefreq>' . NR;
                $out .= $t . $t . '<priority>' . $options['freq_priority']['user']['priority'] . '</priority>' . NR;
                $out .= $t . '</url>' . NR;
            }
        }
    }
    $out .= mso_hook('xml_sitemap');
    # хук, если нужно добавить свои данные
    $out .= NR . '</urlset>' . NR;
    $fn = getinfo('FCPATH') . 'sitemap.xml';
    write_file($fn, $out);
    return $args;
    // для обеспечения цепочки хуков
}
Esempio n. 6
0
function _mso_sql_build_home($r, &$pag)
{
    $CI =& get_instance();
    $offset = 0;
    if ($r['cat_id']) {
        $cat_id = mso_explode($r['cat_id']);
    } else {
        $cat_id = false;
    }
    $r['page_id'] = mso_explode($r['page_id']);
    // еслу указан массив номеров рубрик, значит выводим только его
    if ($r['categories']) {
        $categories = true;
    } else {
        $categories = false;
    }
    // если указаны номера записей, котоыре следует исключить
    if ($r['exclude_page_id']) {
        $exclude_page_id = true;
    } else {
        $exclude_page_id = false;
    }
    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.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['type']) {
            if (is_array($r['type'])) {
                $CI->db->where_in('page_type.page_type_name', $r['type']);
            } else {
                $CI->db->where('page_type.page_type_name', $r['type']);
            }
        }
        if ($r['page_id']) {
            $CI->db->where_in('page.page_id', $r['page_id']);
        }
        if ($r['page_id_autor']) {
            $CI->db->where('page.page_id_autor', $r['page_id_autor']);
        }
        $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id');
        if ($cat_id) {
            $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id', 'left');
            $CI->db->join('category', 'cat2obj.category_id = category.category_id');
            $CI->db->where_in('category.category_id', $cat_id);
        }
        if ($categories) {
            $CI->db->where_in('category.category_id', $r['categories']);
        }
        if ($exclude_page_id) {
            $CI->db->where_not_in('page.page_id', $r['exclude_page_id']);
        }
        $CI->db->order_by('page_date_publish', 'desc');
        $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 {
            # такие селекты теперь нужно вызывать с false в конце...
            $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, page_id_parent, 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_id']) {
        $CI->db->where_in('page.page_id', $r['page_id']);
    }
    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']);
        }
    }
    // $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_feed_allow', '1');
    }
    if ($r['page_id_autor']) {
        $CI->db->where('page.page_id_autor', $r['page_id_autor']);
    }
    $CI->db->join('users', 'users.users_id = page.page_id_autor', 'left');
    $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id', 'left');
    if ($cat_id) {
        $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id', 'left');
        $CI->db->join('category', 'cat2obj.category_id = category.category_id');
        $CI->db->where_in('category.category_id', $cat_id);
    }
    if ($categories) {
        $CI->db->where_in('category.category_id', $r['categories']);
    }
    if ($exclude_page_id) {
        $CI->db->where_not_in('page.page_id', $r['exclude_page_id']);
    }
    // экранирование CodeIgniter! Они там что мухоморов объелись?! Приходится делать свои замены!
    if ($r['page_id']) {
        $CI->db->order_by('FIELD(page_id_MSO_ZAP_' . implode('_MSO_ZAP_', $r['page_id']) . ')');
    } else {
        $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();
    }
}
Esempio n. 7
0
ob_start();
$admin_menu_hook = mso_hook('mso_admin_menu', mso_admin_menu());
$admin_menu = ob_get_contents() . $admin_menu_hook;
ob_end_clean();
ob_start();
$admin_footer_hook = mso_hook('mso_admin_footer', mso_admin_footer());
$admin_footer = ob_get_contents() . $admin_footer_hook;
ob_end_clean();
// url каталог текущего шаблона
$admin_template_url = getinfo('admin_url') . 'template/' . mso_get_option('admin_template', 'general', 'default') . '/';
$admin_css = $admin_template_url . 'assets/css/style.css';
$admin_css = mso_hook('admin_css', $admin_css);
$admin_css_profile = '';
// дополнительные css-файлы
if ($admin_css_profile_s = mso_get_option('admin_template_profile', 'general', '')) {
    $admin_css_profile_s = mso_explode($admin_css_profile_s, false);
    foreach ($admin_css_profile_s as $css) {
        $admin_css_profile .= '<link rel="stylesheet" href="' . $admin_template_url . 'profiles/' . $css . '">';
    }
}
$admin_title = t('Админ-панель') . ' - ' . mso_hook('admin_title', mso_head_meta('title'));
?>
<!DOCTYPE HTML>
<html><head>
<meta charset="UTF-8">
<title><?php 
echo $admin_title;
?>
</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="MaxSite CMS">
Esempio n. 8
0
function tweetmeme_com_content($text = '')
{
    global $page;
    if (!is_type('page') and !is_type('home')) {
        return $text;
    }
    // если запись не опубликована, не отображаем блок
    if (is_type('page') and isset($page['page_status']) and $page['page_status'] != 'publish') {
        return $text;
    }
    $options = mso_get_option('plugin_tweetmeme_com', 'plugins', array());
    // получаем опции
    // отображать только на одиночной странице
    if (!isset($options['show_only_page'])) {
        $options['show_only_page'] = 0;
    }
    if ($options['show_only_page'] and !is_type('page')) {
        return $text;
    }
    if (is_type('page') and isset($options['page_type']) and $options['page_type']) {
        $p_type_name = mso_explode($options['page_type'], false);
        // нет у указанных типах страниц
        if (!in_array($page['page_type_name'], $p_type_name)) {
            return $text;
        }
    }
    // стиль выравнивания
    if (!isset($options['style'])) {
        $options['style'] = '';
    }
    if (!isset($options['align'])) {
        $options['align'] = 'right';
    }
    if ($options['style']) {
        $style = ' style="' . $options['style'] . '"';
    } else {
        if ($options['align'] == 'left') {
            $style = ' style="float: left; margin-right: 10px;"';
        } elseif ($options['align'] == 'right') {
            $style = ' style="float: right; margin-left: 10px; width: "';
        } else {
            $style = '';
        }
    }
    if (!isset($options['twitter_orig'])) {
        $options['twitter_orig'] = false;
    }
    // если использовать вывод с tweetmeme.com
    if (!$options['twitter_orig']) {
        if (!isset($options['tweetmeme_style'])) {
            $options['tweetmeme_style'] = 'none';
        }
        if (is_type('home')) {
            $js1 = 'tweetmeme_url = \'' . getinfo('site_url') . 'page/' . $page['page_slug'] . '\';';
        } else {
            $js1 = 'tweetmeme_url = \'' . mso_current_url(true) . '\';';
        }
        if ($options['tweetmeme_style'] == 'compact') {
            $js2 = 'tweetmeme_style = \'compact\';';
        } else {
            $js2 = '';
        }
        if ($js1 or $js2) {
            $js = '<script>' . $js1 . $js2 . '</script>';
        } else {
            $js = '';
        }
        // $text = '<span style="display: none"><![CDATA[<noindex>]]></span><div class="tweetmeme_com"' . $style . '>' . $js . '<script src="' . getinfo('plugins_url'). 'tweetmeme_com/button.js"></script></div><span style="display: none"><![CDATA[</noindex>]]></span>' . $text;
        $text = '<div class="tweetmeme_com"' . $style . '>' . $js . '<script src="http://tweetmeme.com/i/scripts/button.js"></script></div>' . $text;
    } else {
        // блок выводится с оригинального twitter.com
        if (is_type('home')) {
            $url = getinfo('site_url') . 'page/' . $page['page_slug'];
        } else {
            $url = mso_current_url(true);
        }
        if (!isset($options['twitter_data-count'])) {
            $options['twitter_data-count'] = 'vertical';
        }
        $options['twitter_data-count'] = ' data-count="' . $options['twitter_data-count'] . '" ';
        if (!isset($options['twitter_data-via'])) {
            $options['twitter_data-via'] = '';
        }
        if ($options['twitter_data-via']) {
            $options['twitter_data-via'] = ' data-via="' . $options['twitter_data-via'] . '" ';
        }
        $text = '<div class="tweetmeme_com"' . $style . '>' . '<a rel="nofollow" href="http://twitter.com/share" class="twitter-share-button" data-url="' . $url . '"' . $options['twitter_data-count'] . ' data-text="' . $page['page_title'] . '" ' . $options['twitter_data-via'] . '>Tweet</a>
		<script src="http://platform.twitter.com/widgets.js"></script>' . '</div>' . $text;
    }
    return $text;
}
Esempio n. 9
0
function add_new_page($fn, $UP_DIR)
{
    global $MSO;
    $data = file_get_contents($fn);
    if ($data and preg_match('!(.*?)\\n(---)(.*)!is', $data, $conf)) {
        // только если есть шапка и текст
        if (isset($conf[1]) and isset($conf[3])) {
            $top = trim($conf[1]);
            $text = trim($conf[3]);
            $comments = array();
            // комментарии, если есть
            // в тексте может быть секция ---COMMENTS-START--- ---COMMENTS-END---
            if (preg_match('!(.*?)\\n(---COMMENTS-START---)(.*)\\n(---COMMENTS-END---)!is', $text, $t2)) {
                if (isset($t2[4])) {
                    $text = trim($t2[1]);
                    $comments = trim($t2[3]);
                    // комментарии в свою очередь разбиваются ---
                    $comments = array_map('trim', explode('---', $comments));
                }
            }
            $conf = _parse_key_val($top);
            // _log($conf, 'conf');
            // обязательные поля только TITLE
            if (!isset($conf['TITLE'])) {
                return;
            }
            // формируем данные для постинга
            // дополнительные мета-данные
            // вначале формируем общий массив, после выгоняем его в ##METAFIELD##
            $page_meta_options = array();
            $page_meta_options['title'] = isset($conf['META-TITLE']) ? $conf['META-TITLE'] : '';
            $page_meta_options['description'] = isset($conf['META-DESCRIPTION']) ? $conf['META-DESCRIPTION'] : '';
            $page_meta_options['keywords'] = isset($conf['META-KEYWORDS']) ? $conf['META-KEYWORDS'] : '';
            $page_meta_options['image_for_page'] = isset($conf['META-IMAGE_FOR_PAGE']) ? $conf['META-IMAGE_FOR_PAGE'] : '';
            $page_meta_options['image_for_page_out'] = isset($conf['META-IMAGE_FOR_PAGE_OUT']) ? $conf['META-IMAGE_FOR_PAGE_OUT'] : '';
            $page_meta_options['page_template'] = isset($conf['META-PAGE_TEMPLATE']) ? $conf['META-PAGE_TEMPLATE'] : '';
            $page_meta_options['page_css_profiles'] = isset($conf['META-PAGE_CSS_PROFILES']) ? $conf['META-PAGE_CSS_PROFILES'] : '';
            $page_meta_options['info-top-custom'] = isset($conf['META-INFO-TOP-CUSTOM']) ? $conf['META-INFO-TOP-CUSTOM'] : '';
            $page_meta_options['parser_content'] = isset($conf['META-PARSER_CONTENT']) ? $conf['META-PARSER_CONTENT'] : 'Default';
            // прогоняем текст через парсер
            $parser = $page_meta_options['parser_content'];
            // парсер
            $parser_all = mso_hook('parser_register');
            // все зарегистрированные парсеры
            // если парсеры не зарегистрированы, то ничего не делаем
            if (isset($parser_all[$parser]['content_post_edit'])) {
                $func = $parser_all[$parser]['content_post_edit'];
                // функцию, которую нужно выполнить
                if (function_exists($func)) {
                    $text = $func($text);
                }
                // прогоняем текст через парсер
            }
            $meta_options = '';
            foreach ($page_meta_options as $key => $val) {
                $meta_options .= $key . '##VALUE##' . trim($val) . '##METAFIELD##';
            }
            // TYPE: blog — тип записи — делаем запрос к существующим типам
            // поскольку тип нужно будет преобразовать в его id
            $CI =& get_instance();
            $query = $CI->db->get('page_type');
            $res = $query->result_array();
            $page_type = array();
            foreach ($res as $key => $row) {
                $page_type[$row['page_type_name']] = $row['page_type_id'];
            }
            $type = isset($conf['TYPE']) ? $conf['TYPE'] : 'blog';
            if (isset($page_type[$type])) {
                $page_type_id = $page_type[$type];
            } else {
                $page_type_id = $page_type['blog'];
            }
            // получаем все рубрики, смотрим верно ли они указаны
            // если нет, то рубрику не ставим
            // на выходе массив id реальных рубрик
            $CI->db->select('category_id, category_name, category_slug');
            $CI->db->where('category_type', 'page');
            $query = $CI->db->get('category');
            $all_cats = $query->result_array();
            $cat = array();
            // рубрики указываются CAT_ID или CAT_SLUG или CAT
            if (isset($conf['CAT_ID'])) {
                if ($c1 = mso_explode($conf['CAT_ID'])) {
                    // перебираем и ищем их в $all_cats
                    // если есть добавляем номера в общий $cat
                    foreach ($c1 as $id) {
                        foreach ($all_cats as $catX) {
                            if ($catX['category_id'] == $id) {
                                $cat[] = $id;
                            }
                        }
                    }
                }
            } elseif (isset($conf['CAT_SLUG'])) {
                if ($c1 = mso_explode(strtolower($conf['CAT_SLUG']), false)) {
                    foreach ($c1 as $slug) {
                        foreach ($all_cats as $catX) {
                            if ($catX['category_slug'] == $slug) {
                                $cat[] = $catX['category_id'];
                            }
                        }
                    }
                }
            } elseif (isset($conf['CAT'])) {
                // указанные рубрики разделются /
                $c1 = explode('/', trim(mb_strtolower($conf['CAT'])));
                $c1 = array_map('trim', $c1);
                $c1 = array_map('trim', $c1);
                $c1 = array_unique($c1);
                if ($c1) {
                    foreach ($c1 as $name) {
                        foreach ($all_cats as $catX) {
                            if (mb_strtolower($catX['category_name']) == $name) {
                                $cat[] = $catX['category_id'];
                            }
                        }
                    }
                }
            }
            // _log($cat, 'cat');
            // _log($all_cats, 'all_cats');
            $data = array('page_title' => $conf['TITLE'], 'page_content' => $text, 'page_type_id' => $page_type_id, 'page_meta_options' => $meta_options, 'page_date_publish' => isset($conf['DATE']) ? $conf['DATE'] : date('Y-m-d H:i:s'));
            if (isset($conf['STATUS'])) {
                $data['page_status'] = $conf['STATUS'];
            }
            if (isset($conf['MENU_ORDER'])) {
                $data['page_menu_order'] = (int) $conf['MENU_ORDER'];
            }
            if (isset($conf['COMMENT_ALLOW'])) {
                $data['page_comment_allow'] = $conf['COMMENT_ALLOW'];
            }
            if (isset($conf['PASSWORD'])) {
                $data['page_password'] = $conf['PASSWORD'];
            }
            if (isset($conf['FEED_ALLOW'])) {
                $data['page_feed_allow'] = (int) $conf['FEED_ALLOW'];
            }
            if (isset($conf['ID_AUTHOR'])) {
                $data['page_id_autor'] = (int) $conf['ID_AUTHOR'];
            }
            if (isset($conf['SLUG'])) {
                $data['page_slug'] = $conf['SLUG'];
            }
            if (isset($conf['TAG'])) {
                $data['page_tags'] = $conf['TAG'];
            }
            if ($cat) {
                $data['page_id_cat'] = implode(',', $cat);
            }
            // _log($data, 'mso_new_page');
            // функции редактирования
            require_once getinfo('common_dir') . 'functions-edit.php';
            $result = mso_new_page($data);
            // _log();
            // _log($result, 'result');
            $page_id = 0;
            if (isset($result['result'][0])) {
                $page_id = $result['result'][0];
                echo $result['description'] . ' (' . str_replace($UP_DIR, '', $fn) . '): ID = ' . $page_id;
            } else {
                echo $result['description'] . ' (' . str_replace($UP_DIR, '', $fn) . ')';
            }
            // добавляем комментарии
            if ($page_id and $comments) {
                foreach ($comments as $comment) {
                    $com = _parse_key_val($comment);
                    if (isset($com['comment_content'])) {
                        $comment_content = trim(str_replace("__NR__", "\n", $com['comment_content']));
                        $com_data = array('comments_page_id' => $page_id, 'comments_content' => $comment_content, 'comments_date' => isset($com['comment_date']) ? $com['comment_date'] : date('Y-m-d H:i:s'), 'comments_author_ip' => isset($com['comment_author_IP']) ? $com['comment_author_IP'] : '1.1.1.1', 'comments_approved' => 1, 'comments_author_name' => isset($com['comment_author']) ? $com['comment_author'] : 'Аноним');
                        $CI->db->insert('comments', $com_data);
                    }
                }
            }
        } else {
            echo 'Неверный фрормат файла (' . str_replace($UP_DIR, '', $fn) . ')';
        }
    } else {
        echo 'Неверный фрормат файла (' . str_replace($UP_DIR, '', $fn) . ')';
    }
}
Esempio n. 10
0
function rss_get_go($arg)
{
    // здесь нет проверок на корректность $arg, потому что мы её уже выполнили в rss_get_widget_custom
    if (!$arg['url']) {
        return false;
    }
    # проверим кеш, может уже есть в нем все данные
    $cache_key = 'rss/' . 'rss_get_' . md5(serialize($arg));
    $k = mso_get_cache($cache_key, true);
    if ($k) {
        return $k;
        // да есть в кэше
    } else {
        require_once getinfo('plugins_dir') . 'rss_get/lastrss.php';
        $rss_pars = new lastRSS();
        $rss_pars->convert_cp = $arg['charset'];
        $rss_pars->itemtags = mso_explode($arg['fields'], false);
        $rss = $rss_pars->Get($arg['url']);
    }
    if (!$rss) {
        return '';
    }
    if (isset($rss[$arg['fields_items']])) {
        $rss = $rss[$arg['fields_items']];
        $rss = array_slice($rss, 0, $arg['count']);
        // колво записей
    } else {
        return '';
        // нет items
    }
    // меняем ключи с values и заполняем нулями - это шаблон для полей
    $fields = array_fill_keys(mso_explode($arg['fields'], false), false);
    $out = '';
    foreach ($rss as $item) {
        // заполним массив шаблона полей значениями из итема
        $fields_out = $fields;
        foreach ($fields as $field => $tmp) {
            if (isset($item[$field])) {
                $fields_out[$field] = $item[$field];
                continue;
            }
        }
        $out1 = $arg['format'];
        foreach ($fields_out as $field => $value) {
            // обратное преобразование в html
            $value = str_replace('&lt;', '<', $value);
            $value = str_replace('&gt;', '>', $value);
            $value = str_replace('&amp;', '&', $value);
            $value = str_replace('<![CDATA[', '', $value);
            $value = str_replace(']]>', '', $value);
            // если стоит максимальное колво слов, то обрежем лишнее
            if ($arg['max_word_description'] and $field != 'link') {
                $value = mso_str_word($value, $arg['max_word_description']);
            }
            // если поле содержит date, то пробуем его преобразовать в нужный нам формат даты
            if (strpos($field, 'dc:date') !== false or strpos($field, 'date') !== false or $field == 'published' or $field == 'updated') {
                if (($d = strtotime($value)) !== -1) {
                    // успешное преобразование
                    $value = date($arg['format_date'], $d);
                }
            }
            if ($field == 'link') {
                $link_host = parse_url($value);
                $link_host = $link_host['host'];
                $out1 = str_replace('[link-host]', $link_host, $out1);
            }
            $out1 = str_replace('[' . $field . ']', $value, $out1);
        }
        $out .= $out1;
    }
    if ($out and $arg['time_cache']) {
        mso_add_cache($cache_key, $out, $arg['time_cache'] * 60, true);
    }
    return $out;
}
Esempio n. 11
0
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'] = '%TITLE%';
    }
    if (!isset($arg['comments_format'])) {
        $arg['comments_format'] = t(' - комментариев: ') . '%COUNT%';
    }
    if (!isset($arg['exclude_cat'])) {
        $arg['exclude_cat'] = '';
    }
    if (!isset($arg['include_cat'])) {
        $arg['include_cat'] = '';
    }
    if (!isset($arg['img_prev'])) {
        $arg['img_prev'] = '';
    }
    if (!isset($arg['img_prev_def'])) {
        $arg['img_prev_def'] = '';
    }
    if (!isset($arg['img_prev_attr'])) {
        $arg['img_prev_attr'] = 'class="left"';
    }
    if (!isset($arg['max_words'])) {
        $arg['max_words'] = 20;
    }
    if (!isset($arg['text_posle'])) {
        $arg['text_posle'] = '';
    }
    if (!isset($arg['header'])) {
        $arg['header'] = mso_get_val('widget_header_start', '<h2 class="box"><span>') . t('Последние записи') . mso_get_val('widget_header_end', '</span></h2>');
    }
    if (!isset($arg['block_start'])) {
        $arg['block_start'] = '<div class="last-pages"><ul class="is_link">';
    }
    if (!isset($arg['block_end'])) {
        $arg['block_end'] = '</ul></div>';
    }
    $cache_key = 'last_pages_widget' . serialize($arg) . $num;
    $k = mso_get_cache($cache_key);
    if ($k) {
        $current_url = getinfo('siteurl') . mso_current_url();
        // текущий урл
        $k = str_replace('<a href="' . $current_url . '">', '<a href="' . $current_url . '" class="current_url">', $k);
        return $k;
    }
    $arg['exclude_cat'] = mso_explode($arg['exclude_cat']);
    // рубрики из строки в массив
    $arg['include_cat'] = mso_explode($arg['include_cat']);
    // рубрики из строки в массив
    $CI =& get_instance();
    if (strpos($arg['format'], '%TEXT%') === false and strpos($arg['format'], '%TEXT_CUT%') === false and strpos($arg['format'], '%TEXT_PREV%') === false) {
        $CI->db->select('page.page_id, page_type_name, page_type_name AS page_content, page_slug, page_title, page_date_publish, page_status, COUNT(comments_id) AS page_count_comments', false);
    } else {
        $CI->db->select('page.page_id, page.page_content, page_type_name, page_slug, page_title, page_date_publish, page_status, COUNT(comments_id) AS page_count_comments');
    }
    $CI->db->from('page');
    $CI->db->where('page_status', 'publish');
    //$CI->db->where('page_date_publish <', date('Y-m-d H:i:s'));
    $time_zone = getinfo('time_zone');
    if ($time_zone < 10 and $time_zone > 0) {
        $time_zone = '0' . $time_zone;
    } elseif ($time_zone > -10 and $time_zone < 0) {
        $time_zone = '0' . $time_zone;
        $time_zone = str_replace('0-', '-0', $time_zone);
    } else {
        $time_zone = '00.00';
    }
    $time_zone = str_replace('.', ':', $time_zone);
    // $CI->db->where('page_date_publish < ', 'NOW()', false);
    $CI->db->where('page_date_publish < ', 'DATE_ADD(NOW(), INTERVAL "' . $time_zone . '" HOUR_MINUTE)', false);
    if ($arg['page_type']) {
        $CI->db->where('page_type_name', $arg['page_type']);
    }
    $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id');
    $CI->db->join('comments', 'comments.comments_page_id = page.page_id AND comments_approved = 1', 'left');
    if ($arg['exclude_cat']) {
        $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id', 'left');
        $CI->db->where_not_in('cat2obj.category_id', $arg['exclude_cat']);
    }
    if ($arg['include_cat']) {
        $CI->db->join('cat2obj', 'cat2obj.page_id = page.page_id', 'left');
        $CI->db->where_in('cat2obj.category_id', $arg['include_cat']);
    }
    $CI->db->order_by($arg['sort'], $arg['sort_order']);
    $CI->db->group_by('page.page_id');
    $CI->db->group_by('comments_page_id');
    $CI->db->limit($arg['count']);
    $query = $CI->db->get();
    if ($query->num_rows() > 0) {
        $pages = $query->result_array();
        require_once getinfo('common_dir') . 'category.php';
        require_once getinfo('common_dir') . 'meta.php';
        $all_cat = mso_cat_array_single();
        // все рубрики
        $out = '';
        foreach ($pages as $key => $page) {
            // метаполе превьюшки
            if (strpos($arg['format'], '%IMG_PREV%') !== false) {
                if ($img_prev = mso_get_meta($arg['img_prev'], 'page', $page['page_id'])) {
                    if (isset($img_prev[0]['meta_value']) and $img_prev[0]['meta_value']) {
                        $img_prev = '<img src="' . $img_prev[0]['meta_value'] . '" alt="" ' . $arg['img_prev_attr'] . '> ';
                    } else {
                        $img_prev = '<img src="' . $arg['img_prev_def'] . '" alt="" ' . $arg['img_prev_attr'] . '> ';
                    }
                } else {
                    if ($arg['img_prev_def']) {
                        $img_prev = '<img src="' . $arg['img_prev_def'] . '" alt="" ' . $arg['img_prev_attr'] . '> ';
                    } else {
                        $img_prev = '';
                    }
                }
            } else {
                $img_prev = '';
            }
            $out .= $arg['format'];
            $out = str_replace('%TITLE%', mso_page_title(mso_slug($page['page_slug']), $page['page_title'], '', '', true, false), $out);
            $out = str_replace('%URL%', getinfo('site_url') . 'page/' . mso_slug($page['page_slug']), $out);
            $out = str_replace('%DATE%', mso_page_date($page['page_date_publish'], $arg['date_format'], '', '', false), $out);
            if ($page['page_count_comments']) {
                $comments_format = str_replace('%COUNT%', $page['page_count_comments'], $arg['comments_format']);
            } else {
                $comments_format = '';
            }
            $out = str_replace('%COMMENTS%', $comments_format, $out);
            $page_content = $page['page_content'];
            $page_content = mso_hook('content', $page_content);
            $page_content = mso_hook('content_auto_tag', $page_content);
            $page_content = mso_hook('content_balance_tags', $page_content);
            $page_content = mso_hook('content_out', $page_content);
            $out = str_replace('%TEXT%', mso_balance_tags(mso_auto_tag(mso_hook('content_complete', $page['page_content']))), $out);
            if (strpos($arg['format'], '%TEXT_PREV%') !== false) {
                $page_content = $page['page_content'];
                $page_content = mso_hook('content', $page_content);
                $page_content = mso_hook('content_auto_tag', $page_content);
                $page_content = mso_hook('content_complete', $page_content);
                $page_content = mso_str_word(strip_tags($page_content), $arg['max_words']) . ' ...';
                $out = str_replace('%TEXT_PREV%', $page_content, $out);
            }
            # если есть cut, то обрабатываем и его
            $page_content = str_replace('[xcut', '[cut', $page_content);
            if (preg_match('/\\[cut(.*?)?\\]/', $page_content, $matches)) {
                $page_content = explode($matches[0], $page_content, 2);
                $page_content = $page_content[0];
                $page_content = mso_hook('content_complete', $page_content);
            }
            $out = str_replace('%TEXT_CUT%', mso_balance_tags(mso_auto_tag($page_content)), $out);
            $out = str_replace('%IMG_PREV%', $img_prev, $out);
            if (is_type_slug('page', mso_slug($page['page_slug']))) {
                $out = str_replace('<li>', '<li class="current_url_page">', $out);
            }
            if (isset($arg['include_cat'][0]) and is_page_cat($arg['include_cat'][0])) {
                $out = str_replace('<li>', '<li class="current_url_cat">', $out);
            }
            if (isset($arg['include_cat'][0]) and is_type_slug('category', $all_cat[$arg['include_cat'][0]]['category_slug']) and in_array($page['page_id'], $all_cat[$arg['include_cat'][0]]['pages'])) {
                $out = str_replace('<li>', '<li class="current_url_allcat">', $out);
            }
        }
        $out = $arg['header'] . $arg['block_start'] . NR . $out . $arg['block_end'];
        $out = str_replace('</li>', '<div class="clearfix"></div></li>', $out);
        $out .= $arg['text_posle'];
        mso_add_cache($cache_key, $out);
        // сразу в кэш добавим
        // отметим текущую рубрику. Поскольку у нас к кэше должен быть весь список и не делать кэш для каждого url
        // то мы просто перед отдачей заменяем текущий url на url с li.current_url
        $current_url = getinfo('siteurl') . mso_current_url();
        // текущий урл
        $out = str_replace('<a href="' . $current_url . '">', '<a href="' . $current_url . '" class="current_url">', $out);
        return $out;
    }
}
Esempio n. 12
0
        echo '</div>';
    }
}
// если указан текст перед всеми записями, то выводим и его
if ($home_text_do = mso_get_option('home_text_do', 'templates', '')) {
    echo $home_text_do;
}
if ($f = mso_page_foreach('home-cat-block-text-do')) {
    require $f;
}
// Поскольку у нас вывод рубрик блоками, то нужно считать каждую указанную рубрику и в цикле
// получить для неё все данные и сразу вывести
// параметры для получения страниц - общие для всех
$par = array('limit' => mso_get_option('home_limit_post', 'templates', '7'), 'page_id' => mso_get_option('home_page_id', 'templates', '0'), 'content' => mso_get_option('home_full_text', 'templates', '1'), 'cut' => mso_get_option('more', 'templates', tf('Читать полностью »')), 'cat_order' => 'category_id_parent', 'cat_order_asc' => 'asc', 'pagination' => false);
$home_cat_block = mso_get_option('home_cat_id', 'templates', '0');
$home_cat_block = mso_explode($home_cat_block);
// в массив
# все блоки можно закэшировать
$key_home_cache = serialize($home_cat_block);
if ($k = mso_get_cache($key_home_cache)) {
    print $k;
} else {
    ob_start();
    if ($home_cat_block) {
        $all_cats = mso_cat_array_single();
        // список всех рубрик
        foreach ($home_cat_block as $cat_id) {
            // выводим кастомный вывод на этот цикл, чтобы иметь возможность менять его целиком
            if ($f = mso_page_foreach('home-cat-block')) {
                require $f;
                // подключаем кастомный вывод