Задать вопрос
  • Как передать значение из Select2 в другую функцию?

    @catch-a-chalk
    Irinka95, сейчас не у монитора, ну тут я уже решил придти к помощи нейронки, вот что выдает:

    $(document).ready(function() {
        // 1. Инициализация Select2
        $(".city").select2({
            ajax: {
                url: "/ajax.php?action=main&type=get_city",
                type: "post",
                dataType: 'json',
                delay: 250,
                data: function(params) {
                    return {
                        searchTerm: params.term
                    };
                },
                processResults: function(response) {
                    return {
                        results: response
                    };
                },
                cache: true
            },
            placeholder: "Выберите город",
            allowClear: true
        });
    
        // 2. Переменные состояния
        let selectedCity = null;
        let selectedCategories = [];
    
        // 3. Загрузка данных при старте (без фильтров)
        loadArticles();
    
        // 4. Обработчики событий
        $('.city').on('change', function() {
            selectedCity = $(this).val();
            loadArticles();
        });
    
        $('.category').on('change', function() {
            selectedCategories = $('.category:checked').map(function() {
                return $(this).val();
            }).get();
            loadArticles();
        });
    
        // 5. Основная функция загрузки
        function loadArticles() {
            $.ajax({
                url: '/ajax.php?action=main&type=get_data',
                method: 'POST',
                data: { 
                    city: selectedCity || '', // Пустая строка вместо null
                    category: selectedCategories.length ? selectedCategories : ''
                },
                beforeSend: function() {
                    $('#filterResults').html('<div class="loading">Загрузка...</div>');
                },
                success: function(response) {
                    $('#filterResults').html(response);
                },
                error: function(xhr) {
                    console.error('Ошибка:', xhr.responseText);
                }
            });
        }
    });


    Изменения в аяксе:
    // Обработка фильтров
    $sql = "SELECT * FROM articles WHERE 1=1";
    
    // Фильтр по городу
    if (!empty($_POST['city'])) {
        $city_id = (int)$_POST['city'];
        $sql .= " AND city_id = {$city_id}";
    }
    
    // Фильтр по категориям (LIKE-версия)
    if (!empty($_POST['category']) && is_array($_POST['category'])) {
        $conditions = [];
        foreach ($_POST['category'] as $cat) {
            $safe_cat = mysqli_real_escape_string($conn, $cat);
            $conditions[] = "p_categories LIKE '%{$safe_cat}%'";
        }
        if (!empty($conditions)) {
            $sql .= " AND (" . implode(" OR ", $conditions) . ")";
        }
    }
    
    // Выполнение запроса...
    Написано
  • Как передать значение из Select2 в другую функцию?

    @catch-a-chalk
    Irinka95,
    $(document).ready(function() {
        $(".city").select2({
            ajax: {
                url: "/ajax.php?action=main&type=get_city",
                type: "post",
                dataType: 'json',
                delay: 250,
                data: function(params) {
                    return {
                        searchTerm: params.term
                    };
                },
                processResults: function(response) {
                    return {
                        results: response
                    };
                },
                cache: true
            },
            placeholder: "Выберите город", 
            allowClear: true
        });
    
        let selectedCity = null;
    
        $('.city').on('select2:select', function(e) {
            selectedCity = e.params.data.id;
            console.log("Выбран город:", selectedCity);
            getFilter(); // вызываем фильтрацию сразу при выборе города
        });
    
        // обработчик очистки выбора города
        $('.city').on('select2:unselect', function() {
            selectedCity = null;
            console.log("Город сброшен");
            getFilter();
        });
    
        function getFilter() {
            let action = 'get_data';
            let category = filterCategory('category');
            
            $.ajax({
                url: '/ajax.php?action=main&type=get_data',
                method: 'POST',
                data: { 
                    action: action, 
                    category: category, 
                    city: selectedCity
                },
                success: function(response) {
                    $('#filterResults').html(response);
                }
            });
        }
    
        function filterCategory(classname) {
            let filter = [];
            $('.' + classname + ':checked').each(function() {
                filter.push($(this).val());
            });
            return filter.length ? filter : null;
        }
    
        $('.filter_click').click(function() {
            getFilter();
        });
    });
    Написано
  • Как передать значение из Select2 в другую функцию?

    @catch-a-chalk
    Irinka95, изначально selectedCity равен null, поэтому серверная часть может считывать выбор только города все еще null
    Написано
  • Как сделать вращение текста вокруг svg?

    @catch-a-chalk
    function rotateTextToPosition(targetText) {
    const words = document.querySelectorAll(".word");
    const group = document.querySelector(".circle-text-path");

    const radius = 215;
    const circumference = 2 * Math.PI * radius;

    let targetWord = null;
    let totalOffset = 0; // длина до нужного слова
    let wordCenterOffset = 0;

    for (let i = 0; i < words.length; i++) {
    const word = words[i];
    const bbox = word.getBBox();
    const dx = parseFloat(word.getAttribute("dx") || 0);
    const wordWidth = bbox.width + dx;

    if (word.dataset.value === targetText) {
    targetWord = word;
    wordCenterOffset = totalOffset + wordWidth / 2;
    break;
    }

    totalOffset += wordWidth;
    }

    if (!targetWord) return;

    const wordCenterAngle = (wordCenterOffset / circumference) * 360;

    const rotationAngle = 90 - wordCenterAngle;

    group.style.transform = `rotate(${rotationAngle}deg)`;
    }
    Написано