Задать вопрос
  • Почему не выбираются элементы с помощью querySelectorAll?

    DanArst
    @DanArst Куратор тега JavaScript
    Гриффиндор в моде при любой погоде!
    Потому что эти элементы создаются динамически. Можешь написать обработчик события клика по ним например так:
    document.addEventListener('click', function (e) {
        if (e.target.classList.contains('js--btn-delete')) {
            //тут пишешь что нужно делать по клику
        };
    });
    Ответ написан
    Комментировать
  • Почему способ объявления переменной i влияет на результат?

    DanArst
    @DanArst Куратор тега JavaScript
    Гриффиндор в моде при любой погоде!
    Можете почитать про разницу между var и let тут
    Ответ написан
    Комментировать
  • Почему при автозаполнении полей в браузере поля формы приходят пустые?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    В minishop2 работает так - при заполнении поля срабатывает js-собыие change и отправляется post-запрос name:value, на бэке срабатывает событие msOnAddToOrder и значение поля с ключом добавляются в заказ, но при autocomplete js-change не срабатывает.
    Как вариант можно будет скопировать дефолтный js-скрипт minishop2 по адресу assets/components/minishop2/js/web/default.js и назвать условно custom.js. Далее в системных настройках minishop2 по ключу ms2_frontend_js указать новый скрипт. В скрипте в методе submit miniShop2.Order пробежаться по всем полям и запустить miniShop2.Order.add(key, value);, где key - name поля, а value соответственно значение.
    Ответ написан
  • Как создать такой сдайдер?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    Судя по тегу, вы видимо хотите сделать с помощью swiper.
    Если проблема с тем, чтобы были обрезаны крайние слайды, то можно указать slidesPerView: 'auto', и задать ширину одного слайда в стилях.
    Ответ написан
  • MODX REVO: Как узнать, кто пытается авторизоваться в админке?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Смысл блокать IP, если юзер может попробовать с другого устройства, использовать прокси и тд.
    Вы же можете просто удалить или переименовать юзера, через которого пытаются залогиниться в админке. Т.е. условно, если у вас стандартный admin, то переименуйте в условного mysiteadmin (это так к примеру).
    Также вы можете перенести админку. Вот первый попавшийся мануал
    Ответ написан
    1 комментарий
  • Как мне правильно сделать mysql запрос?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    SELECT t.name,
           JSON_OBJECT('sum1', SUM(t.total1), 'sum2', SUM(t.total2)) AS data
    FROM
        (SELECT name,
                JSON_EXTRACT(data, '$.sum1') AS total1,
                JSON_EXTRACT(data, '$.sum2') AS total2
         FROM my_table) t
    WHERE t.name = 'Moscow';
    Ответ написан
    Комментировать
  • Как на сайте лучше разместить раздел вопросов?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Я бы определенно выбрал первый вариант.
    1) Можно грамотно организовать внутреннюю перелинковку, помогая распределению веса страниц, если важно SEO.
    2) Информация должна находится там, где ей положено быть. Соответственно вопрос-ответ должен быть на отдельной странице FAQ, а не на странице самой категории - там должна лишь присутствовать ссылка на нужную страницу раздела FAQ (имхо). На странице категории должен быть только тот контент, который за наименьшее количество действий позволит получить лид, а раздел FAQ на нем, опять же имхо, будет лишь лишней возможностью отвлечь внимание юзера.
    3) Полноценный и хорошо организованный FAQ на сайте, как ни крути, это все таки + к доверию.
    4) Пользовательский опыт и длительность/глубина просмотра - лично у меня, как у юзера, могут возникать сопутствующие вопросы. Условно я из поисковика попал на страницу ЧаВо вашего интертне-магазина по вопросу оплаты заказа, отсюда вытек вопрос по поводу доставки, далее возможности возврата, а потом вообще захотелось узнать о возможности партнерства. Поэтому, если бы FAQ был организован по 2-му способу, я бы скорее запарился искать эту инфу, и возможно покинул бы сайт. Другое дело, когда все ответы находятся в одном разделе и разбиты по категориям - вот это уже удобная навигация, без лишних квестов.
    Ответ написан
    1 комментарий
  • Как выполнить DELETE если есть условие для двух таблиц?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    DELETE t1.*, t2.*
    FROM osn86_jshopping_products_attr t1
    INNER JOIN osn86_jshopping_products_to_categories t2
    ON t1.product_id = t2.product_id
    WHERE t2.category_id = 83
    Ответ написан
    Комментировать
  • Как создавать папки в медиа с русскими буквами?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Решение "писать всегда транслитом или на английском языке" не подходит

    Интересно почему?
    Какая у вас версия Modx?
    Какой выбран язык системы управления, какая кодировка?
    Должны быть судя по всему Русский(utf-8) и Unicode(UTF8).
    Ответ написан
  • Как правильно настроить сниппет в modx revo?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    $output = '';
    
    $ot=new \mylibs\Otgruzka();
    $ot->perevalka_station_code=238207;
    $ostatki_arr=$ot->ostatki_na_perevalke_get();
    
    foreach ($ostatki_arr as $v) {
       $output .=  $modx->getChunk('название_чанка', array(
          'product__name' => $v['product_name'],
          'product__count' => $v['ostatok_tonnazh']
       ));
    }
    
    return $output;
    Ответ написан
  • Добрый день! Как создать сниппет в modx revo, что бы с помощью этого сниппета и cronmanager менять цены?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Можно обойтись без крона.
    1) Создаете сниппет, например getProductRealPrice с входящим параметром price-товара. В нем проверяете текущее время и исходя из этого меняете цену как нужно и возвращаете новую.
    2) Во всех чанках, отвечающих за вывод карточки товара и на странице товара, в форму добавляете hidden input с каким-нибудь именем options и сниппетом в value.
    <input type="hidden" name="options[realprice]" value="[[!getProductRealPrice]]">

    Ну и соответственно там, где выводится цена, т.е. price, выводите этот сниппет.
    3) Пишете плагин на событие msOnAddToCart в котором проверяете, если у добавляемого товара options[realprice] задан и отличается от price, то значит меняем цену товара на это значение.
    Ответ написан
    Комментировать
  • Как выбрать определенный ключ в JSON из MySql?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Можно использовать JSON_TABLE
    SELECT j.result_color
    FROM structure_test t
    JOIN JSON_TABLE(t.structure, 
            '$.exodus[*]'
            COLUMNS(result_combination varchar(20) PATH '$.result_combination',
                    result_color varchar(20) PATH '$.result_color',
                    result VARCHAR(20) PATH '$.result',
                    result_description VARCHAR(255) PATH '$.result_description')) j                    
    WHERE j.result = 'IT разработка';
    Ответ написан
    6 комментариев
  • Скрипт ajax перезагружает страницу?

    DanArst
    @DanArst Куратор тега JavaScript
    Гриффиндор в моде при любой погоде!
    К чему у кнопки return false;?
    Обработчик должен слушать событие отправки формы, а не нажатия кнопки, причем с методом preventDefault.
    Причем непонятно, когда у вас подключается jquery (и подключается ли он вообще) и где находится скрипт, поэтому стоит обернуть обработчик в $(document).ready, чтобы дождаться загрузки страницы.
    $(document).ready(function() {
           $('#form').submit(function(e) {
           e.preventDefault();
                $.ajax({
            
                    type: 'POST',
            
                    url: 'chat.php',
            
                    data: $('#form').serialize() + '&' + this.name + '=' + this.value,
            
                    success: function(data) {
            
                        console.log(data);
            
                    }
                });
            }); 
        });
    Ответ написан
  • Как сделать центрировку символа в блоке на css?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    Например с помощью flexbox:
    .ava{
            display: flex;
            align-items: center;
            justify-content: center;
           ...
        }
    Ответ написан
    3 комментария
  • Как сделать пагинацию без скрипта?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Тут пишут про табы и про то, что их почему-то невозможно сделать без js...
    Но на деле то, что у вас на скрине - это скорее всего галерея с isotope-фильтром.
    Не лучшее решение такое реализовывать табами, но можно сделать и так, и при этом на чистом CSS.
    Ответ написан
    2 комментария
  • Как сделать несколько foreach внутри одного foreach?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Видимо данные хранятся в Migx. Проблема в том, что вы все приводите в одну переменную $items (еще и во вложенных циклах одни и те же переменные):
    {set $items = json_decode($_modx->resource.itemDoctors, true)}
    {set $items = json_decode($item.education, true)}
    {set $items = json_decode($item.myDoctors, true)}


    Соответственно просто задайте их разным переменным и все:
    {set $items1 = json_decode($_modx->resource.itemDoctors, true)}
    {foreach $items1 as $item}
       {set $items2 = json_decode($item.education, true)}
       {foreach $items2 as $item2}
         ...
       {/foreach}
       {set $items3 = json_decode($item.myDoctors, true)}
       {foreach $items3 as $item3}
         ...
       {/foreach}
    {/foreach}
    Ответ написан
  • Как при клике на ссылку закрывалось hamburger меню?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    $('.header__burger, .header__link').click(function (event) {
            $('.header__burger, .header__menu').toggleClass('active');
            $('body').toggleClass('lock');
    });
    Ответ написан
    Комментировать
  • Как реализовать логику в ModX?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    В Gallery есть возможность указывать теги для элементов.
    Поэтому как вариант, если вы вставляете iframe, то укажите соответствующий тег iframe, а для видео не указывайте тег вообще.
    В чанке, указанном в параметре &thumbTpl проверяйте тег и делайте соответствующую обертку. Что-то наподобие:
    [[+tags:is=`iframe`:then=`
    <iframe src="[[+url]]" width="420" height="315" allowfullscreen></iframe>
    `:else=`
    <video width="420" height="315" controls="controls">
       <source src="[[+url]]" type='video/mp4;"'>
    </video>
    `]]
    Ответ написан
  • Как задать количество элементов пагинации в Swiper?

    DanArst
    @DanArst Куратор тега JavaScript
    Гриффиндор в моде при любой погоде!
    Вообще у Swiper есть отличная документация.
    И есть следующие параметры для pagination:
    pagination: {
        el: '.swiper-pagination',
        dynamicBullets: true, //включаем поддержку динамических буллетов
        dynamicMainBullets: 7, //максимальное количество отображаемых буллетов
      },


    Но, вы почему-то используете древнюю версию 3.4.2, в которой еще это не ввели. Поэтому вам либо придется вам писать костыль, либо менять версию свайпера и внести немного изменений в скрипт инициализации
    Ответ написан
    Комментировать
  • Как сделать такую страницу только Rutube?

    DanArst
    @DanArst Куратор тега HTML
    Гриффиндор в моде при любой погоде!
    Если добавлять видео руками:
    1) С помощью компонента VideoGallery
    2) Migx + fancybox

    Если автоматически:
    1) Писать сниппет для работы с API Rutube
    Ответ написан