Размер и расширение файла из статического ресурса

В родительском ресурсе через pdoPage выводится список pdf-файлов, которые берутся из дочерних ресурсов (тип «статический файл»), Подскажите пожалуйста, как вывести на сайте размер и расширение статического файла? Может есть готовый сниппет который это делает?
Дмитрий
28 марта 2023, 10:38
modx.pro
426
0

Комментарии: 2

Вячеслав Варов
30 августа 2024, 08:48
0
Думаю уже не актуально, но может будет кому полезно, добавил модификатор fenom который выводит размер файла и его расширение. Создать плагин и повесить его на событие pdoToolsOnFenomInit

Вызывать в виде {'linkToFile' | getFileInfo}

<?php
/** Функция обрабатывает размер файла в байтах в человекочитаемый 
    формат добавляя к размеру файла размерность, например 128 Mb
*/
if (!function_exists("human_filesize")) {
    function human_filesize($bytes, $decimals = 2)
    {
        $sz = ["B", "Kb", "Mb", "Gb", "Tb", "Pb"];
        $factor = floor((strlen($bytes) - 1) / 3);
        return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) .
            " " .
            @$sz[$factor];
    }
}

/** @var modX $modx */
switch ($modx->event->name) {
    case "pdoToolsOnFenomInit":
        /** @var Fenom $fenom
            Мы получаем переменную $fenom при его первой инициализации и можем вызывать его методы. 
            Например, добавим модификатор вывода имени домена сайта из произвольной ссылки.
        */
        $fenom->addModifier("getFileInfo", function ($input) {
            if (file_exists($input)) {
                return strtoupper(pathinfo($input, PATHINFO_EXTENSION)) .
                    ", " .
                    human_filesize(filesize($input), 0);
            }
        });
        break;
}
    Максим
    30 августа 2024, 10:59
    0
    Думаю, лучше оформить «human_filesize» и «getFileInfo» в сниппеты и вызывать как модификатор фенома.
    Плагины нагружают систему как мне кажется. Тем более такой мелкий и редко используемый.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2