Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
development [2019/02/22 02:51] |
development [2024/12/23 11:48] (поточний) nightfly [Розташування модулю як плагіну профілю користувача] |
||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
+ | ====== Короткий посібник із розробки модулів для Ubilling ====== | ||
+ | Писати додаткові модулі для Ubilling дуже просто, | ||
+ | |||
+ | Типовий модуль Ubilling розміщується в окремому підкаталозі **/ | ||
+ | \\ | ||
+ | {{: | ||
+ | \\ | ||
+ | |||
+ | Давайте детально розберемо що-ж знаходиться в цих двох містичних файликах.\\ | ||
+ | |||
+ | <file php module.php> | ||
+ | <?php | ||
+ | $this-> | ||
+ | </ | ||
+ | |||
+ | Містить у собі стандартний набір, який описує те, що модуль має клас **main** (тобто може розміщуватися в центральному блоці контенту за замовчуванням), | ||
+ | Все, з файлом опису модуля розібралися, | ||
+ | \\ | ||
+ | \\ | ||
+ | |||
+ | |||
+ | <file php index.php> | ||
+ | <?php | ||
+ | // перевіряємо чи має користувач права на користування цим модулем | ||
+ | if (cfr(' | ||
+ | | ||
+ | // | ||
+ | $query=" | ||
+ | $alllogins=simple_queryall($query); | ||
+ | | ||
+ | // | ||
+ | $allrealnames=zb_UserGetAllRealnames(); | ||
+ | $alladdress=zb_AddressGetFulladdresslist(); | ||
+ | | ||
+ | // | ||
+ | if (!empty ($alllogins)) { | ||
+ | | ||
+ | // | ||
+ | $tablecells=wf_TableCell(__(' | ||
+ | $tablecells.=wf_TableCell(__(' | ||
+ | $tablecells.=wf_TableCell(__(' | ||
+ | $tablecells.=wf_TableCell(__(' | ||
+ | $tablerows=wf_TableRow($tablecells, | ||
+ | | ||
+ | // Перебираємо всіх користувачів | ||
+ | foreach ($alllogins as $io=> | ||
+ | $userlogin=$eachlogin[' | ||
+ | $userip=$eachlogin[' | ||
+ | | ||
+ | // | ||
+ | $tablecells=wf_TableCell($userlogin); | ||
+ | $tablecells.=wf_TableCell($userip); | ||
+ | $tablecells.=wf_TableCell(@$allrealnames[$userlogin]); | ||
+ | $tablecells.=wf_TableCell(@$alladdress[ $userlogin]); | ||
+ | $tablerows.=wf_TableRow($tablecells, | ||
+ | } | ||
+ | | ||
+ | // оголошуємо як результат табличку з попередньо зібраними рядками | ||
+ | // а також шириною в 100%, бордюром в 0 і класом sotrable | ||
+ | $result=wf_TableBody($tablerows, | ||
+ | | ||
+ | } else { | ||
+ | //якщо немає натякаємо що їх немає | ||
+ | $result=__(' | ||
+ | } | ||
+ | | ||
+ | // виводимо наш результат за допомогою функції show_window | ||
+ | show_window(__(' | ||
+ | |||
+ | | ||
+ | } else { | ||
+ | // якщо ні - вивалюємо на нього помилку про відмову в доступі | ||
+ | show_error(__(' | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Доступ до нашого модуля ми можемо отримати за допомогою посилання **? | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Як бачите, | ||
+ | Зробити це досить просто - потрібно створити файл **/ | ||
+ | |||
+ | <file php samplemod.php> | ||
+ | <?php | ||
+ | $lang[' | ||
+ | $lang[' | ||
+ | |||
+ | </ | ||
+ | |||
+ | Після чого ми побачимо як рядок локалізувався сам по собі в нашому модулі: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | \\ | ||
+ | З нестандартних речей, чужих чистому PHP, ми використовували тільки функції бібліотеки** api.astral** для збирання таблиць за допомогою **wf_**, що не є обов' | ||
+ | |||
+ | А що робити, | ||
+ | |||
+ | <file php sampleClass.php> | ||
+ | <?php | ||
+ | |||
+ | class SampleClass { | ||
+ | |||
+ | protected $data=array(); | ||
+ | |||
+ | public function __construct() { | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | protected function loadData() { | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | $sampleObject=new SampleClass(); | ||
+ | |||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | Також чудовим (**і рекомендованим!**) способом може бути розміщення вашої бібліотеки в **api/ | ||
+ | |||
+ | ====== Розташування модуля на панелі задач ====== | ||
+ | |||
+ | А як додаються модулі на панель завдань? | ||
+ | |||
+ | <file ini sample.ini> | ||
+ | ; Ідентифікатор модуля. Повинен бути як мінімум унікальним. | ||
+ | ID=" | ||
+ | ; Підпис іконки модуля - буде автоматично локалізовано поточною локаллю. | ||
+ | NAME=" | ||
+ | ; URL нашого модуля. Не повірите - буде клікабельним :) | ||
+ | URL="? | ||
+ | ; Іконка модуля. Спочатку намагається знайтися в директорії taskbar поточного скіна, якщо не існує - у глобальному skins/ | ||
+ | ICON=" | ||
+ | ; Право, яке вимагає модуль. Ну як мінімум право, яке потрібне для показу іконки. | ||
+ | NEED_RIGHT=" | ||
+ | ; Опція конфіга alter.ini необхідна для показу іконки таскбару. | ||
+ | NEED_OPTION=" | ||
+ | ; Цей параметр сигналізує, | ||
+ | ; Якщо видалити цей параметр - панель завдань буде кричати про відсутню опцію. | ||
+ | UNIMPORTANT=1 | ||
+ | ; Тип елемента. У нашому випадку це icon - типова іконка з підписом. Є ще widget але про це пізніше. | ||
+ | TYPE=" | ||
+ | ; Ця необов' | ||
+ | ; Може бути відсутньою чи порожньою або приймати значення _blank, _self, _parent, _top чи ім' | ||
+ | ; детальніше тут: https:// | ||
+ | LINK_TARGET= | ||
+ | </ | ||
+ | |||
+ | та отримуємо результат очікуваний результат | ||
+ | |||
+ | {{: | ||
+ | |||
+ | А що ж із віджетами, | ||
+ | |||
+ | ====== Приклад використання dataTable ====== | ||
+ | |||
+ | <code php> | ||
+ | // jQuery dataTable construction and rendering | ||
+ | $myUrl = '? | ||
+ | $callbackRoute = ' | ||
+ | $columns = array(' | ||
+ | $dataTable = wf_JqDtLoader($columns, | ||
+ | show_window(__(' | ||
+ | |||
+ | // JSON dataTable data output on some callback route | ||
+ | if (ubRouting:: | ||
+ | $json = new wf_JqDtHelper(); | ||
+ | $json-> | ||
+ | $json-> | ||
+ | $json-> | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | результат | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ====== Розташування модулю як плагіну профілю користувача ====== | ||
+ | Формат plugins.ini дуже близький до формату опису елементу панелі задач. Тільки імена опцій в лаверкейсі. | ||
+ | |||
+ | <file ini plugins.ini> | ||
+ | [унікальний ідентифікатор модуля] | ||
+ | name = " | ||
+ | icon = " | ||
+ | need_right=Право яке необхідне модулю | ||
+ | need_option=Опція яка необхідна | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | </ | ||
+ | |||
+ | також модуль може бути описаним у оверлеї " |