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

Алексей
12 января 2025, 15:10
+1
код можно сделать проще и логичней, набросал как пример
Алексей
12 января 2025, 13:46
+2
Подключи к сайту PHP FFmpeg, думаю в хостинге тебе установят или уже установлен и плюсом сможешь сжимать файлы, простой пример:

{'!getWithFFmpeg' | snippet: [
'file' => ''" // Укажи путь к видеофайлу
]}
как пример сделать через shell
<?php
function getWithFFmpeg($videoPath) {
    $command = "ffmpeg -i " . escapeshellarg($videoPath) . " 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//";
    $duration = shell_exec($command);
    if ($duration) {
         list($hours, $minutes, $seconds) = explode(':', $duration);
           return ($hours * 3600) + ($minutes * 60) + $seconds;
      }
    return false;
}

$duration = getWithFFmpeg($file);

if ($duration !== false) {
    echo "Длительность видео: " . $duration . " секунд";
} else {
    echo "Не удалось получить длительность видео";
}
?>
на выходе будет например: Длительность видео: 5 секунд.
или можно скачать библиотеку, закинуть в папку сайта сам getID3 и написать функцию
Владимир
12 января 2025, 12:53
0
У меня ссылка в FormItAutoResponder передается, а в emailTo нет((
В tpl одинаковые записи
<p><a href="[[+pdf_link]]">Ссылка на PDF</a></p>
Prihod
11 января 2025, 19:51
0
Похоже на то что у тебя сам Docker не запущен. У тебя Docker Desktop? Если да, то перед
docker-compose up -d
запусти Docker Desktop.
Дмитрий
11 января 2025, 13:10
0
Здравствуйте, а есть ли возможность менять и старую цену? Попробовал так
<?php
switch ($modx->event->name) {
    case "msOnGetProductPrice":
        $returned = (array)$modx->getPlaceholder('_returned_price');
        if (!isset($returned['price'])) {
            return;
        }

        $id = $returned['id'];
        $price = $returned['price'];
        $oldPrice = !empty($returned['old_price']) ? $returned['old_price'] : $price; // Предположим, старую цену берём из текущей цены
        $options = !empty($returned['msoptionsprice_options'])
            ? $returned['msoptionsprice_options']
            : (!empty($_REQUEST['options'])
                ? $_REQUEST['options']
                : array());
        $options = array_diff_key($options, array_flip(array('modifications', 'modification')));

        foreach (array_keys($options) as $k) {
            if (!empty($options[$k]) && is_array($options[$k])) {
                foreach ($options[$k] as $v) {
                    // Изменение для текущей цены
                    $q = $modx->newQuery('msopModification')
                        ->innerJoin('msopModificationOption', 'Option',
                            "Option.mid = msopModification.id AND Option.key = '{$k}' AND Option.value = '{$v}'")
                        ->select(array('price', 'old_price')) // Добавляем выборку old_price
                        ->where(array(
                            'msopModification.rid' => $id,
                            'msopModification.type' => 2,
                            'msopModification.active' => true,
                        ));
                    if ($q->prepare() && $q->stmt->execute()) {
                        while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
                            if (!empty($row['price'])) {
                                $price += $row['price'];
                            }
                            if (!empty($row['old_price'])) {
                                $oldPrice += $row['old_price']; // Добавляем старую цену
                            }
                        }
                    }
                }
            }
        }

        // Возвращаем и сохраняем значения
        $modx->event->returnedValues['price'] = $returned['price'] = $price;
        $modx->event->returnedValues['old_price'] = $returned['old_price'] = $oldPrice;
        $modx->setPlaceholder('_returned_price', $returned);
        break;
}
не сработало(
Николай Савин
11 января 2025, 11:35
0
Да. Но это грамотный ответ мнение, с которым я согласен
nikola
11 января 2025, 10:19
0
Спасибо вам, уже добрые люди помогли реализовать, вопрос закрыт
Maks
11 января 2025, 07:06
0
docker-compose up -d
error during connect: Get "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.46/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Ddevilbox%22%3Atrue%7D%7D": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.
Вот такую ошибку получил при выполнении команды
docker-compose up -d
Александр Туниеков
11 января 2025, 04:36
0
ЭЭЭ… что-то ответ похож на chatGPT. Вы из него скопировали?
Serg
11 января 2025, 00:34
0
Посмотрите craftum.com в рекламе у них есть возможность продавать файлы.
nikola
10 января 2025, 22:22
0
Спасибо, сам да, не разбираюсь
Артур Шевченко
10 января 2025, 20:36
0
Нет, феном не выключает стандартный парсер.
Если включить феном, как требует модуль, обычные сниппеты не отвалятся?
Старый не понятный модуль. Как с пользователями работает не понятно. Придется свое писать, но спасибо за наводку. Кто за сколько возьмется?
Артур Шевченко
10 января 2025, 19:21
0
Плагин или сниппет это обычный PHP и в нём есть функции для работы с файлами, в частности filesize
Николай Савин
10 января 2025, 18:57
0
Вопрос о шифровании компонентов для MODX и модифицированных версий MODX связан с интерпретацией лицензий GNU, в частности GNU GPL (General Public License), под которой распространяется MODX.

1. Модифицированная версия MODX
Если вы модифицируете исходный код MODX и распространяете (или продаете) эту модифицированную версию, то лицензия GNU GPL требует, чтобы вы предоставили исходный код модифицированной версии. Шифрование модифицированной версии MODX явно нарушает это требование, так как лицензия GPL требует, чтобы исходный код был доступен для всех, кто получил модифицированную версию.

2. Шифрование компонентов для MODX
Компоненты для MODX (например, плагины, сниппеты, модули) могут рассматриваться как производные работы, если они напрямую используют или модифицируют код MODX. В этом случае они также подпадают под действие лицензии GPL, и их исходный код должен быть предоставлен.

Однако, если компонент является самостоятельным программным обеспечением, которое лишь взаимодействует с MODX через API или другие интерфейсы, не включая и не модифицируя исходный код MODX, то он может не подпадать под требования GPL. В этом случае шифрование такого компонента может быть допустимым, но это зависит от конкретных обстоятельств и интерпретации лицензии.

3. Код, включающий код MODX
Если ваш код включает или модифицирует исходный код MODX, то он считается производной работой и должен распространяться под той же лицензией GPL с предоставлением исходного кода.

4. Код, использующий инструменты MODX
Если ваш код лишь использует API или другие инструменты MODX, не включая и не модифицируя его исходный код, то он может не подпадать под требования GPL. В этом случае шифрование такого кода может быть допустимым.

5. Интерпретация для фреймворков
Для фреймворков, распространяемых под лицензией GPL, обычно применяются те же принципы. Если ваш код является производной работой (включает или модифицирует код фреймворка), то он должен распространяться под GPL с предоставлением исходного кода. Если же ваш код лишь использует API или интерфейсы фреймворка, не включая его код, то он может не подпадать под требования GPL.
Александр Туниеков
10 января 2025, 18:30
0
Как то видел эти советы. Стоит ли шифровать или что-то друое стоит подумать.
Здесь вопрос GNU запрещает шифровать компоненты для MODX или GNU запрещает шифровать модифицированную версию MODX? То есть изменил MODX и стал распространять (продавать) модифицированную версию зашифрованную. Это явно запрещено. А вот шифрование компонентов для MODX не понятно. Лицензия требует предоставлять исходный код основанный на MODX. Это как понимать? Как код включающий код MODX? Или как код использующий инструменты MODX. Как GNU трактуют для кода фреймворков?
Serg
10 января 2025, 18:16
0
Если не РФ то есть площадки с готовым функционалом и платёжными системами.
На МОДХ можно сделать, через msFile и для РФ платежки есть, но если не разбираться самому, то смысла связываться мало.
Артур Шевченко
10 января 2025, 17:48
0
На мой взгляд, следует придерживаться единой логики, т.е. если у тебя в каталоге выводятся товары и у каждого товара размеры это просто опции, то и в избранном надо выводить так же, только не показывать те размеры, которые пользователь не добавлял в избранное. Если же размеры ты реализовал через модификации (msOptionsPrice2), то просто добавляй в избранное модификацию и выводи список модификаций.