Cворачивание категорий с запоминанием

Статус
В этой теме нельзя размещать новые ответы.

ВаленокPC

Пользователь
#1
Всем привет, вот решил сделать доброе людям! И так начнем!
__________________
Открываем ./index.php
__________________

Ищем там:

PHP:
// Build index page
$forums_count = 0;
foreach ($cat_forums as $cid => $c)
{
ЗАМЕНЯЕМ НА:
PHP:
$colcookie = '';
if(!empty($_COOKIE['collapsed']))
{
    $colcookie = $_COOKIE['collapsed'];
}

$collapsed = false;

if($colcookie)
{
    $col = explode(':', $colcookie);
    if(!is_array($col))
    {
        $col[0] = $colcookie; 
    }
    unset($collapsed);
    foreach($col as $val)
    {
        $co = 'cat_'.$val;
        $collapsed[$co] = true;
    }
}

// Build index page
$forums_count = 0;
foreach ($cat_forums as $cid => $c)
{

    $expdisplay = $expclass = '';
    $collapsed_name = "cat_" . $cid;
    if(isset($collapsed[$collapsed_name]) && $collapsed[$collapsed_name])
    {
        $expcolimage = "collDOWN.png";
        $expdisplay = "display: none;";
        $expclass = "cat_hide";
    }
    else
    {
        $expcolimage = "collUP.png";
    }
Чуть ниже ищем:
PHP:
        'U_VIEWCAT' => CAT_URL . $cid,
после вставляем :
PHP:
        'CAT_EXPCOLIMAGE' => $expcolimage,
        'CAT_EXPDISPLAY' => $expdisplay,
        'CAT_EXPCOLHIDE' => $expclass,
________________
Открываем ./styles/templates/default/index.tpl
________________
Ищем там:
Код:
<!-- BEGIN c -->
<div class="category">
    <h3 class="cat_title"><a href="{c.U_VIEWCAT}">{c.CAT_TITLE}</a></h3>
    <div class="f_tbl_wrap">
Заменяем на:
Код:
<!-- BEGIN c -->
<div class="category {c.CAT_EXPCOLHIDE}">
    <h3 class="cat_title">
        <a href="{U_VIEWCAT}">{c.CAT_TITLE}</a>
        <img id="{c.CAT_ID}_img" class="toggleCategory" src="./styles/images/{c.CAT_EXPCOLIMAGE}">
    </h3>
    <div id="cat_{c.CAT_ID}" class="f_tbl_wrap" style="{c.CAT_EXPDISPLAY}">
________________
Открываем ./styles/templates/default/css/main.css
________________
В самый конец вставляем:
Код:
.cat_hide .cat_title {
    opacity: 0.5;
    transition: all 0.3s linear 0s;
}
.toggleCategory {
    cursor: pointer;
    float: right;
    margin-top: 2px;
    vertical-align: middle;
    width: auto;
}
________________
Открываем ./styles/js/main.js
________________
В самый конец вставляем:
Код:
var Cookie = {
    get: function(name)
    {
        name = name;
        return $.cookie(name);
    },

    set: function(name, value, expires)
    {
        name = name;
        if(!expires)
        {
            expires = 315360000;
        }

        expire = new Date();
        expire.setTime(expire.getTime()+(expires * 1000));

        options = {
            expires: expire,
            path: cookiePath,
            domain: cookieDomain
        };

        return $.cookie(name, value, options);
    },

    delete: function(name)
    {
        name = name;

        options = {
            path: cookiePath,
            domain: cookieDomain
        };
        return $.removeCookie(name, options);
    }
};

var expandables = {

    init: function()
    {
        var expanders = $('.toggleCategory');

        if(expanders.length)
        {
            expanders.each(function()
            {
                var expander = $(this);
                if(expander.attr('id') == false)
                {
                    return;
                }
                expander.click(function()
                {
                    controls = expander.attr("id").replace('_img', '');
                    expandables.expandCollapse(this, controls);
                });
            });
        }
    },

    expandCollapse: function(e, controls)
    {
        element = $(e);

        if(!element || controls == false)
        {
            return false;
        }
        var expandedItem = $('#cat_'+ controls);

        if(expandedItem.length /*&& !collapsedItem.length*/)
        {
            if(expandedItem.is(':hidden'))
            {
                expandedItem.slideToggle('fast');
                element.attr('src', element.attr('src').replace('collDOWN.png', 'collUP.png'));
                element.parent().parent('div .category').removeClass('cat_hide');
                this.save(controls);
            }
            else
            {
                expandedItem.slideToggle('fast');
                element.attr('src', element.attr('src').replace('collUP.png', 'collDOWN.png'));
                element.parent().parent('div .category').addClass('cat_hide');
                this.save(controls, true);
            }
        }
        return true;
    },

    save: function(id, add)
    {
        var saved = [];
        var newCollapsed = [];
        var collapsed = Cookie.get('collapsed');

        if(collapsed)
        {
            saved = collapsed.split(':');

            $.each(saved, function(intIndex, objValue)
            {
                if(objValue != id && objValue != "")
                {
                    newCollapsed[newCollapsed.length] = objValue;
                }
            });
        }

        if(add)
        {
            newCollapsed[newCollapsed.length] = id;
        }
        Cookie.set('collapsed', newCollapsed.join(':'));
    }
};

$(document).ready(function() {
    expandables.init();
});
Почти все: в папку с изображениями (./styles/images) закинуть два файла!!!
 

Вложения

Exile

Администратор
#2
Древний мод, конечно. В движке, между прочим, из коробки реализован куда более интересный вариант сворачивания - при котором на главной странице не остается миллион "остатков" с заголовками категорий.
 

Exile

Администратор
#5
Удалено, поскольку в движке реализован более современный и правильный вариант. Безнадежно устарело.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху