We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 12143
    • 0 Posts
    Практически с этой проблемой можно столкнуться, если бинарные данные (изображения, pdf, doc, xls, etc) хранятся не в файлах, а в базе данных.

    Логично при этом использовать MODx для доступа к БД (получаем преимущества использования xpdo, проверку прав доступа). Соответственно, и отправлять данные пользователю придется из под MODx. Более того, имеющаяся в MODx возможность создания произвольных Content Types (Типов содержимого) обеспечивает отправку данных пользователю с нужными HTTP-заголовками и расширениями файлов.


    А теперь собственно проблема.

    С одной стороны, если нужно выводить бинарные данные (картинка, например), то для данного типа содержимого НЕОБХОДИМО включить опцию Binary. Это ОТКЛЮЧИТ какой-либо парсинг вывода и таким образом обеспечит отправку пользователю двоичных данных, которые никоим образом не изменены парсером.

    С другой стороны, включенная опция Binary также отключает парсинг и обработку сниппетов.

    Таким образом получается, что данные необходимо формировать сниппетом, который невозможно вызвать, так как у документа в Content Type включена опция Binary.
    Классический DeadLock.

    Другими словами: документ, у которого в Content Type включена опция Binary, не может быть сформирован динамически (сниппетами, плейсхолдерами).
    Но даже для статического содержимого есть проблема: при включенной опции Binary не представляется возможным "наполнить" документ бинарными данными - пользователю выводится содержимое поля content, а его редактирование в админке - это html-поле <textarea> (исключение - использование static resources).

    Если же для парсинга сниппетов отключить опцию Binary, то с непредсказуемой вероятностью парсер нарушит целостность данных (например изображение будет частично “битым” или неполным - проверено на практике).

    В принципе решение проблемы - это использование отдельного php-скрипта, не подвязанного на MODx.
    Но конечно правильнее было бы все таки использовать средства MODx.

    Может кто нибудь подскажет решение?
      • 5666
      • 12 Posts
      Совершенно не обязательно хранить файлы в БД. Храните их в отдельной папке закрыв доступ через .htaccess (deny from all), а уже отдавайте через php.
      Примерная реализация: http://modxcms.com/forums/index.php/topic,63527.msg359628.html
        • 12143
        • 0 Posts
        Quote from: comand0s at Aug 15, 2011, 09:47 AM

        Совершенно не обязательно хранить файлы в БД. Храните их в отдельной папке закрыв доступ через .htaccess (deny from all), а уже отдавайте через php.
        Примерная реализация: http://modxcms.com/forums/index.php/topic,63527.msg359628.html

        Да. Спасибо. Более того, при этом файлы таки можно хранить в БД.

        Но!
        Это всего лишь вариация на тему "отдельного php-скрипта".
        Получается, что решения "чисто средствами MODx" таки нет.
        Похоже на недоработку MODx в логике работы опции "Binary" для пользовательских Content Types?