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

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


yalf

Розбіжності

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

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

Порівняння попередніх версій Попередня ревізія
Попередня ревізія
Остання ревізія По сторонах наступні версії
yalf [2020/05/18 17:26]
yalf [2023/06/16 12:07]
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>
yalf.txt · Востаннє змінено: 2023/06/16 12:08 повз nightfly