Задать вопрос
  • Как вывести дополнительное текстовое поле в админке Gallery?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Расширять, как и любую другую модель в Modx.
    1) Создаете js-скрипт, в котором наследуете GAL.panel.Album, код которого находится в assets/components/gallery/js/mgr/widgets/album/album.panel.js, добавив туда свое поле в items.
    2) Добавляете поле в таблицу modx_gallery_albums (префикс modx_ может отличаться) с именем, которое указали в атрибуте name у поля из предыдущего пункта.
    3) Создаете плагин на событие OnManagerPageBeforeRender, который будет регистрировать созданный ранее js-скрипт на странице админки.

    Это правильный путь к решению, так как его не затрут обновления компонента Gallery.
    Есть путь проще, но тогда компонент нельзя будет обновлять - вместо наследования в 1-ом пункте и создания плагина из 3-го пункта, просто добавляете поле в код в album.panel.js и добавляете его в таблицу modx_gallery_albums. Все.

    Либо можно сделать без расширения полей, но костылем. Можно использовать поле Описание альбома, как контейнер для всех языковых версий, просто нужно определить синтаксис для указания ключа контекста (если делали с помощью Babel) и перевода. Грубо говоря ru=текст|en=текст|de=текст, только надо определиться с разделителями.
    Не знаю, что вы там указываете, допустим название на разных языках. Получается в поле Описание просто указываете примерно так:
    ru>Дизайн буклетов для свадьбы|en>Wedding brochure design|de>Gestaltung einer Hochzeitsbroschüre


    > - разделитель ключа контекста от перевода
    | - разделитель языковых переводов

    Если у вас сделано с помощью Babel и в месте вывода идет проверка ключа контекста, то теперь достаточно написать простой сниппет с одним входным параметром - ID альбома, который разобьет содержимое поля Описание на массив (язык-перевод) и исходя из ключа текущего контекста, выведет нужный перевод.
    Ответ написан
    Комментировать
  • Как выполнить валидацию radio button в formit?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Основы HTML. У вас ни один флажок по умолчанию не отмечен, а форма в таком случае не будет отправлять значение при сабмите. Поэтому помимо всего прочего вам нужно добавить в форму скрытое поле, т.е. типа hidden с таким же именем:
    <input type="hidden" name="way[]" value="">
    Ответ написан
    Комментировать
  • Как можно при наведении подсвечивать area в map?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    Я использовал maphilight.js
    Ответ написан
  • Как сделать ссылку на товар в msMiniCart?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    1) Вы используете разметку сниппета msMCD, а не msMiniCart. Это разные сниппеты разных компонентов.
    2) Чуть чуть внимательности
    {foreach $cart as $k => $item} //Вы запускаете цикл foreach
    <a href="{$id | url}" class="cart__title" > //а тут почему-то плейсхолдер $id вместо $item.id
       {$item.pagetitle}  //тут у вас верно используется $item
    </a>
    Ответ написан
  • Почему не редактируются хлебные крошки?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Если почитать документацию, то думаю этот вопрос сразу отпадет, ибо достаточно указать
    <div class="bread-crumb">
        [[pdoCrumbs? &showHome=`1`
        &tplWrapper=`@INLINE <div class="bread-crumb__container container" itemscope itemtype="http://schema.org/BreadcrumbList">[[+output]]</div>`
        &tpl=`@INLINE <div itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="[[+link]]" itemprop="item" class="bread-crumb__item"><span itemprop="name">[[+menutitle]]</span><meta itemprop="position" content="[[+idx]]"></a></div>`
        &tplCurrent=`@INLINE <span  class="bread-crumb__item">[[+menutitle]]</span>`
        &tplHome=`@INLINE <div itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="[[+link]]" itemprop="item" class="bread-crumb__item"><span itemprop="name">Купить мотоцикл</span><meta itemprop="position" content="[[+idx]]"></a></div>`
        ]]
    </div>
    Ответ написан
    Комментировать
  • Как сделать что бы mSearchForm открывал модульное окно с товаром а не переходил на страницу?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Придется наверное писать ajax-запрос и его обработчик. Так как в ui передаются только следующие параметры: id-товара, label для autocomplete, url-товара и его название.
    Тебе нужно в методе select, который на последнем скрине, написать ajax-post запрос, в котором ты будешь передавать id товара. Далее этот запрос обрабатывай плагином или сниппетом и возвращай готовую обертку модалки и выводи ее.
    Как работать с Ajax, есть старая добрая статья от Василия по ссылке.
    Ответ написан
    Комментировать
  • Как менять цену в msOptionsPrice2 исходя из size?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Ну дык у вас это не вес же, а размеры, то бишь size, а у обертки вы указываете класс msoptionsprice-weight.
    Вообще в доке все более, чем понятно расписано. Не поленитесь, почитайте и все получится.
    По поводу radio-кнопок: вы же явно умеете в HTML? Откройте tpl, указанный в сниппете msOptions и переделайте его под radio-кнопки. Плейсхолдеры то те же самые остаются, тут дело лишь в HTML-разметке.

    p.s возможно не вызван msOptionsPrice.initialize на странице
    Ответ написан
    21 комментарий
  • Почему не исключается категория из цикла?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Во первых, у вас неверный синтаксис where, нужно указывать в форме JSON, то бишь:
    &where=`{"id:!=":"190","class_key":"msCategory"}`

    Во вторых, вы таким образом хотите исключить ресурс из выборки или родителя? Зачем использовать where, если можно сделать проще:
    &parents=`15, -190` //если нужно исключить ресурс с ID 190 и его дочерние
    &resources=`-190` //если нужно исключить ресурс с ID 190
    Ответ написан
    2 комментария
  • Как правильно сделать ajax окно в msFavorites?

    DanArst
    @DanArst Куратор тега JavaScript
    Гриффиндор в моде при любой погоде!
    Ну дык ты get-запрос делаешь на страницу izbrannoe.html, которой у тебя нет, или она не опубликована. Твой скрипт тупо падает
    Ответ написан
  • Проблемы с выводом msMCD,msOrder,msGetOrder в модульном окне, как решить?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Ну хоть бы код чанков показал что ли. msGetOrder не отрабатывает по Ajax.
    И ещё после того как она перезагрузилась, теперь в модульном окне отображается msGetOrder

    А ты url страницы глянь, там появился get-параметр msorder с id созданного заказа, поэтому и отрабатывает msGetOrder.
    Непонятно, что с корзиной, она видимо пустая. Ну это и логично, потому что заказ то оформлен.
    Стоит доки почитать, ну или на modx.pro и будет меньше вопросов.
    Ответ написан
  • Minishop2 вместо русского языка знаки?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Неправильная кодировка в базе данных. Сайт переносили?
    Ответ написан
  • Как сделать счётчик товаров + - в карточке товара minishop?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Обычная верстка + немного js.
    Добавляешь две кнопки, обязательно указав у них атрибут type="button" и вешаешь в js слушатель клика. По клику меняешь значение в инпуте и триггеришь событие change. Все.
    Ответ написан
  • Каким плагином реализовать поиск на сайте ModX?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    SimpleSearch из бесплатных, из платных mSearch2.
    Я лично свое решение использую.
    Ответ написан
  • Как передать данные чек чекбокса formit?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    И в чем у вас проблема? Вы пробовали отправлять форму, что не так?
    Судя по коду, у вас каждый чекбокс имеет разный атрибут name
    Ответ написан
  • Почему не подгружается картинка?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    Вы забыли указать url, т.е.
    style={{ backgroundImage: `url("/images-1.jpg")` }}
    Ответ написан
    2 комментария
  • Как сравнить значение между двумя числами?

    DanArst
    @DanArst Куратор тега JavaScript
    Гриффиндор в моде при любой погоде!
    Если я правильно понял задачу.
    function activeNUM() {
        let currentNum = 42;
        numList.each(function(idx) {
          if (idx != numList.length - 1) {
            if (currentNum >= $(this).attr('data-num') && currentNum < numList.eq(idx + 1).attr('data-num')) {
              $(this).addClass('active');
            }
          }
        });
    }
    Ответ написан
    Комментировать
  • Почему swiper-слайдер ломает Грид-сетку всего блока?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    Потому что swiper у вас инициализирован с самого начала.
    Вы бы хоть доку почитали, она ведь максимально понятная.

    768: {
    enabled: false,
    slidesPerView: 5,
    }

    Я так понимаю, что этими строчками вы якобы хотели инициировать swiper по бреикпоинту, но это так не работает.
    Сделайте так:
    let breakpoint_mobile_min = window.matchMedia('(min-width: 768px)'),
             projectInit = false,
             projectSlider= Swiper;
    
    function projectSliderInit() {
            if (breakpoint_mobile_min.matches) {
                if (projectInit) {
                    if ($('#slider3').hasClass('swiper-initialized')) {
                        projectSlider.destroy();
                        projectInit = false;
                    }                
                }            
            } else { 
                if (!projectInit) {
                    projectInit = true;
                    projectSlider= new Swiper('#slider3', {
                        navigation: {
                           nextEl: '.swiper-button-next',
                           prevEl: '.swiper-button-prev',
                           enabled: false,  //определитесь нужны вам стрелки или нет
                        },
                        pagination: {
                           el: '.swiper-pagination',
                           clickable: true,
                        },    
                        slidesPerView: 1,
                    });
                }           
            }
    }
    $(window).on('resize load', function () {
       projectSliderInit();
    });
    Ответ написан
  • Как исправить ширину у ссылок при :hover?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    Добавьте свойство align-items. Так как по умолчанию у него указано stretch, которое в данном случае означает, что дочерние элементы flex-контейнера будут занимать всю его ширину.
    .footer-top__nav__links {
      display: inline-flex;
      flex-direction: column;
      align-items: flex-start;
      gap: 20px;
    }
    Ответ написан
  • Вывод поля listbox-multiple в migx?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Лучше создайте отдельное TV поле типа "Множественный выбор", с названием например mytvselect, и у него в Параметры вывода выберите Разделитель и укажите нужный, например запятую.
    Скрин 1
    65433b729bcf5254583299.jpeg

    В Migx при создании поля укажите в поле input TV название только что созданного поля.
    Скрин 2
    65433bc77513a189630608.jpeg


    В итоге выводиться выбранные значения будут через запятую. Если вам нужно их как-то оформить, то можно создать простой сниппет и использовать его в качестве модификатора вывода. Подробнее тут
    Например вы выводите их в виде элементов списка ul, тогда можно написать такой сниппет worksOutput:
    <?php
    $output = '';
    $list = explode(',', $input); //$input - это переменная входного значения
    foreach ($list as $v) {
        $output .= '<li>'.$v.'</li>';
    }
    return $output;


    Применяется так, например если вы выводите с помощью getImageList и ваше поле в migx называется works, то в чанке:
    <ul>
    [[+works:worksOutput]]
    </ul>
    Ответ написан
    Комментировать
  • Не получается составить запрос к API на PHP, может кто поможет идеями?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Там же написано массив объектов. Если не знаешь, что это, то можно загуглить. В твоей задаче в PHP примерно следующий вид:
    $items = array(
        0 => array(
            'article' => 'sku22',
            'brand' => 'Toyota',
            'SupplierName' => 'Kolesa LLP',
            'CostSale' => 512
        ),
        1 => array(
            'article' => 'ads2512',
            'brand' => 'Nissan',
            'SupplierName' => 'RDM',
            'CostSale' => 6115
        ),
    );
    
    echo json_encode($items);
    //Результат [{"article":"sku22","brand":"Toyota","SupplierName":"Kolesa LLP","CostSale":512},{"article":"ads2512","brand":"Nissan","SupplierName":"RDM","CostSale":6115}]
    Ответ написан