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

Артур Шевченко
02 июня 2025, 08:39
0
По-моему как раз когда икоки индивидуальные самое то делать через migx, так как там можно задавать любую конфигурацию полей, в том числе сделать отдельное поле для иконки. А то что импорт из файла это вообще прекрасно, плагином собрал данные в нужный формат и записал в migx. И работало бы всё автоматически, а не как сейчас.
Олег
02 июня 2025, 00:18
0
Делать через MigX не вариант т.к. иконки идут индивидуальными для каждого товара (а товаров много и импортируются они из файла, а не вручную)
Добавлять каждому товару поле «показывать блок или нет» тоже не вариант. Надо, чтобы все автоматом работало.
Написал сниппет:
if ($ozon!='' and $wb!='' and ...){
echo '...';
}
Вопрос задавал в надежде узнать, что можно какими-то стандартными модификаторами сделать сложный запрос на несколько проверок
Артур Шевченко
01 июня 2025, 18:37
0
Давай закроем эту тему. Я добавил версионирование. Остальные вопрос по компоненту задавай через техподдержку modstore.
Александр Туниеков
01 июня 2025, 17:41
0
Печалька. Вот казалось человек а на проверку мнит себя самым умным :-(
vit
vit
01 июня 2025, 15:40
0
Можно через снимает или fenom. Сделать. Да и if else не кто не отменял, даже в стандартном шаблонизаторе
Артур Шевченко
01 июня 2025, 13:02
+1
Проблемы из-за неправильных настроек обязательно возникнут, на то они и неправильные.
Даша
01 июня 2025, 10:26
0
О, это приятная новость! А скажите, пожалуйста, не возникало проблем в ходе эксплуатации из-за неправильных настроек или вообще самого наличия других языковых версий?
Артур Шевченко
01 июня 2025, 09:16
0
А кто-то когда-то вообще делал ручной перевод?
Я сейчас работаю с сайтом где 36 контекстов и 10 языковых версий, все переводы сделаны вручную. Babel там не используется ибо незачем. Ресурсы можно связать по псевдониму или заморозив uri. Синхронизацию полей, если она нужно, можно написать самостоятельно, там ничего сложного.
Артур Шевченко
01 июня 2025, 09:10
0
Ну да, придумано. Можно было изначально сгруппировать соцсети в поле типа migx и тогда проверка значительно упростилась бы. Наконец, можно добавить ещё одно поле «Не показывать соцсети» и если оно true то скрывать блок вне зависимости от того заполнен он или нет.
Олег
01 июня 2025, 01:19
0
Это логично. Но как это реализовать? Можно нагородить сниппет, в котором посчитать пустые поля и если их количество не совпадет с известным общим количеством, тогда выводить блок.
Но наверняка уже все придумано
Роман
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.