Madao

Madao

Был в сети 08 января 2026, 17:18
Заказы не принимаю
Планируется для опций товара возможность указания разных цен (аналог msOtionsPrice)?
Ибо это дополнение никак не развивается и не дорабатывается, и портироваться под MiniShop3 скорее всего не будет (даже сейчас есть проблемы по работе этого дополнения, которые никак не исправляются), а необходимость в таком функционале имеется и желательно в движке из коробки.
В моем случае мне подошло данное решение, которое очень костыльное и скорее всего не совсем верное, но для моих нужд работает. Хотя и оставляет в псевдониме точку, если содержит одно из расширений, указанных в массиве. Но это уже, подчеркну в МОЕМ случае, неважно, ибо таких заголовков у меня не будет. Если кто-то предложит работающий универсальный вариант без такого говнокода, думаю буду благодарен не только я.
Меняем код функции translate на такой:
public function translate($title)
    {
        $language = $this->modx->getOption('translitor_language', null, 'ru');
        $separator = '-';

        // Список расширений, которые нужно сохранить, у меня указаны такие
        $extensions = ['jpg', 'jpeg', 'png', 'gif', 'svg', 'ico', 'webp', 'doc', 'docx', 'pdf'];

        // Проверяем, заканчивается ли строка на одно из расширений
        $hasExtension = false;
        $extension = '';
        foreach ($extensions as $ext) {
            if (substr($title, -strlen($ext) - 1) === '.' . $ext) {
                $hasExtension = true;
                $extension = $ext;
                break;
            }
        }

        // Если есть расширение, отделяем его от основной части
        if ($hasExtension) {
            $titleWithoutExtension = substr($title, 0, -strlen($extension) - 1); // Убираем точку и расширение
            $title = $titleWithoutExtension;
        }

        // Транслитерируем текст
        $title = $language ? $this->ascii($title, $language) : $title;

        $flip = $separator === '-' ? '_' : '-';
        $title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);
        $title = str_replace('@', $separator.'at'.$separator, $title);

        // Удаляем все символы, кроме букв, цифр, разделителя и пробелов
        $title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', $this->lower($title));

        // Заменяем последовательности разделителей и пробелов на один разделитель
        $title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);

        // Обрезаем разделители по краям
        $title = trim($title, $separator);

        // Если было расширение, добавляем его обратно
        if ($hasExtension) {
            $title .= '.' . $extension;
        }

        return $title;
    }
Ну конечно был установлен, я ведь поэтому и писал в теме этого пакета. Я спрашивал, как отучить компонент удалять точку в имени файлов при загрузке (править какой-то конфиг?) или, если нет, то как заставить его не вмешиваться в имена файлов при зашрузке.
modx 3.0.5 — при загрузке картинок удаляет точку перед расширением файла (получается вместо imagename.png — imagenamepng), соответственно картинка не работает. это норма или надо править где-то к конфиге? пробовал убирать точку из friendly_alias_trim_chars — ничего не поменялось. в friendly_alias_restrict_chars_pattern точка отсутствует.
Т.е. это не решаемо на уровне вашего дополнения? И если возникнет такая же проблема с другим дополнением (например если я куплю ваше дополнение и поставлю на рабочий сайт, часть дополнений может упасть из-за разницы в версиях), это нужно решать с авторами этих дополнений, а не с вами? Это важно, я хочу ваше дополнение поставить на интернет магазин, который уже давно работает, на котором стоят дополнения, которые используют guzzlehttp (тот же upgrademodx, GoogleSheets) и самостоятельно это не решить? И конечно не стоит надеяться решить проблему тупой подменой папки guzzlehttp новой версии в дополнении?
Доброго времени суток. Продолжаю тестировать дополнение и словил ошибку:
#0 /home/s28089/www/core/components/polylang/vendor/guzzlehttp/guzzle/src/functions.php(71): GuzzleHttp\Utils::defaultUserAgent()
#1 /home/s28089/www/core/components/upgrademodx/vendor/guzzlehttp/guzzle/src/Client.php(194): GuzzleHttp\default_user_agent()
#2 /home/s28089/www/core/components/upgrademodx/vendor/guzzlehttp/guzzle/src/Client.php(75): GuzzleHttp\Client->configureDefaults()
#3 /home/s28089/www/core/components/upgrademodx/model/upgrademodx/upgrademodx.class.php(185): GuzzleHttp\Client->__construct()
#4 /home/s28089/www/core/cache/includes/elements/modsnippet/34.include.cache.php(75): UpgradeMODX->init()
Соответственно при заходе в админку вижу:
Страница недоступна
Сайт s28089.h8.modhost.pro пока не может обработать этот запрос.
HTTP ERROR 500
Причем, если удалить что-то одно (polylang либо upgrademodx) ошибка уходит.
Почитал интернеты, пишут про конфликт guzzle в разных дополнениях. И я так предполагаю, что с некоторыми другими дополнениями, где используется guzzle другой версии, тоже такая ошибка может выскочить? Кто сталкивался с такой ошибкой и что делать?
Доброго времени суток. Перед покупкой тестирую дополнение на modhost и не могу понять, как сделать вывод перевода товаров в каталоге (вывод товаров через msProducts). На самой странице товара всё ок, переводится, а при выводе в каталоге так и остается на одном языке. Есть ли где-то более полная документация с примерами или может тут подскажете? Спасибо.
Может кто реализовывал такой момент и поделится рецептом:
Имеется 2 товара «Товар 1» и «Товар 2», в каждом товаре есть модификации с параметрами цвет и вес
(пример — цвет синий, вес 5 гр.; цвет синий, вес 10 гр.; цвет красный, вес 5 гр.; цвет красный, вес 15 гр.;… и т.д.)
Необходимо экспортировать в гугл таблицу с вкладками «Товар 1 синий» «Товар 1 красный» «Товар 2 синий»… соответствующие модификации товаров. Забрать с этих вкладок данные решается просто, через стандартные настройки дополнения, а вот как выгружать определенные опции одного конкретного товара в разные вкладки, как-то не осилил. Был бы премного благодарен за подсказки.
Если шаблон назначен какому-то ресурсу (ресурсам), то его не удалишь. Надо сбрасывать привязку к ресурсам (а если точнее, надо всем ресурсам с этим шаблоном, назначить другой шаблон), а потом уже удалять. Если без переназначения, тут наверно только напрямую через базу данных.
Я так предполагаю, защита от неплательщиков за работу?
Большое спасибо. Работает.
Есть небольшой вопрос по этому вызову, параметр 'class' => 'msProduct', за что отвечает и почему без этого параметра в корзине пишет что она пустая? Хотя товары добавлены и при возврате этого параметра товары снова отображаются нормально.
Формат подачи конечно ужос.
Ну начнем с того, что если ты делаешь сайт и отдаешь его заказчику, то ты изначально интересуешься, заказчик сам будет управлять магазином или же есть некий менеджер\продавец, который будет заниматься обработкой заказов и наполнением магазина. Если есть отдельные люди, то создаются учетки для менеджеров со своими правами (в тех же правах настраивается видимость например раздела «элементы» и доступ к функциям установки\удаления пакетов, свое меню с отсутствующими пунктами меню, которые менеджер не должен видеть). Я делаю именно так, отдаю все доступы владельцу и уже по согласованию с ним, делаю дополнительные учетки со своими правами и видимостью содержимого админки. В инете довольно много инфы по этому вопросу, вплоть до видео-инструкций, поэтому не добавляю сюда ссылки, ибо их будет много. гуглим по запросу «modx настройка прав доступа»