Всего 125 004 комментария

Роман
31 мая 2025, 16:11
0
Век живи, век учись. Спасибо большое за помощь
Артур Шевченко
31 мая 2025, 16:00
0
Вроде логично: проверить на пустоту все ТВ и есть все пустые не показывать блок.
Павел Романов
31 мая 2025, 15:29
1
+1
Укажите для этого TV на вкладке «Параметры вывода» тип «Разделитель» и в качестве него поставьте ||.
Сергей Сергеевич
31 мая 2025, 12:39
0
Хорошая идея, так как я вижу по вебвизору на десктопе много людей смотрят сайт не кликая на закрытие плашки с уведомлением о куки. Т.е если с самого начала не загружать метрику, то я бы их не видел…
Miša Bulic
30 мая 2025, 20:49
0
при отложенной загрузке аналитики у вас метрика рекламы отвалится. Нужно при загрузке страницы нормально загрузать скрипт и потом уже отключать если не хотят.
Николай Савин
30 мая 2025, 19:57
0
Пишется небольшой сниппет, который получает список «непустых» категорий. Перечень ID кладем в плейсхолдер.
Запускаем сниппет ДО вызова pdoMenu
В pdoMenu — дописываем параметр resources и вставляем в него плейсхолдер из шага выше
Артур Шевченко
30 мая 2025, 18:05
0
// Дополнительно: скрытие при клике вне блока
                document.addEventListener('click', function(e) {
                    if (!cookieMessage.contains(e.target) && e.target !== cookieMessage) {
                        cookieMessage.style.opacity = '0';
                        setTimeout(() => {
                            cookieMessage.style.display = 'none';
                        }, 300);
                    }
                });
А вот это зачем?
Андрей Степаненко
30 мая 2025, 08:11
+2
Оба вариант что выше, не работают)))

перегенерировал
<style>
        .cookie-message {
            position: fixed;
            z-index: 1000;
            bottom: 20px;
            left: 20px;
            right: 20px;
            max-width: 350px;
            padding: 0;
            font-family: Arial, sans-serif;
            animation: fadeIn 0.5s ease-in-out;
            display: none;
        }
        
        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(20px); }
            to { opacity: 1; transform: translateY(0); }
        }
        
        .cookie-message-inner {
            display: grid;
            justify-items: start;
            grid-gap: 15px;
            font-size: 14px;
            padding: 20px;
            line-height: 1.5;
            background-color: #fff;
            border-radius: 10px;
            box-shadow: 0 5px 15px 0px rgba(0, 0, 0, 0.15);
        }
        
        .cookie-message-text {
            color: #5a5a5a;
        }
        
        .cookie-message-link {
            color: #01356f;
            text-decoration: underline;
        }
        
        .cookie-message-inner .button {
            background: #e1e1e1;
            color: #878787;
            border: none;
            padding: 8px 20px;
            border-radius: 5px;
            cursor: pointer;
            font-size: 14px;
            transition: all 0.3s ease;
        }
        
        .cookie-message-inner .button:hover {
            background-color: #01356f;
            color: #fff;
        }
        
        @media (max-width: 480px) {
            .cookie-message {
                max-width: 100%;
                left: 10px;
                right: 10px;
                bottom: 10px;
            }
        }
    </style>

    <!-- Основное содержимое вашего сайта -->
    
    <!-- Блок уведомления о cookies -->
    <div class="cookie-message js-cookie-message">
        <div class="cookie-message-inner">
            <div class="cookie-message-text">
                Наш сайт использует cookies, включая сервисы веб-аналитики (файлы с данными о прошлых посещениях сайта). Продолжая пользоваться сайтом, вы соглашаетесь с
                <a href="/privacy-policy" class="cookie-message-link">политикой конфиденциальности</a>.
            </div>
            <button class="btn button js-cookie-message-confirm">Принять</button>
        </div>
    </div>

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            // Проверяем, было ли уже принято соглашение
            if (!localStorage.getItem('cookieAccept')) {
                const cookieMessage = document.querySelector('.js-cookie-message');
                
                // Показываем сообщение
                cookieMessage.style.display = 'block';
                
                // Обработчик для кнопки подтверждения
                document.querySelector('.js-cookie-message-confirm').addEventListener('click', function(e) {
                    // Сохраняем согласие в localStorage
                    localStorage.setItem('cookieAccept', '1');
                    
                    // Скрываем сообщение с анимацией
                    cookieMessage.style.opacity = '0';
                    setTimeout(() => {
                        cookieMessage.style.display = 'none';
                    }, 300);
                });
                
                // Дополнительно: скрытие при клике вне блока
                document.addEventListener('click', function(e) {
                    if (!cookieMessage.contains(e.target) && e.target !== cookieMessage) {
                        cookieMessage.style.opacity = '0';
                        setTimeout(() => {
                            cookieMessage.style.display = 'none';
                        }, 300);
                    }
                });
            }
            
            // Проверяем, нужно ли загружать аналитику
            if (localStorage.getItem('cookieAccept')) {
                loadAnalytics();
            }
        });
        
        // Функция для загрузки аналитики (пример)
        function loadAnalytics() {
            console.log('Loading analytics...');
            // Здесь можно добавить код для загрузки Google Analytics, Yandex.Metrika и т.д.
        }
    </script>
Ivan K.
29 мая 2025, 16:19
0
Данная версия будет бесплатной всегда, задумывал ее как базовую версию. Я скоро выпушу платный вариант с расширенным функционалом, где будет возможность использовать другие базы ip.
Дима Касаткин
29 мая 2025, 14:25
0
Респект автору за подход: описание, документация (в части и полноты и оформления)!
Будем пробовать!

И хотел уточнить, это opensource? Для своих клиентов я бы допилил поддержку sxgeo, т.к. он уже используется на проекте, чтобы не тащить дополнительную базу GeoIP и по ней не искать 2 раза.

P.S. Открой приём донатов в профиле на modx.pro!
Nikita
29 мая 2025, 10:09
0
Подскажите, пожалуйста, кто-то решил данную задачу? Актуально, не могу придумать как… ((((
Сергей Карпович
29 мая 2025, 10:05
+1
Спасибо, эта тема уже поднималась, когда только за куки нахлобучивали, с тех пор использую такой вариант:
<style>
    .cookie-message {
        position: fixed;
        z-index: 100;
        bottom: 0;
        left: 0;
        max-width: 350px;
        padding: 0 20px 20px;
    }
    .cookie-message-inner {
        display: grid;
        justify-items: start;
        grid-gap: 10px;
        font-size: 14px;
        padding: 30px;
        line-height: 1.3;
        background-color: #fff;
        border-radius: 10px;
        box-shadow: 0 5px 15px 0px rgba(0, 0, 0, 0.1);
    }
    .cookie-message-text {
        flex-grow: 2;
        color: #8d949e;
    }
    .cookie-message-inner .button{
        background: #e1e1e1;
        color: #878787;
    }
    .cookie-message-inner .button:hover{
        background-color: #01356f;
        color: #fff;
    }
</style>

<div class="cookie-message js-cookie-message" hidden>
    <div class="container">
        <div class="cookie-message-inner">
            <div class="cookie-message-text">
                Наш сайт использует сооkiе в том числе сервисов Веб-аналитики (файлы с данными о прошлых посещениях сайта). Продолжая пользоваться сайтом, вы соглашаетесь с 
                <a data-fancybox data-type="ajax" data-src="{198 | url}" data-filter="#content">политикой конфиденциальности</a>.
            </div>
            <button class="button js-cookie-message-confirm">ОК</button>
        </div>
    </div>
</div>

<script>
    if (!localStorage.getItem('cookieAccept')) {
        const el = document.querySelector('.js-cookie-message');
        el.style.display = 'block';
        el.querySelector('.js-cookie-message-confirm').addEventListener('click', (e) => {
            localStorage.setItem('cookieAccept', 1);
            el.style.display = 'none';
        }, true);
    }
</script>
Все запихано в один чанк и выведено на всех страницах
Артур Шевченко
29 мая 2025, 07:59
+2
Ну вот, а говорят Modx умер, заметок новых нет, компонентов новых нет. А я же знаю, что врут. Modx жил, Modx жив, Modx будет жить!

Теперь по делу. Судя по описанию мощный инструмент защиты, а хорошая защита сайта это всегда актуально. Отдельное спасибо за поддержку второй версии Modx.
Павел
29 мая 2025, 06:54
0
Ок, спасибо
Александр
28 мая 2025, 21:01
+1
А не планируется под MODX 2 подобное выкатить?
Сергей Уткин
28 мая 2025, 17:44
0
Данная проблема была на двух сайтах на reg.ru около 2 месяцев назад, высокая нагрузка на ЦП, решалось удалением папок и файлов observer, через top находил файл php, который вызывал процесс с высокой загрузкой. Нужно было быстро удалять одновременно и файл и убивать процесс, иначе новый создавал.
В итоге для одного сайта вся история повторялась снова пока на другой хостинг рег ру не перенесли, а для второго разово помогло.

И вот сейчас снова проблема на хостинге таймвеб на другом сайте, правда пока только файлы вредоносные появились, загрузка ЦП по крайней мере в top не показывается высокая и панели управления.

В одном из файлов папки observer было упоминание пути tinymce/action.php, буду туда копать (саму папку удалил уже, так что без конкретики)
Артур Шевченко
28 мая 2025, 14:46
+1
Эта конструкция не меняет значение, а форматирует его, т.е. с помощью этой настройки невозможно сделать то, что ты хочешь. Вообще если нужно выводить кг то и заполнять надо в кг.
Павел
28 мая 2025, 14:18
0
Видимо сам так решил, просто нужно будет ставить модуль доставки и на этапе заполнения сайта товарами, решил озаботится этим вопросом.

Сейчас товар заполняется 1200 (указывается в граммах), если бросить его в корзину (10 штук к примеру), то у одного товара нужно показывать 1.2кг, а общий вес (если 10 штук) 12 кг

Как правильно поменять конструкцию?
[3, ".", " "]
Артур Шевченко
27 мая 2025, 23:11
0
Напишите мне в телеграм, контакт есть в профиле.