Файл ExtensionsHelper.php в Cotonti

Основное назначение файла и его место в системе

Файл ExtensionsHelper.php в системе Cotonti CMF предназначен для помощи в работе с расширениями (модулями и плагинами) в рамках движка. Он предоставляет функциональность для получения информации о расширениях, таких как их название и описание. Этот класс работает с языковыми файлами, файлами настроек расширений и другими данными, связанными с расширениями.

Вместе с другими компонентами системы, ExtensionsHelper.php помогает управлять расширениями, обеспечивая централизованный доступ к их метаданным (например, названию и описанию). Этот файл помогает упростить работу с расширениями, делая код системы более модульным и легко расширяемым.

Суть содержания кода

  1. Получение информации о расширении:

    • Метод getTitle: Возвращает название расширения, начиная с поиска в языковом файле, затем проверяя наличие в других источниках (например, файле настроек расширения).
    • Метод getDescription: Похож на getTitle, но возвращает описание расширения. Также ищет описание в языковом файле и в файле настроек.
  2. Работа с языковыми файлами:

    • Для каждого расширения, если оно имеет отдельный языковой файл, код пытается загрузить его и использовать данные из этого файла (например, для перевода).
  3. Механизм поиска и приоритетов:

    • Методы сначала пытаются найти данные в языковом файле, затем — в настройках расширения, и, если данные не найдены, возвращают дефолтные значения.

Список классов в файле

В файле ExtensionsHelper.php есть один класс:

  • ExtensionsHelper

Список методов и функций в файле

В классе ExtensionsHelper определены следующие методы:

  1. getTitle(string $extensionCode, ?string $extensionType = null, ?string $lang = null): string

    • Метод для получения названия расширения. Он ищет название в языковых файлах, затем в настройках расширения и, если не находит, возвращает код расширения.
  2. getDescription(string $extensionCode, ?string $extensionType = null, ?string $lang = null): string

    • Метод для получения описания расширения. Логика поиска аналогична методу getTitle: сначала проверяется языковой файл, потом файл настроек расширения.

Вывод

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

находится по адресу: /system/extensions/ExtensionsHelper.php

<?php
/**
 * @package Extensions
 * @copyright (c) Cotonti Team
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
 */

declare(strict_types=1);  // Объявление строгой типизации

namespace cot\extensions;  // Пространство имен для расширений

defined('COT_CODE') or die('Wrong URL.');  // Проверка, что код вызван правильно через Cotonti

use Cot;  // Подключение объекта Cot для работы с базой данных и конфигурацией
use cot\traits\GetInstanceTrait;  // Использование трейта для получения экземпляра класса

class ExtensionsHelper
{
    use GetInstanceTrait;  // Использование трейта для получения экземпляра класса

    public function getTitle(string $extensionCode, ?string $extensionType = null, ?string $lang = null): string
    {
        global $cot_modules, $cot_plugins_enabled;  // Доступ к глобальным переменным для модулей и плагинов

        if ($extensionType === null) {  // Если тип расширения не указан
            $extensionType = ExtensionsService::getInstance()->getType($extensionCode);  // Получаем тип расширения
        }

        // Некоторые файлы расширений зависят от основного языкового файла. Например: PFS
        $L = Cot::$L;  // Получаем языковые строки для текущего языка

        unset($L[$extensionCode . '_title'], $L['plu_title'], $L['info_name']);  // Убираем устаревшие ключи, если они существуют

        $langFile = cot_langfile($extensionCode, $extensionType, 'en', $lang);  // Получаем путь к языковому файлу для расширения
        if (!empty($langFile) && file_exists($langFile)) {  // Если файл существует
            include $langFile;  // Включаем языковой файл
        }

        if (!empty($L[$extensionCode . '_title'])) {  // Если в языковых строках есть название расширения
            return $L[$extensionCode . '_title'];  // Возвращаем название расширения
        }

        if (!empty($L['plu_title'])) {  // Если есть название плагина
            return $L['plu_title'];  // Возвращаем название плагина
        }

        if (!empty($L['info_name'])) {  // Если есть информация о названии
            return $L['info_name'];  // Возвращаем это название
        }

        if (
            $extensionType === ExtensionsDictionary::TYPE_MODULE  // Если тип расширения — модуль
            && isset($cot_modules[$extensionCode])  // И модуль существует в массиве модулей
        ) {
            return $cot_modules[$extensionCode]['title'];  // Возвращаем название модуля
        }

        if (
            $extensionType === ExtensionsDictionary::TYPE_PLUGIN  // Если тип расширения — плагин
            && isset($cot_plugins_enabled[$extensionCode])  // И плагин существует в массиве включенных плагинов
        ) {
            return $cot_plugins_enabled[$extensionCode]['title'];  // Возвращаем название плагина
        }

        $extensionDirectory = $extensionType === ExtensionsDictionary::TYPE_MODULE  // Если тип расширения — модуль
            ? Cot::$cfg['modules_dir']  // Папка с модулями
            : Cot::$cfg['plugins_dir'];  // Папка с плагинами

        $setupFile = $extensionDirectory . '/' . $extensionCode . '/' . $extensionCode . '.setup.php';  // Путь к файлу настроек расширения
        $exists = file_exists($setupFile);  // Проверяем, существует ли файл настроек
        if ($exists) {  // Если файл существует
            $info = cot_infoget($setupFile, 'COT_EXT');  // Получаем информацию из файла настроек
            if (!empty($info['Name'])) {  // Если имя расширения найдено в файле настроек
                return $info['Name'];  // Возвращаем имя расширения
            }
        }

        return $extensionCode;  // В случае отсутствия информации, возвращаем код расширения
    }

Объяснение кода:

  1. getTitle — это метод, который используется для получения названия расширения (модуль или плагин). Он поддерживает несколько механизмов поиска имени:
    • Сначала ищется в языковом файле.
    • Если название не найдено в языке, ищется в глобальных массивах $cot_modules и $cot_plugins_enabled.
    • Если название не найдено, оно извлекается из файла настроек .setup.php, если он существует.
    • Если все вышеперечисленные методы не дали результатов, возвращается код расширения как название.

Примечания:

  • Код эффективно использует систему языков для многоязычности.
  • Включает динамическое получение типов расширений и работу с файлами настроек.
  • Это базовая функциональность для получения метаданных об установленных расширениях в Cotonti CMF.

 

public function getDescription(string $extensionCode, ?string $extensionType = null, ? string $lang = null): string
{
    if ($extensionType === null) {  // Если тип расширения не указан
        $extensionType = ExtensionsService::getInstance()->getType($extensionCode);  // Получаем тип расширения
    }

    // Некоторые файлы расширений зависят от основного языкового файла. Например: PFS
    $L = Cot::$L;  // Получаем языковые строки для текущего языка

    unset($L[$extensionCode . '_description'], $L['info_desc']);  // Убираем устаревшие ключи, если они существуют

    $langFile = cot_langfile($extensionCode, $extensionType, 'en', $lang);  // Получаем путь к языковому файлу для расширения
    if (!empty($langFile) && file_exists($langFile)) {  // Если файл существует
        include $langFile;  // Включаем языковой файл
    }

    if (!empty($L[$extensionCode . '_description'])) {  // Если в языковых строках есть описание расширения
        return $L[$extensionCode . '_description'];  // Возвращаем описание расширения
    }

    if (!empty($L['info_desc'])) {  // Если есть информация о описании
        return $L['info_desc'];  // Возвращаем это описание
    }

    $extensionDirectory = $extensionType === ExtensionsDictionary::TYPE_MODULE  // Если тип расширения — модуль
        ? Cot::$cfg['modules_dir']  // Папка с модулями
        : Cot::$cfg['plugins_dir'];  // Папка с плагинами

    $setupFile = $extensionDirectory . '/' . $extensionCode . '/' . $extensionCode . '.setup.php';  // Путь к файлу настроек расширения
    $exists = file_exists($setupFile);  // Проверяем, существует ли файл настроек
    if ($exists) {  // Если файл существует
        $info = cot_infoget($setupFile, 'COT_EXT');  // Получаем информацию из файла настроек
        if (!empty($info['Description'])) {  // Если описание найдено в файле настроек
            return $info['Description'];  // Возвращаем описание
        }
    }

    return '';  // Если описание не найдено, возвращаем пустую строку
}

Объяснение кода:

  1. getDescription — это метод, который используется для получения описания расширения (модуль или плагин). Он использует несколько механизмов поиска описания:
    • Сначала ищется в языковом файле.
    • Если описание не найдено в языке, ищется в файле настроек .setup.php.
    • Если описание не найдено, возвращается пустая строка.

Примечания:

  • Код проверяет наличие языкового файла и описания в нем.
  • Включает возможность извлечения описания из файла настроек расширения.
  • Возвращается описание, если оно найдено, или пустая строка, если описание отсутствует.

 

 

 

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

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

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

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

Administrator

Оффлайн

Administrator

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

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