Логотип

Документация по макросам и шаблонам UMI.CMS

Файловая система: протокол UFS

Протокол UFS предназначен для получения в XML-формате информации о структуре папок и файлов, а также о свойствах файлов, расположенных на сайте. Другими словами, это протокол для работы со статичными данными. Это может быть удобным, например, для создания документации или справки из статичных HTML-файлов любого формата. С помощью протокола UFS легко создать индексный файл, соответствующий структуре файловой системы.

Получение информации о папке в виде XML

Чтобы увидеть содержимое папки в XML-формате, наберем в адресной строке браузера http://ваш_сайт/ufs/ и затем путь к папке от корневой папки сайта, например http://ваш_сайт/ufs/images. Вы увидите информацию обо всех папках и файлах, расположенных в указанной папке:

<?xml version="1.0" encoding="utf-8" ?>
<udata>
    <directory name="cms" />
    <directory name="icons" />
    <file name="top.jpg" ext="jpg" size="23303" />
    <file name="logo.png" ext="png" size="4997" />
… другие файлы…
</udata>

Замечание

Для версий до 2.8: если на странице http://ваш_сайт/ufs/images отображается сообщение, что протокол UFs недоступен, создайте в корневой папке сайта пустой файл с именем scheme.ufs.allow и обновите страницу.

Для версий, начиная с 2.8: необходимо указать параметр ufs.http.allow = "1" в файле config.ini в секции [streams] (см. Секция [streams]).

Внимание

Из соображений безопасности после окончания этапа разработки файл scheme.ufs.allow настоятельно рекомендуется удалить. В противном случае некоторые данные, получаемые по этому протоколу через http, могут быть доступны любому посетителю сайта.

По умолчанию запрос по протоколу UFs выводит структуру нулевой глубиной вложенности. Если требуется получить структуру с большей глубиной, то при запросе необходимо добавить параметр depth со значением, равным нужной глубине вложенности, например http://ваш_сайт/ufs/images?depth=1. Вы получите результат, аналогичный представленному:

<?xml version="1.0" encoding="utf-8" ?>
<udata>
    <directory name="cms">
        <directory name="admin" />
        <directory name="content" />
    … другие папки в папке cms…
        <file name="ico_forum_guest.gif" ext="gif" size="567" />
        <file name="ico_forum_sv.gif" ext="gif" size="969" />
    … другие файлы в папке cms…
    </directory>
    <directory name="icons">
        <file name="special_price.png" ext="png" size="2060" />
        <file name="home_active.gif" ext="gif" size="66" />
    … другие файлы в папке icons…
    </directory>
    <file name="top.jpg" ext="jpg" size="23303" />
    <file name="logo.png" ext="png" size="4997" />
… другие файлы в папке images…
</udata>

Если необходимо получить полную структуру, с максимальной глубиной вложенности, вы можете указать параметр depth = "–1". При этом необходимо учитывать, что чем больше файловая структура, тем дольше будет выполняться запрос и обработка результата запроса XSLT-шаблоном.

Получение информации о файле в виде XML

По протоколу UFs можно также получить сведения о файле. Для этого наберем в адресной строке браузера http://ваш_сайт/ufs/ и затем путь и имя файла, например http://ваш_сайт/index.html. Вы увидите информацию о свойствах файла:

<?xml version="1.0" encoding="utf-8" ?>
<udata>
    <file name="index.html" ext="html" size="1446" />
</udata>

Если запрашиваемый файл является текстовым ".txt", то его содержимое копируется в элемент source, дочерний по отношению к элементу file.

Если запрашиваемый файл является рисунком, в элемент file добавляются свойства этого рисунка:

<?xml version="1.0" encoding="utf-8" ?>
<udata>
    <file name="top.jpg" ext="jpg" size="23303" mimeType="image/jpeg">
        <imageWidth>963</imageWidth>
        <imageHeight>188</imageHeight>
    </file>
</udata>

Если на вашем хостинге подключена дополнительная PHP-библиотека EXIF (Exchangeable Image File Format), результат запроса будет содержать все возможные свойства рисунка.

Замечание

Получить по протоколу UFs информацию об XML-файле невозможно, так как запрос вида http://ваш_сайт/ufs/path/file.xml рассматривается системой не как запрос по протоколу UFs, а как обычный XML-файл.

Получение информации обо всех файлах в папке в виде XML

Получить информацию обо всех файлах в папке можно, указав при запросе дополнительный параметр all, например http://ваш_сайт/ufs/images?all:

<?xml version="1.0" encoding="utf-8" ?>
<udata>
    <directory name="cms" />
    <directory name="icons" />
    <file name="top.jpg" ext="jpg" size="23303" mimeType="image/jpeg">
        <imageWidth>963</imageWidth>
        <imageHeight>188</imageHeight>
    </file>
    <file name="logo.png" ext="png" size="4997" mimeType="image/png">
        <imageWidth>286</imageWidth>
        <imageHeight>62</imageHeight>
    </file>
… другие файлы…
</udata>

Добавление результатов вызова UFs в шаблон

Как и в случае с запросами по протоколу UData, UPage и UObject, добавить результат выполнения запроса по протоколу UFs в XSLT-шаблон можно с помощью функции document(): document('ufs://images').

Кэширование результатов вызова

Аналогично кэшированию результов вызова по протоколу UData (см. «Макросы: протокол UData»).

Информация о файлах и папках в формате JSON

Для того чтобы получить информацию о файлах и папках в формате JSON, допишите после вызова ".json"