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

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


yalf

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
Попередня ревізія
yalf [2020/06/05 03:28]
yalf [2023/06/16 12:08] (поточний)
nightfly [Системні вимоги]
Рядок 1: Рядок 1:
 +====== YALF - Yet Another Lightweight Framework ======
  
 +{{:yalflogo.png|}}
 +
 +
 +===== Навіщо? =====
 +
 +{{:treba.jpg?600|}}
 +
 +===== Що включає? =====
 +
 +  * [[nyanorm|NyanORM - для надзручної роботи з БД]]
 +  * [[ubrouting|ubRouting - для забезпечення роботи із зовнішніми даними, їх фільтрацією та раутингом]]
 +  * [[apiastral|Astral - для швидкого прототипування вьюшок]]
 +  * [[ubillingcache|Ubilling Cache - для влаштовування кешування всілякого]]
 +  * [[snmphelper|SNMP helper - для штурхання залізяк і не залізяк в SNMP]]
 +  * [[omaeurl|OmaeURL - для зручної роботи із зовнішніми API та іншими віддаленими URL-ами]]
 +  * [[ubillingtelegram|Telegram API - для базової роботи з ботами Telegram]]
 +  * [[wolfdispatcher|WolfDispatcher - і зручного написання хуків для них]]
 +  * [[stardust|StarDust - для того, щоб зручно менеджити ваші процеси]]
 +  * І ще багато-багато шматочків, які ви раніше бачили і використовували у вигляді Ubilling
 +
 +
 +
 +===== Системні вимоги =====
 +
 +**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 
 +
 +
 +===== Встановлення =====
 +
 +<code bash>
 +$ 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
 +</code>
 +
 +===== Початкова конфігурація config/yalf.ini =====
 +
 +<file 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"
 +</file>
 +
 +===== Трішечки детальніше =====
 +
 +Основним файлом конфігурації для вашого застосунку є вищевказаний **config/yalf.ini**. У принципі, що в ньому відбувається досить самоочевидно, для тих, хто хоч трохи знайомий з парадигмами написання коду та користувацьких модулів для Ubilling. З незначних нововведень ви можете помітити підсистему авторизації, яку можна вимкнути, рушій локалізації, який можна вимкнути, і оптимізовану, а головне керовану, систему попереднього завантаження бібліотек, з кодовою назвою LAYERS_OF_FEAR aka "Шари Страху".
 +
 +Якщо коротко, то авторизація глобально вмикається-вимикається опцією **YALF_AUTH_ENABLED**. У разі ввімкнення рушія авторизації, всі модулі, крім перерахованих в опції **YALF_NO_AUTH_MODULES** замість власне свого виконання, примусово підмінюються на модуль loginform. Після проходження авторизації користувачем, всередині модулів можуть вже нормально відпрацьовувати перевірки наявності тих чи інших прав на базі cfr(). **Важливо:** за вимкненої системи емуляції авторизації функція cfr() завжди повертатиме true. Власне вимкнення **YALF_AUTH_ENABLED** просто симулюватиме "залогіненість" користувача з рутовими правами. Для перевірки на ввімкнення авторизації, ви завжди можете використовувати 
 +
 +<code php>$system->getAuthEnabled()</code>
 +
 +що повертає boolean.
 +
 +===== Шари Страху =====
 +
 +Ви завжди можете оптимізувати завантаження бібліотек з **api/libs/** потрібних вашому додатку за допомогою конструкцій виду **LAYER_* **. Власне, все зводиться до банального перерахування потрібних вам бібліотек для кожного шару через кому, або розкоментуванням потрібних вам уже заготовлених шарів у конфігу за замовчуванням. Тобто, для прикладу, коли вашому застосунку потрібна як робота з MySQL, так і кешування, а також ви, припустімо, зібралися малювати мапи, ви можете просто розкоментувати такі шари в конфізі за замовчуванням:
 +
 +<code ini> 
 +LAYER_NYANORM="mysql,nyanorm"
 +LAYER_CACHE="ubconfig,ubcache"
 +LAYER_MAPS="mapscompat,lmaps,ubconfig"
 +</code>
 +
 +Або окремо перерахувати це у вашому особистому шарі бібліотек, наприклад якось так:
 +<code ini>
 +LAYER_MYAWESOMEAPP="mysql,nyanorm,ubconfig,ubcache,mapscompat,lmaps"
 +</code>
 +
 +Слід зауважити, що не варто побоюватися повторення бібліотек у різних шарах. У будь-якому разі, кожна з них буде завантажена тільки один раз, під час ініціалізації першого ж шару, в якому вона описана. Слід також зауважити, що таке ручне керування бібліотеками, є не обов'язковим, і в разі якщо ви дотримуєтесь [[development|домовленостей що до коду Ubilling]], ваші бібліотеки можуть бути автоматично завантажені з **api/libs/** штатним автолодером класів за їх іменем.
 +
 +===== Web і CLI застосунки =====
 +
 +Використовуючи різні шари відображення, такі як LAYER_WEBRENDER або LAYER_CLIRENDER, ви можете нативно, і без особливих зусиль розробляти як Web-орієнтовані, так і CLI додатки. Для нормального сприйняття параметрів з аргументів у CLI ви можете використовувати бібліотеку [[ubrouting|ubRouting]]. Хоча як завжди вас ніхто ні до чого не примушує ;) \\
 +
 +
 +Давайте для прикладу подивимося, як може працювати простий CLI-додаток, що працює при цьому, скажімо, з [[ubillingcache|кешуванням]] і [[omaeurl|OmaeURL]]. Для цього ми використовуємо такі шари:
 +
 +<code ini>
 +LAYER_CLIRENDER="clirender"
 +LAYER_ADVICEAPP="ubconfig,ubcache,omaeurl"
 +</code>
 +
 +І власне код, що малює нам у CLI "пораду години":
 +
 +<code php>
 +
 +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"'));
 +}
 +</code>
 +
 +Усе, тепер ми можемо використовувати наш застосунок із CLI просто ось так:
 +
 +<code bash>
 +$ php index.php --get=advice
 +Advice of the hour:
 +Raduysia bliat dribnyciam!
 +$
 +</code>