Функция cot_themes_info в Cotonti

Функция cot_themes_info в фреймворке Cotonti служит для получения информации о доступных темах (или конкретной теме), загружая данные о темах из файлов в директории с темами. Если имя темы указано, функция вернёт информацию только по этой теме; если имя не указано, возвращается информация по всем доступным темам.


Разбор функции cot_themes_info


/**
 * Returns themes info data for all available themes or a specified one
 *
 * @param string $theme_name Name of theme to get info.
 *        Returns list for all themes if no name specified.
 * @return mixed Array of Theme info data or Theme info data or FALSE
 */
function cot_themes_info($theme_name = null)
{
    global $L, $Ls, $R;
    require_once cot_incfile('extensions');

    $themes_data = array();
    $themelist = array();
    $handle = opendir(Cot::$cfg['themes_dir']);
    while ($f = readdir($handle)) {
        if (mb_strpos($f, '.') === FALSE && is_dir(Cot::$cfg['themes_dir'] . "/$f") && $f != "admin") {
            $themelist[] = $f;
        }
    }
    closedir($handle);

    if (!is_null($theme_name)) {
        if (!in_array($theme_name, $themelist)) {
            return false;

        } else {
            $themelist = array($theme_name);
        }

    } else {
        sort($themelist);
    }

    foreach ($themelist as $name) {
        if ($theme_name && $theme_name != $name) continue;
        $themeinfo = array();
        $themeinfo_file = Cot::$cfg['themes_dir'] . "/$name/$name.php";
        if (file_exists($themeinfo_file) && $info = cot_infoget($themeinfo_file, 'COT_THEME')) {
            $themeinfo = $info;
            if (empty($themeinfo['Title'])) {
                $themeinfo['Title'] = isset($info['Name']) ? $info['Name'] : $name;
            }
            $schemes_list = [];
            if (!empty($info['Schemes'])) {
                $schemes = preg_split('/\s*,\s*/', $info['Schemes']);
                sort($schemes);
                foreach ($schemes as $scheme) {
                    list($sc_name, $sc_title) = explode(':', $scheme);
                    $schemes_list[$sc_name] = $sc_title;
                }
            }
            $themeinfo['Schemes'] = $schemes_list;
            if(!isset($themeinfo['Version'])) $themeinfo['Version'] = '';
        }
        if (sizeof($themeinfo) > 0) $themes_data[$name] = $themeinfo;
    }

    if (is_null($theme_name)) {
        return $themes_data;

    } else {
        return $themes_data[$theme_name];
    }
}

 

 

Параметры функции:

$theme_name — имя конкретной темы, информацию по которой необходимо получить. Если параметр не указан, то возвращается информация о всех доступных темах.


Логика работы функции:

Подключение зависимостей:

Функция требует подключения файла extensions, который может содержать дополнительные расширения или модули для работы с темами.


Чтение списка тем:

Функция читает все директории в папке, указанной в конфигурации (Cot::$cfg['themes_dir']), исключая директорию "admin".
Для каждой директории (предположительно с темой) проверяется, является ли она директорией, и добавляется в список тем.


Проверка конкретной темы:

Если указан параметр $theme_name, то функция проверяет, существует ли такая тема в списке. Если нет, возвращается false.
Если тема существует, то из списка тем выбирается только эта тема для обработки.
Чтение и обработка информации о теме:

Для каждой темы (или только указанной) функция пытается найти файл с информацией о теме ($name.php) в директории темы.
Используется функция cot_infoget для извлечения метаинформации из этого файла. Если файл существует и информация успешно извлечена, то она сохраняется в массив $themeinfo.


Важные поля:

Title — название темы. Если оно не задано, то используется название, полученное из имени файла темы.
Schemes — схемы оформления темы. Каждая схема имеет имя и заголовок, которые сохраняются в массиве.
Version — версия темы. Если не указана, то по умолчанию оставляется пустым.


Возвращаемое значение:

Если не был указан параметр $theme_name, возвращается массив с информацией по всем доступным темам.
Если имя темы указано, возвращается информация только по этой теме.
Возвращаемое значение:
mixed: либо массив с информацией о темах, либо информация по одной теме, либо false, если тема не найдена.

 

Примеры использования в контексте Cotonti CMF:


Пример 1: Получение информации по всем доступным темам


 

$themes_info = cot_themes_info(); // Возвращает массив с информацией по всем доступным темам
foreach ($themes_info as $theme_name => $theme_info) {
    echo "Тема: " . $theme_name . "<br>";
    echo "Заголовок: " . $theme_info['Title'] . "<br>";
    echo "Схемы: " . implode(", ", $theme_info['Schemes']) . "<br>";
    echo "Версия: " . $theme_info['Version'] . "<br>";
}

 


Пример 2: Получение информации по одной теме

$theme_name = 'default'; // Имя темы
$theme_info = cot_themes_info($theme_name); // Возвращает информацию по теме 'default'
if ($theme_info) {
    echo "Заголовок: " . $theme_info['Title'] . "<br>";
    echo "Схемы: " . implode(", ", $theme_info['Schemes']) . "<br>";
    echo "Версия: " . $theme_info['Version'] . "<br>";
} else {
    echo "Тема не найдена.";
}


 


Пример 3: Проверка существования конкретной темы перед использованием


 

$theme_name = 'custom_theme';
$theme_info = cot_themes_info($theme_name);
if ($theme_info) {
    // Дальнейшая обработка с использованием информации о теме
    echo "Тема существует, её версия: " . $theme_info['Version'];
} else {
    echo "Тема с именем '$theme_name' не найдена.";
}


Пример 4: Получение схем для темы и их использование


 

$theme_name = 'modern';
$theme_info = cot_themes_info($theme_name);
if ($theme_info && !empty($theme_info['Schemes'])) {
    echo "Доступные схемы для темы '$theme_name':<br>";
    foreach ($theme_info['Schemes'] as $scheme_name => $scheme_title) {
        echo "- $scheme_title ($scheme_name)<br>";
    }
} else {
    echo "Схемы не найдены для темы '$theme_name'.";
}


Заключение:


Функция cot_themes_info предоставляет удобный способ получения информации о темах в Cotonti. Она позволяет работать с метаинформацией тем (название, схемы, версия) и легко интегрировать её в различные части сайта или панели управления.

4 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 22.01.2025 01:17
  • Последнее обновление: 22.01.2025 01:17