Задать вопрос
  • Как правильно выгрузить фото и характеристики через API?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Ну во первых, article - это не поле объекта класса msProduct, это поле объекта класса msProductData, т.е. должно быть так:
    $productData = $modx->getObject('msProductData', ['article' => $article]);
    if (!$productData) {
        // Новый товар
        // остальной код
    } else {
        $product = $modx->getObject('msProduct', $productData->id);
        //остальной код
    }
    
    $productId = $product->get('id');


    Во вкладке Галерея отображаются превьюшки, а их у тебя нет по факту. Используй процессоры для таких вещей. Создай временную папку в корне сайта, например tmpimages, скачивай туда картинки и процессором добавляй в галерею товаров. Примерно так:
    if (!empty($item['images']) && is_array($item['images'])) {
        foreach ($item['images'] as $imgUrl) {
            $savePath = MODX_BASE_PATH . 'tmpimages/';
            $filename = basename(parse_url($imgUrl, PHP_URL_PATH));
            $destination = $savePath . $filename;
            $imageContent = file_get_contents($imgUrl);
            
            if ($imageContent !== false) {
                file_put_contents($destination, $imageContent);
                $response = $modx->runProcessor('gallery/upload',
        			array('id' => $productId, 'name' => $filename, 'file' => $destination),
        			array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/')
        		);
        		if ($response->isError()) {
        		    echo "Ошибка загрузки изображения:" . print_r($response->getAllErrors(), true); //обработка ошибки
        		}
        		unlink($destination);
            }
        }
    }
    Ответ написан
    3 комментария
  • Что могло случиться с отправкой письмами?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Какой email у вас указан в качестве отправителя? Системная настройка emailsender. Тут должна быть доменная почта, в противном случае должен быть настроен SMTP.
    Плюс ко всему различные почтовые клиенты, наподобие Яндекс или Gmail, будут по умолчанию помечать письма с таких ящиков как спам, пока вы не настроите DKIM и SPF.
    Ответ написан
    Комментировать
  • Почему не работают регулярные выражения в AjaxForm?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Напиши хук и проверяй там. Тем более раз ты уверен, что у тебя не бот, а человек спамит. То возвращай ему сообщение, что форма отправилась, но на деле завершай выполнение скрипта;
    <?php
    $phone = preg_replace('/[\s\-\(\)]/', '', $hook->getValue('phone'));
    
    if (preg_match('/^\+7[9483]\d{9}$/', $phone )) {
        return true;
    } else {
        echo $AjaxForm->success('Ваше сообщение отправлено');
        die();
    }
    Ответ написан
    Комментировать
  • Как заставить автовоспроизводиться rutube-видео внутри fancybox?

    DanArst
    @DanArst Куратор тега JavaScript
    Гриффиндор в моде при любой погоде!
    В скрипте инициализации добавь слушатель события ready
    document.addEventListener("DOMContentLoaded", function () {
        Fancybox.bind("[data-fancybox]", {
            on: {
                ready: (fancybox, slide) => {
                    let iframe = document.querySelector(slide.$content).querySelector("iframe");
                    if (iframe) {                    
                        setTimeout(() => {
                            iframe.contentWindow.postMessage('{"type":"player:play"}', "*");
                        }, 500);
                    }
                }
            }
        });
    });
    Ответ написан
    Комментировать
  • Как вывести теги на карточке статьи?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Во первых, запомните, что синтаксис [[*tags]] - это вывод TV текущего ресурса, т.е. на странице которого вы находитесь.
    А вы это используете в чанке. Т.е. должен быть синтаксис [[+tags]]
    Предварительно нужно добавить этот tv в includeTVs, если вы выводите статьи с помощью pdoResources или pdoPage, и если у вас указан tvPrefix=``.
    Если параметр tvPrefix не указан, то в чанке пишете [[+tv.tags]]

    [[!tolinks? 
       &items=`[[+tags]]`  или &items=`[[+tv.tags]]`
       &tpl=`tagRowTpl` 
       &target=`56`
    ]]
    Ответ написан
  • Unsupported post request object with ID 'xxxxxxxxx' does not exist, cannot be loaded due to missing permissions что делать?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    pages_manage_posts разрешение есть?
    Ответ написан
  • Как подтянуть фотографию товара в YML файл?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Если это товары minishop2, то зачем использовать pdoResources, если есть msProducts.
    И тогда не надо будет запускать сниппет msGallery в чанке, а у вас будет доступен плейсхолдер [[+image]] - основное изображение товара.
    Ответ написан
    2 комментария
  • Как настроить логирование MODX в соответствии с требованием ЦБ?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    А что не так в Журнале системы управления? Все это там ведь указывается.
    Ответ написан
  • Как сбросить автопрокрутку у Swiper при переключении таба?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Можно использовать метод slideTo, но он ломает autoplay, поэтому можно сделать следующее:
    отключить autoplay - скролл до 1-го слайда - включить autoplay


    navList[i].addEventListener("click", (evt) => {
        let currentLink = tabContainer.querySelector(
          ".slidersTab__tab-label.current"
        );
        let currentTab = tabContainer.querySelector(
          ".slidersTab__slidersItem.current"
        );
        //добавить 4 строчки -- start 
        let currentSlider = tabList[i].querySelector('.slidersTab__slider-body').swiper;
        currentSlider.autoplay.stop();
        currentSlider.slideTo(0, 0, false);
        currentSlider.autoplay.start();
        //-- end
        currentLink.classList.remove("current");
        navList[i].classList.add("current");
    
        currentTab.classList.remove("current");
        tabList[i].classList.add("current");    
    });


    Ответ написан
    1 комментарий
  • Как создать robots на Modx Rev?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Это могу быть ресурсы. Зайдите в админку и в правой панели сайта увидите три вкладки: Ресурсы, Элементы, Файлы.
    Ресурсы - это все страницы сайта, вот среди них и найдите страницу robots.
    Ответ написан
  • Форма отправляет данные, даже если капча не пройдена. Как поправить?

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

    Понятное дело. Вы ведь ее даже не проверяете в php-обработчике.

    и как сделать проверку, а то спам все равно продолжает сыпаться?

    Смотря какая капча. В инете инфы полно, вот к примеру первая ссылка с гугла по rcv2
    Ответ написан
  • Как минифицировать код MODx?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Че это за чушь? Выключите этот плагин, он никоим образом не ускорит загрузку страницы.
    Есть HTML2Minify, если хотите средствами Modx
    Ответ написан
  • Как отправить на почту JS данные Modx?

    DanArst
    @DanArst Куратор тега JavaScript
    Гриффиндор в моде при любой погоде!
    Не понял, вы в форму модального окна вставляете картинку и заголовок, но не знаете как их отправить?
    Ну так вставляйте их в скрытые поля. И чанке письма, если такой есть, отобразите имя поля, в которое будет вставляться заголовок. Картинка будет во вложении. Чтобы вложение отправить добавьте форме атрибут enctype="multipart/form-data"
    Ответ написан
    Комментировать
  • Почему не работает vertical-align: center?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    Во-первых, у свойства vertical-align нет значения center, есть middle.

    Во-вторых, middle работает не так, как вы себе представляете. Т.е. он не выравнивает строчный/строчно-блочный элемент по центру строки. Он выравнивает его относительно середины воображаемой буквы x (т.е. берется условное значение x-height).
    Смотрите пример ниже.


    Я бы посоветовал сделать с помощью flex
    Ответ написан
    Комментировать
  • Как можно выполнить PHP-скрипт в файле перед всем в MODX?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    OnInitCulture - самое первое событие, если вы имеете в виду фронтенд-события. Только вот не понял связь между PHP-файлом и событиями Modx.
    Ответ написан
  • Как добавить у каждого товара цену в телеграмм отправке?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    foreach ($_products as $product) {
        $i++;
        $products .= "{$i}. {$product->name} ({$product->count} шт.) ({$product->price}) \n";
    }
    Ответ написан
  • Калькулятор для MODX как реализовать?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    А причем тут Modx? Ваш калькулятор - это HTML разметка с функционалом на JS.
    Modx вам разве что понадобится только для отправки формы, и то можно не использовать компоненты, или для управления параметрами калькулятора, и то не факт что это тоже понадобится.
    Хочу научиться писать самостоятельно, скажите в какую сторону копать? Какие книги или может видеоуроки.

    Честно говоря, учитывая что вы задали такой вопрос, то вам бы хоть что-то научится делать для начала - верстать, подучить базу JS, чтобы было логическое понимание как это работает. А там по ходу разработки будут появляться нужные вопросы, ответы на большинство из которых можно без проблем найти в гугле.
    Если делать на фрилансе, сколько стоит подобная услуга. За сколько бы сделали ВЫ?

    Зависит от количества параметров, их зависимостей. У каждого своя вилка цен, я бы взял диапазон 3500-5000р.
    Ответ написан
    Комментировать
  • Почему пропадает before?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    Задайте z-index для before.
    Почему так происходит? Потому что любое значение свойства transform помимо none создает новый контекст наложения.
    Советую почитать доку.
    Ответ написан
    1 комментарий
  • Как в ModX + ms2Gallery как вывести alt у изображений?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    А в вызове msGallery на странице товара случайно не другой чанк указан?
    Ответ написан
  • Как скрывать блок в msFavorites если count меньше 0?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Скопировать скрипт msFavorites, указать новый в системных настройках по ключу msfavorites_front_js
    В скопированном скрипте править метод updateFavorites, а именно строчки под комментом //set total.
    Там проверяешь условие, если total < 1, то скрываешь блок, если нет, то показываешь. Все.
    Ответ написан