Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
| Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
|
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=Опція яка необхідна | ||
| + | ; | ||
| + | ; | ||
| + | ; | ||
| + | </ | ||
| + | |||
| + | також модуль може бути описаним у оверлеї " | ||