Всего 125 096 комментариев

Alex
23 февраля 2025, 03:16
0
Спасибо вам за то, что подсказали правильное направление — все получилось)
Артур Шевченко
22 февраля 2025, 21:04
0
Вообще не планировал, но раз вы спрашиваете, имеет смысл запланировать.
Максим
22 февраля 2025, 20:25
0
Как будто с MySQL 8 компонент не очень работает.
alex87.ru
22 февраля 2025, 20:24
0
Нет) Это просто шаблон — каркас так сказать для верстки на 4м бутстрапе. В шаблоне там свои шаблоны
Сергей Карпович
22 февраля 2025, 19:34
0
Планируется ли добавить в компонент переключатель вида товара (переключатель чанка вывода ресурса)?
Артур Шевченко
22 февраля 2025, 19:06
+1
Если решил делать пагинацию сам, то зачем используешь pdoPage? pdoPage твой js не понимает, больше скажу, pdoPage не умеет работать с динамическими параметрами, т.е. какие при вызове задал по таким выборку он и сделает и потом ничего пересчитывать не будет.
В твоём случае надо использовать вот это
Андрей
22 февраля 2025, 11:06
0
Не приходит информация: phone, street, comment
Остальные приходят. В чём может быть причина?
<?php
if($modx->event->name != 'msOnCreateOrder') return;
$token = $modx->getOption('mstelegram_token', null, false);
$recipients = explode(',', $modx->getOption('mstelegram_recipients', null, ''));
$contacts = $modx->getObject('msOrderAddress', array('id'=> $msOrder->id));
$_products = $msOrder->getMany('Products');
$profile = $msOrder->getOne('UserProfile');

// Список товаров в заказе
$i = 0;
$products = '';
foreach ($_products as $product) {
    $i++;
    $products .= "*{$i}. {$product->name}* \n    `↳ ". round($product->price) ." х {$product->count} шт. = ". round($product->price * $product->count)."` \n";
}

if ($msOrder->delivery == '1') {
    $deli = "Сами заберут \n---------- \nТелефон: {$contacts->phone} \nКомментарий: {$contacts->comment}\n";
    } else if ($msOrder->delivery == '2') {
        $deli = "Доставка {$contacts->city} `{$msOrder->delivery_cost} р.` \n---------- \nТелефон: {$contacts->phone} \nАдрес: {$contacts->city}, {$contacts->street} \nКомментарий: {$contacts->comment}\n";
    }

// Текст сообщения
$message = "
Новый заказ #{$msOrder->id}
на сумму: {$msOrder->cart_cost} р.
----------
{$products}
----------
{$deli}
_Статус заказа придёт повторно_";

$message = urlencode($message);
foreach($recipients as $id){
    $id = trim($id);
    if(!$id) continue;
    $url = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$id}&parse_mode=markdown&text={$message}";
    $ch = curl_init();
    curl_setopt_array($ch, array(CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true,));
    $result = curl_exec($ch);
    curl_close($ch);
}
Юрий Эффа
21 февраля 2025, 19:50
0
Пробовал по-разному. Умирает именно при подключении SCSS-файла, любого, даже самого простого. LESS-файл компилирует нормально.
Артур Шевченко
21 февраля 2025, 14:51
0
Ну если всё по-простому, то можно сохранять эти данные в extended и ExtraFields не нужен.
aziomav@likemovie.net
21 февраля 2025, 14:37
0
Мы с вами не так близко знакомы, поэтому лучше на Вы все же обращаться)

Клиент добавляет адрес сайта, может добавить сколько угодно их. Это банально поля.
Сайт 1
Сайт 2 и т.д.
К каждому сайту может добавить запросы 1 поле в textarea например.

Ничего фильтровать не надо. У него будет страничка где будет список сайтов добавлен и запросов.

По простому если: сайт 1, сайт 2, сайт 3. И поля запросы 1, запросы 2, запросы 3. Он может их редактировать — менять значения, удалять.

Ничего фильтровать не надо, просто добавить данные, отредактировать или удалить. Чтобы они были на личной странице клиента.
Артур Шевченко
21 февраля 2025, 14:27
0
Ты максимально абстрактно описываешь функционал. Что значит «добавить сайт»? Что за «запросы»? Что с этими данными будут делать в последствии: показ, фильтрация, отправка?

От ответов на эти вопросы зависит то, как лучше организовать хранение.
aziomav@likemovie.net
21 февраля 2025, 14:23
0
На счет компонентов понятно.

А как можно реализовать будет возможность добавления неограниченного кол-во сайтов для клиента. Т.е. клиент захочет добавить из ЛК не 1, а 5 скажем сайтов или больше и запросы к каждому. Я так понимаю поля в профиле, например через тот же ExtraFields добавляются мной вручную. Не очень понятно как такой момент обыграть
Артур Шевченко
21 февраля 2025, 13:56
0
Часть данных храниться в modx_user_attributes. Но это наверное не очень правильно туда лишние данные сохранять.
А что в этом неправильного? Атрибуты пользователя могут быть каким угодно.

Лучше это через компоненты все сделать?
Да, так как компоненты имеют документацию и тот, кто после тебя будет работать с сайтом сможет к ней обратиться и быстрее понять как и что работает.
aziomav@likemovie.net
21 февраля 2025, 13:15
0
Функции одинаковые у всех. У каждого клиента должна быть возможность добавить сайт, список запросов и выбрать тариф. По сути все, это информация должны сохранятся, редактироваться и удаляться через интерфейс.

Лучше это через компоненты все сделать?
Просто не очень понятно как данные и где будут храниться под пользователя. Часть данных храниться в modx_user_attributes. Но это наверное не очень правильно туда лишние данные сохранять.
Артур Шевченко
21 февраля 2025, 13:06
0
как сделать персональную страницу для каждого пользователя?
Если для всех пользователей должны быть доступны одинаковые функции, то страница должна быть одна и задача сводится не к генерации индивидуальных страниц, в к загрузке персональных данных для авторизованного пользователя.
Для вывода данных пользователя в Modx есть модификатор user. В pdoTools есть сниппет pdoUsers. Можно написать свой сниппет.
Так же очевидно, что кроме стандартных полей требуется хранить ещё какие-то данные пользователя. Для создания полей под эти данные имеет смысл использовать компонент ExtraFields версии не старше 2.0.3.
Когда организуешь место для хранения, нужно будет организовать отправку данных на сервер и обработку ответов. Для этого удобнее всего использовать компонент SendIt.

В целом этих трёх компонентов достаточно для создания личного кабинета любой сложности.
Наумов Алексей
21 февраля 2025, 10:26
0
Ну там явное отсутствие объявления переменной $skip в функции.

Можешь попробовать в начале добавить
$skip = 0;
.

Но это всего лишь PHP warning, работать должно и так)

А насчет второй — ну вот где-то ему скобочка не понравилась. Пробуйте частями может как-то файлы подключать? Найти эту скобочку.
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;
    }