Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 102 комментария

Александр Туниеков
Александр Туниеков
Человек бы попытася что-то определенное сказать. Либо можно либо нельзя. А chatGPT выразился в общем. Четкого ответа что компоненты для MODX можно шифровать нет. Человек понимает, что компоненты MODX не включают в себя код MODX. Код MODX компонентом никак не модифицируется. А chatGPT этого не понимает.
Хотя плагин на события модифицирует поведение MODX, но в себе кода MODX так то не содержит. Только API вызывает.
Алексей
Алексей
Подключи к сайту 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 и написать функцию
Дмитрий
Дмитрий
Здравствуйте, а есть ли возможность менять и старую цену? Попробовал так
<?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;
}
не сработало(
Maks
Maks
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
Николай Савин
Николай Савин
Вопрос о шифровании компонентов для 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.