Madao

Madao

С нами с 15 мая 2017; Место в рейтинге пользователей: #577
Madao
21 февраля 2025, 01:40
0
В моем случае мне подошло данное решение, которое очень костыльное и скорее всего не совсем верное, но для моих нужд работает. Хотя и оставляет в псевдониме точку, если содержит одно из расширений, указанных в массиве. Но это уже, подчеркну в МОЕМ случае, неважно, ибо таких заголовков у меня не будет. Если кто-то предложит работающий универсальный вариант без такого говнокода, думаю буду благодарен не только я.
Меняем код функции 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;
    }
Madao
21 февраля 2025, 00:29
0
да, данное решение фиксит вопрос с файлами, но тем временем ломает вырезание точки из урла.
Madao
25 августа 2024, 00:14
0
Ну конечно был установлен, я ведь поэтому и писал в теме этого пакета. Я спрашивал, как отучить компонент удалять точку в имени файлов при загрузке (править какой-то конфиг?) или, если нет, то как заставить его не вмешиваться в имена файлов при зашрузке.
Madao
27 июля 2024, 01:17
0
modx 3.0.5 — при загрузке картинок удаляет точку перед расширением файла (получается вместо imagename.png — imagenamepng), соответственно картинка не работает. это норма или надо править где-то к конфиге? пробовал убирать точку из friendly_alias_trim_chars — ничего не поменялось. в friendly_alias_restrict_chars_pattern точка отсутствует.
Madao
18 ноября 2021, 20:15
0
Т.е. это не решаемо на уровне вашего дополнения? И если возникнет такая же проблема с другим дополнением (например если я куплю ваше дополнение и поставлю на рабочий сайт, часть дополнений может упасть из-за разницы в версиях), это нужно решать с авторами этих дополнений, а не с вами? Это важно, я хочу ваше дополнение поставить на интернет магазин, который уже давно работает, на котором стоят дополнения, которые используют guzzlehttp (тот же upgrademodx, GoogleSheets) и самостоятельно это не решить? И конечно не стоит надеяться решить проблему тупой подменой папки guzzlehttp новой версии в дополнении?
Madao
18 ноября 2021, 19:50
0
Доброго времени суток. Продолжаю тестировать дополнение и словил ошибку:
#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 другой версии, тоже такая ошибка может выскочить? Кто сталкивался с такой ошибкой и что делать?
Madao
16 ноября 2021, 02:43
+1
вопрос снимается. T.к. на modhost дополнение ставится автоматом, без возможности выбора опций установки, нужно было вручную у pdoTools переопределить pdoFetch.class и pdofetch_class_path
Madao
16 ноября 2021, 01:30
0
Доброго времени суток. Перед покупкой тестирую дополнение на modhost и не могу понять, как сделать вывод перевода товаров в каталоге (вывод товаров через msProducts). На самой странице товара всё ок, переводится, а при выводе в каталоге так и остается на одном языке. Есть ли где-то более полная документация с примерами или может тут подскажете? Спасибо.
Madao
06 февраля 2021, 21:16
0
Может кто реализовывал такой момент и поделится рецептом:
Имеется 2 товара «Товар 1» и «Товар 2», в каждом товаре есть модификации с параметрами цвет и вес
(пример — цвет синий, вес 5 гр.; цвет синий, вес 10 гр.; цвет красный, вес 5 гр.; цвет красный, вес 15 гр.;… и т.д.)
Необходимо экспортировать в гугл таблицу с вкладками «Товар 1 синий» «Товар 1 красный» «Товар 2 синий»… соответствующие модификации товаров. Забрать с этих вкладок данные решается просто, через стандартные настройки дополнения, а вот как выгружать определенные опции одного конкретного товара в разные вкладки, как-то не осилил. Был бы премного благодарен за подсказки.
Madao
28 января 2021, 12:00
0
На моём сайте такой функционал реализован, могу скинуть свой код, но позже, пока не у компа.
Буду очень признателен за пример кода, где реализован такой функционал.
Madao
25 января 2021, 12:02
0
3. Сделать этот функционал как отдельную страницу на фронте доступную только админу.
А разве на фронте можно редактировать уже оформленный заказ? Есть ссылка на документацию по этому направлению?
Madao
23 ноября 2020, 10:30
0
Не увидел тут вопроса про реализацию перевода названий оплаты и доставки в msOrder. Может кто поделится рабочим вариантом или подскажет куда копать?
Madao
23 ноября 2020, 09:46
0
Еще один вопрос, если не трудно. Как у Вас реализован перевод названий оплаты и доставки?
Madao
22 ноября 2020, 23:23
0
Если шаблон назначен какому-то ресурсу (ресурсам), то его не удалишь. Надо сбрасывать привязку к ресурсам (а если точнее, надо всем ресурсам с этим шаблоном, назначить другой шаблон), а потом уже удалять. Если без переназначения, тут наверно только напрямую через базу данных.
Я так предполагаю, защита от неплательщиков за работу?
Madao
19 ноября 2020, 18:21
0
Большое спасибо. Работает.
Есть небольшой вопрос по этому вызову, параметр 'class' => 'msProduct', за что отвечает и почему без этого параметра в корзине пишет что она пустая? Хотя товары добавлены и при возврате этого параметра товары снова отображаются нормально.
Madao
19 ноября 2020, 17:30
0
Формат подачи конечно ужос.
Ну начнем с того, что если ты делаешь сайт и отдаешь его заказчику, то ты изначально интересуешься, заказчик сам будет управлять магазином или же есть некий менеджер\продавец, который будет заниматься обработкой заказов и наполнением магазина. Если есть отдельные люди, то создаются учетки для менеджеров со своими правами (в тех же правах настраивается видимость например раздела «элементы» и доступ к функциям установки\удаления пакетов, свое меню с отсутствующими пунктами меню, которые менеджер не должен видеть). Я делаю именно так, отдаю все доступы владельцу и уже по согласованию с ним, делаю дополнительные учетки со своими правами и видимостью содержимого админки. В инете довольно много инфы по этому вопросу, вплоть до видео-инструкций, поэтому не добавляю сюда ссылки, ибо их будет много. гуглим по запросу «modx настройка прав доступа»
Madao
10 июня 2019, 17:58
0
В чанке tpl.msEmail, где надо, вставить ссылку на сайт (либо захардкодить либо вывести через системные параметры)
http://sitename.ru/korzina.html?msorder={$order.id}
Madao
10 июня 2019, 17:13
0
а есть примеры таких скриптов, с изменением значений в TV товара?
Madao
10 июня 2019, 16:46
0
Поправлю себя:
товар1 доступен для заказа только в понедельник с 12:00 до 16:00.
товар1 доступен для заказа только в понедельник до 16:00.
Madao
10 июня 2019, 16:32
0
Наверно я не полностью изложил свою мысль, поправил в тексте. Есть например 100 товаров, 5 из них доступны для заказа только в определенный день недели (с понедельника по пятницу). Эти 5 товаров всегда должны быть видны наравне со всеми, но кнопка заказать у них действовать не должна (по условию, завязанному на disableOrder, подменяется кнопка на пустышку). Решение с where не совсем подходит. Мне нужно переключение TV в другое значение в зависимости от дня недели, ибо кнопка заказа в 4 из 5 товарах не должна действовать в любой части сайта, где будет выводится список товаров.
PS. Там вообще немного сложнее условие, пример: товар1 доступен для заказа только в понедельник с 12:00 до 16:00. В остальные дни и время они доступен для просмотра, но кнопка «Заказать» в нем действовать не должна. но мне хотябы понять как отключать его хотябы по одному параметру, а дальше я уже думаю, что пойму как переключать при соблюдении 2х суловий.