Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
development [2017/10/07 12:00] |
development [2023/06/16 14:18] (поточний) borisov |
||
---|---|---|---|
Рядок 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=" | ||
+ | </ | ||
+ | |||
+ | А що ж із віджетами, |