Вход Регистрация
Файл: upload/pages/catalog/sections.php
Строк: 101
<?php
require_once ($_SERVER['DOCUMENT_ROOT'] . '/core/core.php');

$id abs((int)($_GET['id'] ?? 0));
$section FetchAssoc(dbquery("SELECT * FROM `section` WHERE `id` = ?", [$id]));

if (empty(
$section['id'])) {
    
header("HTTP/1.0 404 Not Found");
    include (
$_SERVER['DOCUMENT_ROOT'] . '/pages/err_pages/404.php'); 
    exit();
}

$subcategory FetchAssoc(dbquery("SELECT * FROM `subcategory` WHERE `id` = ?", [$section['subcategory']]));
$category FetchAssoc(dbquery("SELECT * FROM `category` WHERE `id` = ?", [$section['category']]));

$breadcrumbs generateBreadcrumbs([
    [
'/''Главная'],
    [
'/category' $section['category'], $category['name']],
    [
'/subcategory' $section['subcategory'], $subcategory['name']],
    [
'#'$section['name']]
]);

// Получаем работы
$q dbquery("SELECT * FROM works WHERE section = ? ORDER BY up_time DESC, id DESC", [$id]);

$filtered = [];
$flagValue null;

while (
$work FetchAssoc($q)) {

    
$flag CryptorHash('1'$work['salt']);

    
$us_ban FetchAssoc(dbquery("SELECT id FROM users_banned WHERE us = ?", [$work['user_work']]));

    if (
$us_ban) continue;
    if (
$work['k_off'] === $flag) continue;
    if (
$work['del'] === $flag) continue;

    
$filtered[] = $work;
}

$total count($filtered);
$limit 52;

$first_52 array_slice($filtered0$limit);

$works_html = [];

foreach (
$first_52 as $work) {

    
// Передаём $work в компонент
    
$GLOBALS['work'] = $work;
    
$GLOBALS['user'] = $user;

    
// Подключаем компонент, который создаёт $work_item
    
require $_SERVER['DOCUMENT_ROOT'] . '/core/elements/work-box.php';

    
// Добавляем HTML в массив
    
$works_html[] = $work_item;
}


// Сайдбар
include $_SERVER['DOCUMENT_ROOT'] . '/core/elements/sidebars/section.php';

$page_html $view->render('pages/catalog/sections.html', [
    
'breadcrumbs_html' => $breadcrumbs['html'],
    
'breadcrumbs_json' => $breadcrumbs['json_ld'],

    
'section_name' => chars($section['name']),
    
'section_image' => chars($section['k_image']),
    
'section_id' => $id,
    
'limit' => $limit,

    
'sidebar' => $sidebar,
    
'works' => $works_html,
    
'show_more' => $total $limit
]);


require_once (
$_SERVER['DOCUMENT_ROOT'] . '/layout.php');
?>

<script>
$(document).on('click', '.sort-btn', function(e) {
    e.preventDefault();

    let categoryId = $(this).data('id');
    let isActive = $(this).hasClass('active');
    let group = $(this).closest('.sort_flex');

    // --- ЛОГИКА АКТИВАЦИИ ---

    // цена
    if ($(this).data('sort').includes('price')) {
        group.find('[data-sort^="price"]').removeClass('active');
        if (!isActive) $(this).addClass('active');
    }

    // рейтинг
    if ($(this).data('sort').includes('rating')) {
        group.find('[data-sort^="rating"]').removeClass('active');
        if (!isActive) $(this).addClass('active');
    }

    // тип (sale/order)
    if ($(this).data('sort') === 'sale' || $(this).data('sort') === 'order') {
        group.find('[data-sort="sale"], [data-sort="order"]').removeClass('active');
        if (!isActive) $(this).addClass('active');
    }

    // --- СБОР КОМБИНИРОВАННОГО sort ---

    let parts = [];

    // тип
    let typeSort = $('.sort-btn.active[data-sort="sale"], .sort-btn.active[data-sort="order"]').data('sort');
    if (typeSort) parts.push(typeSort);

    // рейтинг
    let ratingSort = $('.sort-btn.active[data-sort^="rating"]').data('sort');
    if (ratingSort) parts.push(ratingSort);

    // цена
    let priceSort = $('.sort-btn.active[data-sort^="price"]').data('sort');
    if (priceSort) parts.push(priceSort);

    // итоговый ключ
    let sortKey = parts.length ? parts.join('_') : 'default';

    // --- AJAX ---

    $.ajax({
        url: '/core/ajax/sort_section_handler.php',
        type: 'POST',
        data: {
            id: categoryId,
            sort: sortKey
        },
        success: function(response) {
            let order = response.split(',');
            let container = $('.category_list');

            order.forEach(function(id) {
                let el = container.find('[data-id="' + id + '"]');
                if (el.length) container.append(el);
            });
        }
    });
});
</script>

<script>
$(document).on('click', '#load-more', function() {

    let btn = $(this);
    let offset = parseInt(btn.data('offset'));
    let id = btn.data('id');

    $.ajax({
        url: '/core/ajax/load_more_section.php',
        type: 'POST',
        dataType: 'json',
        data: { id, offset },
        success: function(res) {

            $('.category_list').append(res.html);

            if (!res.show_more) {
                btn.remove();
            } else {
                btn.data('offset', offset + 52);
            }
        }
    });
});
</script>
Онлайн: 0
Реклама