Example #1
0
function mso_create_list($a = array(), $options = array(), $child = false)
{
    if (!$a) {
        return '';
    }
    if (!isset($options['class_ul'])) {
        $options['class_ul'] = '';
    }
    // класс UL
    if (!isset($options['class_ul_style'])) {
        $options['class_ul_style'] = '';
    }
    // свой стиль для UL
    if (!isset($options['class_child'])) {
        $options['class_child'] = 'child';
    }
    // класс для ребенка
    if (!isset($options['class_child_style'])) {
        $options['class_child_style'] = '';
    }
    // свой стиль для ребенка
    if (!isset($options['class_current'])) {
        $options['class_current'] = 'current-page';
    }
    // класс li текущей страницы
    if (!isset($options['class_current_style'])) {
        $options['class_current_style'] = '';
    }
    // стиль li текущей страницы
    if (!isset($options['class_li'])) {
        $options['class_li'] = '';
    }
    // класс LI
    if (!isset($options['class_li_style'])) {
        $options['class_li_style'] = '';
    }
    // стиль LI
    if (!isset($options['format'])) {
        $options['format'] = '[LINK][TITLE][/LINK]';
    }
    // формат ссылки
    if (!isset($options['format_current'])) {
        $options['format_current'] = '<span>[TITLE]</span>';
    }
    // формат для текущей
    if (!isset($options['title'])) {
        $options['title'] = 'page_title';
    }
    // имя ключа для титула
    if (!isset($options['link'])) {
        $options['link'] = 'page_slug';
    }
    // имя ключа для слага
    if (!isset($options['descr'])) {
        $options['descr'] = 'category_desc';
    }
    // имя ключа для описания
    if (!isset($options['id'])) {
        $options['id'] = 'page_id';
    }
    // имя ключа для id
    if (!isset($options['slug'])) {
        $options['slug'] = 'page_slug';
    }
    // имя ключа для slug
    if (!isset($options['menu_order'])) {
        $options['menu_order'] = 'page_menu_order';
    }
    // имя ключа для menu_order
    if (!isset($options['id_parent'])) {
        $options['id_parent'] = 'page_id_parent';
    }
    // имя ключа для id_parent
    if (!isset($options['count'])) {
        $options['count'] = 'count';
    }
    // имя ключа для количества элементов
    if (!isset($options['prefix'])) {
        $options['prefix'] = 'page/';
    }
    // префикс для ссылки
    if (!isset($options['current_id'])) {
        $options['current_id'] = true;
    }
    // текущая страница отмечается по page_id - иначе по текущему url
    if (!isset($options['childs'])) {
        $options['childs'] = 'childs';
    }
    // поле для массива детей
    // если true, то главная рабрика выводится без ссылки в <span>
    if (!isset($options['group_header_no_link'])) {
        $options['group_header_no_link'] = false;
    }
    # функция, которая сработает на [FUNCTION]
    # эта функция получает в качестве параметра текущий массив $elem
    if (!isset($options['function'])) {
        $options['function'] = false;
    }
    if (!isset($options['nofollow']) or !$options['nofollow']) {
        $options['nofollow'] = '';
    } else {
        $options['nofollow'] = ' rel="nofollow"';
    }
    $class_child = $class_child_style = $class_ul = $class_ul_style = '';
    $class_current = $class_current_style = $class_li = $class_li_style = '';
    // [LEVEL] - заменяется на level-текущий уровень вложенности
    if ($options['class_child']) {
        $class_child = ' class="' . $options['class_child'] . ' [LEVEL]"';
    }
    static $level = 0;
    $class_child = str_replace('[LEVEL]', 'level' . $level, $class_child);
    if ($options['class_child_style']) {
        $class_child_style = ' style="' . $options['class_child_style'] . '"';
    }
    if ($options['class_ul']) {
        $class_ul = ' class="' . $options['class_ul'] . '"';
    }
    if ($options['class_ul_style']) {
        $class_ul_style = ' style="' . $options['class_ul_style'] . '"';
    }
    if ($options['class_current']) {
        $class_current = ' class="' . $options['class_current'] . '"';
    }
    if ($options['class_current_style']) {
        $class_current_style = ' style="' . $options['class_current_style'] . '"';
    }
    if ($options['class_li']) {
        $class_li = ' class="' . $options['class_li'] . ' group"';
    } else {
        $class_li = ' class="group"';
    }
    if ($options['class_li_style']) {
        $class_li_style = ' style="' . $options['class_li_style'] . '"';
    }
    if ($child) {
        $out = NR . '	<ul' . $class_child . $class_child_style . '>';
    } else {
        $out = NR . '<ul' . $class_ul . $class_ul_style . '>';
    }
    $current_url = getinfo('siteurl') . mso_current_url();
    // текущий урл
    // из текущего адресу нужно убрать пагинацию
    $current_url = str_replace('/next/' . mso_current_paged(), '', $current_url);
    foreach ($a as $elem) {
        $title = $elem[$options['title']];
        $elem_slug = mso_strip($elem[$options['link']]);
        // slug элемента
        $url = getinfo('siteurl') . $options['prefix'] . $elem_slug;
        // если это page, то нужно проверить вхождение этой записи в элемент рубрики
        // если есть, то ставим css-класс curent-page-cat
        $curent_page_cat_class = is_page_cat($elem_slug, false, false) ? ' class="curent-page-cat"' : '';
        $link = '<a' . $options['nofollow'] . ' href="' . $url . '" title="' . htmlspecialchars($title) . '"' . $curent_page_cat_class . '>';
        if (isset($elem[$options['descr']])) {
            $descr = $elem[$options['descr']];
        } else {
            $descr = '';
        }
        if (isset($elem[$options['count']])) {
            $count = $elem[$options['count']];
        } else {
            $count = '';
        }
        if (isset($elem[$options['id']])) {
            $id = $elem[$options['id']];
        } else {
            $id = '';
        }
        if (isset($elem[$options['slug']])) {
            $slug = $elem[$options['slug']];
        } else {
            $slug = '';
        }
        if (isset($elem[$options['menu_order']])) {
            $menu_order = $elem[$options['menu_order']];
        } else {
            $menu_order = '';
        }
        if (isset($elem[$options['id_parent']])) {
            $id_parent = $elem[$options['id_parent']];
        } else {
            $id_parent = '';
        }
        $cur = false;
        if ($options['current_id']) {
            if (isset($elem['current'])) {
                $e = $options['format_current'];
                $cur = true;
            } else {
                $e = $options['format'];
            }
        } else {
            if ($url == $current_url) {
                $e = $options['format_current'];
                $cur = true;
            } else {
                $e = $options['format'];
            }
        }
        $e = str_replace('[LINK]', $link, $e);
        $e = str_replace('[/LINK]', '</a>', $e);
        $e = str_replace('[TITLE]', $title, $e);
        $e = str_replace('[TITLE_HTML]', htmlspecialchars($title), $e);
        $e = str_replace('[DESCR]', $descr, $e);
        $e = str_replace('[DESCR_HTML]', htmlspecialchars($descr), $e);
        $e = str_replace('[ID]', $id, $e);
        $e = str_replace('[SLUG]', $slug, $e);
        $e = str_replace('[SLUG_HTML]', htmlspecialchars($slug), $e);
        $e = str_replace('[MENU_ORDER]', $menu_order, $e);
        $e = str_replace('[ID_PARENT]', $id_parent, $e);
        $e = str_replace('[COUNT]', $count, $e);
        $e = str_replace('[URL]', $url, $e);
        if ($options['function'] and function_exists($options['function'])) {
            $function = $options['function']($elem);
            $e = str_replace('[FUNCTION]', $function, $e);
        } else {
            $e = str_replace('[FUNCTION]', '', $e);
        }
        if (isset($elem[$options['childs']])) {
            if ($cur) {
                $out .= NR . '<li' . $class_current . $class_current_style . '>' . $e;
            } else {
                if ($options['group_header_no_link']) {
                    $out .= NR . '<li' . $class_li . $class_li_style . '><span class="group_header">' . $title . '</span>';
                } else {
                    $out .= NR . '<li' . $class_li . $class_li_style . '>' . $e;
                }
            }
            ++$level;
            $out .= mso_create_list($elem[$options['childs']], $options, true);
            --$level;
            $out .= NR . '</li>';
        } else {
            if ($child) {
                $out .= NR . '	';
            } else {
                $out .= NR;
            }
            // если нет детей, то уберем класс group
            $class_li_1 = str_replace('group', '', $class_li);
            if ($cur) {
                $out .= '<li' . $class_current . $class_current_style . '>' . $e . '</li>';
            } else {
                $out .= '<li' . $class_li_1 . $class_li_style . '>' . $e . '</li>';
            }
        }
    }
    if ($child) {
        $out .= NR . '	</ul>' . NR;
    } else {
        $out .= NR . '</ul>' . NR;
    }
    $out = str_replace('<li class="">', '<li>', $out);
    return $out;
}
Example #2
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;
    }
}