Функции для работы с файловой системой сайта в Битриксе: GetDirIndex(), GetDirectoryIndex(), GetDirIndexArray()

Система управления контентом 1С-Битрикс предоставляет множество функций для работы с файловой системой сайта. Одной из важных задач при разработке сайтов является корректная обработка индексных файлов каталога, которые автоматически загружаются при обращении к каталогу без указания конкретного файла. В Битрикс для решения этой задачи существуют функции GetDirectoryIndex, GetDirIndex, и GetDirIndexArray, которые позволяют гибко настроить работу с индексными файлами сайта.

Функции для работы с файловой системой сайта в Битриксе: GetDirIndex(),  GetDirectoryIndex(), GetDirIndexArray()

В этой статье мы подробно рассмотрим эти функции и приведем примеры их использования.


1. Функция GetDirIndex

Описание

Функция GetDirIndex предназначена для того, чтобы вернуть имя индексного файла для указанного каталога сайта. Эта функция является важной частью работы с файловой системой, так как она позволяет автоматически определять индексный файл для каталога, не указывая его вручную.

Синтаксис

string GetDirIndex(string $path, string $DirIndex = false);

Параметры

  • $path (string): Путь к каталогу относительно корня сайта, для которого необходимо определить индексный файл. Это обязательный параметр.
  • $DirIndex (string, optional): Строка с именами возможных индексных файлов, разделенных пробелом, в порядке убывания приоритета. Например: index.php index.html index.htm. Этот параметр не является обязательным. Если он не задан, функция будет использовать значение по умолчанию из настроек веб-сервера или константы DIRECTORY_INDEX.

Алгоритм работы

  1. Если параметр $DirIndex задан, то функция использует его для поиска индексного файла. Если параметр не задан, то будет использована константа DIRECTORY_INDEX.
  2. Константа DIRECTORY_INDEX может быть задана в конфигурационных файлах Битрикс (например, в файле /bitrix/php_interface/dbconn.php или /bitrix/php_interface/init.php).
  3. Если ни одно из значений не задано, то будет использован список по умолчанию: "index.php index.html index.htm index.phtml default.html index.php3".
  4. Функция по очеред из файлов на сервере и возвращает первый найденный файл.

Пример использования

Предположим, что вам нужно получить имя индексного файла для каталога /about/:

$indexFile = GetDirIndex("/about/");
echo "Индексный файл: " . $indexFile;

Если в каталоге /about/ существует файл index.html, то эта функция вернет index.html.


2. Функция GetDirectoryIndex

Функция GetDirectoryIndex является «оберткой» для функции GetDirIndex. Она выполняет ту же задачу, но использует её для обеспечения совместимости с более старой версией Битрикс. Если вы работаете с кодом, который использует эту старую функцию, она будет работать аналогично.

Пример использования

$indexFile = GetDirectoryIndex("/about/");
echo "Индексный файл: " . $indexFile;

Этот код также вернет индексный файл каталога /about/, используя логику, описанную для GetDirIndex.


3. Функция GetDirIndexArray

Функция GetDirIndexArray возвращает массив возможных индексных файлов, которые могут быть использованы для поиска в каталоге. Она разбивает строку с именами файлов, разделенными пробелом, на отдельные элементы и возвращает их в виде массива.

Синтаксис

array GetDirIndexArray(string $strDirIndex = false);

Параметры

  • $strDirIndex (string, optional): Строка с возможными именами индексных файлов, разделенными пробелами. Если не задано, используется значение по умолчанию.

Пример использования

Если вы хотите получить список возможных индексных файлов для каталога и проверить, какие из них существуют, можно использовать функцию GetDirIndexArray следующим образом:

$dirIndexArray = GetDirIndexArray("index.php index.html index.htm");
foreach ($dirIndexArray as $file) {
    echo "Пытаемся найти файл: " . $file . "
"; }

Этот код сначала разделит строку index.php index.html index.htm на массив и выведет имена файлов по очереди.


Полный код всех функций

Для вашего удобства, вот полный код функций GetDirectoryIndex, GetDirIndex и GetDirIndexArray, как он реализован в Битрикс:

function GetDirectoryIndex($path, $strDirIndex = false)
{
    return GetDirIndex($path, $strDirIndex);
}

function GetDirIndex($path, $strDirIndex = false)
{
    $doc_root = ($_SERVER["DOCUMENT_ROOT"] <> '' ? : $GLOBALS["DOCUMENT_ROOT"]);
    $dir = GetDirPath($path);
    $arrDirIndex = GetDirIndexArray($strDirIndex);
    if (is_array($arrDirIndex) && !empty($arrDirIndex)) {
        foreach ($arrDirIndex as $page_index)
            if (file_exists($doc_root . $dir . $page_index))
                return $page_index;
    }
    return "index.php";
}

function GetDirIndexArray($strDirIndex = false)
{
    static $arDefault = array("index.php", "index.html", "index.htm", "index.phtml", "default.html", "index.php3");

    if ($strDirIndex === false && !defined("DIRECTORY_INDEX"))
        return $arDefault;

    if ($strDirIndex === false && defined("DIRECTORY_INDEX"))
        $strDirIndex = DIRECTORY_INDEX;

    $arrRes = array();
    $arr = explode(" ", $strDirIndex);
    foreach ($arr as $page_index) {
        $page_index = trim($page_index);
        if ($page_index != '')
            $arrRes[] = $page_index;
    }
    return $arrRes;
}

Заключение

Функции GetDirectoryIndex, GetDirIndex и GetDirIndexArray являются важными инструментами для работы с индексными файлами в системе 1С-Битрикс. Они позволяют гибко настраивать поведение сайта при обращении к каталогам, обеспечивая поддержку различных веб-серверов и конфигураций. Используя эти функции, вы можете избежать ошибок в работе с файловой системой и улучшить производительность сайта, автоматизируя выбор правильного индексного файла.

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

Теги:  файловая система, GetDirIndex, GetDirectoryIndex, GetDirIndexArray, индексные файлы

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Техническая поддержка

выполняется с сайтами на основе любых CMS

от 5 000 рублей
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack на основе готовой верстки

* если нет верстки, то возможность верстать с Figma в режиме редактора

Перенос сайтов на «1С-Битрикс»

сайты на платформе «1С-Битрикс» — это удобство, надежность и высокая посещаемость

от 12 000 рублей
Перенос сайтов с любых CMS и статичных страниц на платформу «1С-Битрикс», с учетом дизайна, верстки и урл-адресов. С сохранением всей информации и структуры сайта.

* зависит от объема выполняемых работ.