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

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


Сайдбар

Розділи

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

FAQ



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

yalf

YALF - Yet Another Lightweight Framework

Навіщо?

Що включає?

Системні вимоги

Apache: >= 2.4
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:
Raduysia bliat dribnyciam!
$
yalf.txt · Востаннє змінено: 2023/06/16 12:08 повз nightfly