⟵ сюдатуда ⟶
  • Установка
  • Установка на Ubuntu
  • Обновления
  • Установка PRO
  • Бэкапы
  • Multi/no-multi
  • Консольная утилита bin/totum
  • Основы для пользователей
  • Интерфейс и компоновка
  • Таблицы и их параметры
  • Префильтр
  • Поля и их параметры
  • Синтаксис
  • Код, действия, форматирование
  • Реляционные взаимосвязи
  • Порядок расчета и единицы пересчета
  • Сравнения
  • Функции
  • Отладка
  • Автозаполнение расчетных и временных
  • Дублирование строк и циклов
  • Печать и CSV
  • API
  • Роли и пользователи
  • Нотификации
  • Действия по расписанию
  • Системные таблицы
  • Дополнительные интерфейсы
  • Структура файлов
  • Структура базы
  • [PRO] Деревья
  • [PRO] Анонимные таблицы
  • [PRO] Внешние формы
  • [PRO] Экспорт и импорт таблиц
  • [PRO] MeiliSearch
  • [PRO] Базы данных
  • [PRO] Настройка CSS
  • [PRO] Custom docs
  • [PRO] LDAP AD
  • [PRO] Версии файлов
  • [PRO] List-unsubscribe
  • [PRO] Динамические поля
  • [PRO] Only Office
  • [PRO] Auth Tokens
  • [PRO] 2FA
  • [PRO] Superlang
  • [PRO] Profiler
  • [PRO] Подключение функций
  • Требования к размещению
  • Подключение дополнительного интерфейса
  • [SRV] Подключение
  • [SRV] Пользовательские возможности
  • [SRV] XLSX/DOCX генераторы
  • [SRV] chatGPT
  • Подключение функций

    Для подключения дополнительной функции ее нужно создать в файле CalculateExtensions.php, который находится в корне разворачиваемого ТОТУМ (в папке с Conf.php).

    Например, подключаем функцию extHello:

    Название функции обязательно! должно начинаться с ext*

    <?php
    
    use totum\common\errorException;
    $CalculateExtensions = new \stdClass();
    $CalculateExtensions->jsTemplates = '[{"name":"extHello","t":"(name: \"\")","d":false,"p":["name"],"m":[],"n":["name"]}]';
    $CalculateExtensions->extHello=function ($params){
        $params=$this->getParamsArray($params);
        return 'Привет, '.$params['name'];
    };
    

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

    Где:

    • name — название функции;

    • t — шаблон для автоподстановки;

    • d — является ли функция устаревшей;

    • p - список допустимых параметров;

    • m — список множественных параметров (может присутствовать при вызове несколько раз);

    • n — список необходимых параметров.

    При вызове функция запускается из объекта Calculate, CalculateAction, CalculateFormat или CalculateSelect* — и может пользоваться всеми их функциями. Например, getParamsArray.

    При вызове функция получает переменную $params, содержащую строку! с параметрами внутри скобок после имени функции. Чтобы получить параметры, рассчитанные по логике ТОТУМ, необходимо вызвать функцию $this->getParamsArray($params). Эта функция имеет также параметры, заполненные по-умолчанию, которые можно задать как вам требуется:

    function getParamsArray($paramsString, $arrayParams = [], $notExecParams = [], $threePartParams = ['where', 'filter', 'key'])
    

    Где:

    • $paramsString — строка с параметрами, полученная функцией;

    • $arrayParams — параметры, которые могут встречаться несколько раз (множественные параметры из шаблона) - они будут возвращены в виде массива независимо от того, встретился он один или несколько раз;

    • $notExecParams — параметры, которые будут возвращены в виде неразобранной строки (полезно, когда код выполняется по условиям);

    • $threePartParams — параметры, состоящие из трех частей 'field' = "value" — возвращается в виде ассоциированного массива/списка ассоциированных массивов {"field" :"field", "operator":"=", "value": $value}.

    Если функция должна вернуть ошибку выбрасывается исключение:

    throw new errorException("Текст ошибки");
    

    Ошибка выброшенная в коде действия прерывает цепочку пересчетов и изменения не сохраняются.

    Ошибка, выброшенная при расчете значения поля, установит расчетное (и итоговое, если поле не зафиксировано) значение поля в ОШБК!

    Сложный вариант:

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

    ConfParent::getCalculateExtensionFunction
    
    ConfParent::getExtFunctionsTemplates
    

    Требования к размещению

    ХОРОШЕЙ ПРАКТИКОЙ ЯВЛЯЕТСЯ СОХРАНЕНИЕ РАБОТОСПОСОБНОСТИ СТАНДАРТНОЙ УТИЛИТЫ ОБНОВЛЕНИЯ bin/totum git-update!

    Для этого:

    • Не модифицируйте системные файлы.

    • CalculateExtensions.php находится в git ignore и не будет перезаписан.

    • Дополнительные скрипты положите в /totum/ext/* эта папка никогда не будет использована в master-ветке core-разработчиков.

    • Возможно добавление зависимостей в composer, но в этом случае вам нужно будет сделать merge когда в основной ветке разработки обновятся зависимости.

      • После того, как вы внесли изменения в composer.json и composer.lockдобавьте их в коммит, чтобы при последующих обновлениях автоматически сработал git merge в той части, в которой это возможно.
    • если вы сделали отдельную ветку для разработки на локальной машине клиента:

      НИ В КОЕМ СЛУЧАЕ НЕ МЕРДЖИТЕ ЕЕ В МАСТЕР!!!

      ВАМ НУЖНО СКОПИРОВАТЬ ДОБАВЛЯЕМЫЕ ФАЙЛЫ РУКАМИ!!!

      • Поэтому наиболее рабочей нам кажется следующая схема:

        • Создаем папку рядом с папкой установки тотум — totum_ext

        • Делаем там git init

        • Сбрасываем туда файлы с разработкой

        • Из основной папки totum ставим на них в нужных местах ссылки ln -s ... (для CalculateExtensions.php и папки /totum/ext/)

        • Делаем git add * в дополнительной папке разработки

        • git commit -m 'текст комментария'

        • Подключение к внешнему репозиторию по желанию

    Подключение дополнительного интерфейса

    Для добавления дополнительного интерфейса нужно добавить папку в каталог totum/moduls — можно скопировать имеющийся интерфейс анонимных таблиц (An) или интерфейс Table. Этот модуль станет доступен в ТОТУМ по пути /названиевашейпапки/

    Если подключить js и css файлы ТОТУМа, то можно пользоваться встроенными интерфейсными возможностями вызова таблиц. Исходники фронтенда выкладываются в dev ветку репозитария https://github.com/.../totum-front. Изменения происходят часто.