Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія | Остання ревізія По сторонах наступні версії | ||
development [2019/02/22 02:51] |
development [2022/09/24 14:39] 127.0.0.1 зовнішнє редагування |
||
---|---|---|---|
Рядок 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(__(' | ||
+ | } | ||
+ | |||
+ | ?> | ||
+ | |||
+ | </ | ||
+ | |||
+ | Доступ к нашему модулю мы можем получить при помощи ссылки **? | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Как видите вместо строк **Real Name** и **Address** у нас автоматически подставились их языко-зависимые замены из словаря текущей локализации. Не переведенной осталась одна строка **Sample module** о которой движок локализации пока что ничего не знает. Давайте переведем ее скажем на русский язык для начала.\\ | ||
+ | Сделать это довольно просто - нужно создать файл **/ | ||
+ | |||
+ | <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=" | ||
+ | </ | ||
+ | |||
+ | А что же с виджетами, |