Користувальницькькі налаштування

Налаштування сайту


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації до оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Допомога проекту
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

yalf

Це стара версія документу!


YALF - Yet Another Lightweight Framework

Зачем?

Что включает?

Системные требования

PHP: >=5.3, 7.0, 7.2, 7.4, 8.2
PHP extensions: BCMATH CURL GD ICONV MBSTRING MYSQL/MYSQLI PDF SNMP SOAP XML ZIP ZLIB SOCKETS FTP IMAP JSON POSIX PHAR SESSION SIMPLEXML TOKENIZER MEMCACHED
PHP Options: short_open_tag=on, safe_mode=off, register_globals=off, magic_quotes=off, allow_url_fopen=on

Установка

$ mkdir myapp
$ cd myapp
$ fetch http://yalf.nightfly.biz/yalf_current.tgz
$ tar zxvf yalf_current.tgz && rm -fr yalf_current.tgz
$ chmod -R 777 exports content config

Начальная конфигурация config/yalf.ini

yalf.ini
; Main module name from modules/general/
INDEX_MODULE="index"
; Template name to preload from skins/ like "paper", "void", etc...
YALF_SKIN="paper"
; Default application language. Loaded from languages directory.
YALF_LANG="english"
; Allow online language switching by remote clients? 
; Now supported locale switching by GET callback like ?yalfswitchlocale=ukrainian
YALF_LANG_SWITCHABLE=0
;Is application global menu rendering enabled?
YALF_MENU_ENABLED=1

; XHProf libs path. Recomended to be masked in production.
XHPROF_PATH="_xhprof"

; Your application logo, name and site URL
YALF_LOGO="skins/yalflogo.png"
YALF_URL="http://yalf.nightfly.biz"
YALF_APP="Dummy application"
YALF_TITLE="Application title here"

; Disabled modules list. Separator - comma.
YALF_DISABLED_MODULES=""

; Emulate RCMS users auth and rights system?
YALF_AUTH_ENABLED=0

; Modules which not require any authorization (public modules)
YALF_NO_AUTH_MODULES=""

; Logging emulation. Possible values: fake(output to nowhere), file(output to content/logs/yalflog.log), mysql (YALF_LOG_TABLE table)
YALF_LOGGING_TYPE="fake"
YALF_LOG_TABLE="weblogs"

;Configs editable from web with sysconf module. Comma separated.
YALF_EDITABLE_CONFIGS="config/yalf.ini,config/mysql.ini,config/globalmenu.ini,config/alter.ini"

; List of layers which must be loaded, with their dependencies. 
; Format: LAYER_*="lib1,lib2,lib3" will load api/libs/api.lib1.php etc..
LAYER_LOCALE="i18n"
;LAYER_NYANORM="mysql,nyanorm,sqldebug"
;LAYER_CACHE="ubconfig,ubcache"
;LAYER_MAPS="mapscompat,lmaps,ubconfig"
;LAYER_TELEGRAM="telegram,ubconfig"
;LAYER_WHOIS="whois"
;LAYER_SNMP="snmphelper,ubconfig"
;LAYER_ZEN="zenflow"
;LAYER_GRAVATAR="ubconfig,gravatar"

; Renderer layers
LAYER_WEBRENDER="webrender,workicons,astral"
;LAYER_CLIRENDER="clirender"

Чуть более детально

Основным файлом конфигурации для вашего приложения является вышеуказанный config/yalf.ini. В принципе, что в нем происходит довольно самоочевидно, для тех, кто хоть немного знаком с парадигмами написания кода и пользовательских модулей для Ubilling. Из незначительных новшеств, вы можете заметить отключаемую подсистему авторизации, отключаемый движок локализации и оптимизированную а главное управляемую систему предварительной загрузки библиотек, с кодовым названием LAYERS_OF_FEAR aka “Слои Страха”.

Если вкратце, то авторизация глобально включается-выключается опцией YALF_AUTH_ENABLED. В случае включения движка авторизации, все модули, кроме перечисленных в опции YALF_NO_AUTH_MODULES вместо собственно своего исполнения, принудительно подменяются на модуль loginform. После прохождения авторизации пользователем, внутри модулей могут уже нормально отрабатывать проверки наличия тех или иных прав на базе cfr(). Важно: при отключенной системе эмуляции авторизации функция cfr() всегда будет возвращать true. Собственно отключение YALF_AUTH_ENABLED просто будет симулировать “залогиненность” пользователя с рутовыми правами. Для проверки на включенность авторизации, вы всегда можете использовать

$system->getAuthEnabled()

возвращающий boolean.

Слои Страха

Вы всегда можете оптимизировать загрузку библиотек из api/libs/ нужных вашему приложению при помощи конструкций вида LAYER_* . Собственно все сводится к банальному перечислению требуемых вам библиотек для каждого слоя через запятую, либо раскоментированием нужных вам уже заготовленных слоев в конфиге по-умолчанию. Тоесть, для примера, когда вашему приложению требуется как работа с MySQL, так и кэширование и еще вы, допустим, собрались рисовать карты, вы можете просто раскоментировать следующие слои в конфиге по-умолчанию:

LAYER_NYANORM="mysql,nyanorm"
LAYER_CACHE="ubconfig,ubcache"
LAYER_MAPS="mapscompat,lmaps,ubconfig"

Либо отдельно перечислить это в вашем личном слое библиотек, например как-то так:

LAYER_MYAWESOMEAPP="mysql,nyanorm,ubconfig,ubcache,mapscompat,lmaps"

Следует заметить, что не стоит опасаться повторения библиотек в разных слоях. В любом случае, каждая из них будет загружена только один раз, при инициализации первого же слоя в котором она описана. Следует также заметить, что такое ручное управление библиотеками, является не обязательным, и в случае если вы следуете соглашениям кода Ubilling ваши библиотеки могут быть автоматически загружены из api/libs/ штатным автолодером классов по имени.

Web и CLI приложения

Используя разные слои отображения, такие как LAYER_WEBRENDER или LAYER_CLIRENDER вы можете нативно, и без особых усилий разрабатывать как Web-ориентированные так и CLI приложения. Для нормального восприятия параметров из аргументов в CLI вы можете использовать библиотеку ubRouting. Хотя как всегда вас никто ни к чему не принуждает ;)

Давайте для примера посмотрим как может работать простое CLI приложение работающее при этом скажем с кэшированием и OmaeURL. Для этого мы используем следующие слои:

LAYER_CLIRENDER="clirender"
LAYER_ADVICEAPP="ubconfig,ubcache,omaeurl"

И собственно код, рисующий нам в CLI “совет часа”:

if (ubRouting::optionCliCount() > 1) {
    if (ubRouting::optionCliCheck('get')) {
        $getOption = ubRouting::optionCli('get', 'vf');
        if ($getOption == 'advice') {
            $cache = new UbillingCache();
            $cacheTimeout = 3600;
            $cacheKey = 'SOMEADVICE';
 
            $currentAdvice = $cache->get($cacheKey, $cacheTimeout);
            if (empty($currentAdvice)) {
                //need to update cache
                $adviceUrl = 'http://ubilling.net.ua/fga/api/random';
                $fga = new OmaeUrl($adviceUrl);
                $rawAdvice = $fga->response();
                if (!empty($rawAdvice)) {
                    $rawAdvice = @json_decode($rawAdvice, true);
                    if (!empty($rawAdvice)) {
                        if (isset($rawAdvice['text'])) {
                            $currentAdvice = $rawAdvice['text'];
                            //updating cache
                            $cache->set($cacheKey, $currentAdvice, $cacheTimeout);
                        }
                    }
                } else {
                    show_error(__('Error receiving advice from remote API'));
                }
            }
 
            show_window(__('Advice of the hour') . ':', zb_TranslitString($currentAdvice));
        } else {
            show_error(__('No known get value, try "php --get=advice"'));
        }
    } else {
        show_error(__('No known CLI options, try "php --get=advice"'));
    }
} else {
    show_error(__('Not enought CLI options, try "php --get=advice"'));
}

Все, теперь мы можем использовать наше приложение из CLI прямо вот так:

$ php index.php --get=advice
Advice of the hour:
bolshe blya hodi peshkom!
$
yalf.1673453096.txt.gz · Востаннє змінено: 2023/01/11 18:04 повз nightfly