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

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


stigma

Розбіжності

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

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

Наступна ревізія
Попередня ревізія
stigma [2022/09/24 14:39]
127.0.0.1 зовнішнє редагування
stigma [2023/11/04 13:10] (поточний)
nightfly [Типи рендерингу]
Рядок 2: Рядок 2:
  
  
-В Ubilling начиная со стабильного релиза 1.2.0 появилась возможность использовать в ваших модулях общую реализацию стигматизации объектов. Собственно стигмы представляют из себя некие состояния какихо рандомных объектов (items) в рамках какой то рандомной категории (scope). Использование API Stigma ближе всего по духу к [[adcomments|API ADcomments]].+В Ubilling починаючи зі стабільного релізу 1.2.0 з'явилася можливість використовувати у ваших модулях загальну реалізацію стигматизації обктів. Власнестигми являють собою якісь стани якихось рандомних обктів (items) у межах якоїсь рандомної категорії (scope). Використання API Stigma найближче за духом до [[adcomments|API ADcomments]].
  
-Проще всего, объяснить работу этого механизма на примере "а давайте сделаем возможность где-нибудь, в каком-то нашем модулеотмечать купил ли пользователь у нас роутер или он жадная свинья?". Конфигурация этой стигмы начинается с написания конфигурационного файла, который будет храниться в **config/stigma/**, пускай это будет **userbuyrouter.ini** в силу планируемого нами SCOPE "USERBUYROUTER"Да, имя файлика конфигурации стигмы для конкретного scope-а по-умолчанию это этот же scope в lowercase с расширением ***.ini**. Собственно он и будет у нас читаться при создании объекта стигмы с соответствующим SCOPE.+Найпростіше пояснити роботу цього механізму на прикладі "а давайте зробимо можливість десь, у якомусь нашому модулівідзначати, чи купив користувач у нас роутер, чи він жадібна свиня?". Конфігурація цієї стигми починається з написання конфігураційного файлуякий зберігатиметься в **config/stigma/**, нехай це буде **userbuyrouter.ini** через запланований нами SCOPE "USERBUYROUTER"Такім'я файлика конфігурації стигми для конкретного scope-а за замовчуванням - це цей самий scope у lowercase із розширенням ***.ini**. Власне він і буде у нас читатися при створенні обкта стигми з відповідним SCOPE.
  
 <code ini userbuyrouter.ini> <code ini userbuyrouter.ini>
 [stigmasettings] [stigmasettings]
 TYPE=radiolist TYPE=radiolist
 +BASECLASS=dashtask
 ACTIVECLASS=todaysig ACTIVECLASS=todaysig
 ANIMATION=1 ANIMATION=1
 +RENDERER=iconic
  
 [buy] [buy]
Рядок 25: Рядок 27:
  
  
-===== Коротко о формате конфига =====+===== Коротко про формат конфігурації =====
    
-Секция "stigmasettings" является служебной и обязательнойОна указывает на базовое поведение контролов в конкретном скоупеВозможные типы (TYPE) на даный момент "radiolist"ыбирушка одного из всех) или "checklist" (множественная выбирушка). ANIMATION просто указывает, обновлять ли с сопуствующей анимацией контейнер стигматы при изменении состояния или делать это "тихо и незаметно"Так как состояние "купил у нас роутер" не может быть одновременно и "купили "не купил" мы используем тип "radiolist". Опция ACTIVECLASS указывает просто, каким CSS-классом будут подсвечиваться активныеыбранные состояния объектов в рамках данного scope.+Секція "stigmasettings" є службовою та обов'язковоюВона вказує на базову поведінку контролів у конкретному скоупіМожливі типи (TYPE) на даний момент "radiolist"ибір одного з усіх) або "checklist" (множинна вибірка). ANIMATION просто вказуєчи оновлювати з супутньою анімацією контейнер стигмати під час зміни стану, чи робити це "тихо і непомітно"Оскільки стан "купив у нас роутер" не може бути одночасно і "купив", і "не купив"ми використовуємо тип "radiolist". Опція ACTIVECLASS вказує просто, яким CSS-класом будуть підсвічуватися активніибрані стани об'єктів у межах цього scope. Починаючи з Ubilling 1.4.1 також можна опційно вказувати і BASECLASS, який буде використовуватись для всіх контролів за замовчуванням. Так, це теж ім'я CSS класу.
  
-Дальше все секции, не являющиеся stigmasettings описывают конкретные состояния объектов (items) в рамках конкретного SCOPE. Их может быть сколько угодно. Имя секции собственно будет идентификатором состояния сохраняемым в БД и должно быть по возможности коротким и уникальным. Базовыми характеристиками состояния кроме его идентификатора являются NAME (имя) и ICON (вы не поверите! иконка). Иконки состояний по-умолчанию храняться в **skins/stigma/** с расширением ***.png**.+Далі всі секціїякі не є stigmasettingsописують конкретні стани обктів (items) у межах конкретного SCOPE. Їх може бути скільки завгодно. Ім'я секції власне буде ідентифікатором стану, що зберігається в БД, і має бути якомога коротшим та унікальним. Базовими характеристиками стану крім його ідентифікатора є NAME (ім'я) і ICON (ви не повірите! іконка). Іконки станів за замовчуванням зберігаються в **skins/stigma/** з розширенням ***.png**.
  
-Кроме всего этого, реализована механика подгрузки кастомных файлов конфигурации и иконок, на случай если пользователи сами захотят расширить набор состоянийлибо заменить иконки на какие-то своии чтобы это все переживало обновления. Кастомные файлы конфигурации и иконки, имеющие приоритет над умолчательными храняться в **content/documents/mystigma** в сабдиректориях **confs** и **icons**+Крім усього цього, реалізовано механіку підвантаження кастомних файлів конфігурації та іконок, на випадок якщо користувачі самі захочуть розширити набір станівабо замінити іконки на якісь своїі щоб це все пережило оновлення. Кастомні файли конфігурації та іконки, що мають пріоритет над замовчуваними, зберігатимуться в **content/documents/mystigma** у сабдиректоріях **confs** і **icons**
  
  
-===== Практическое использование в коде =====+===== Практичне використання в коді =====
  
-Возвращаясь к изначальной задаче, мы хотим ловить GET параметром логин какого-то пользователя и выставлять ему состояние.+Повертаючись до початкової задачі, ми хочемо ловити GET параметром логін якогось користувача і виставляти йому стан.
  
 <code php> <code php>
Рядок 42: Рядок 44:
         $userLogin = ubRouting::get('username');         $userLogin = ubRouting::get('username');
                  
-        //создаем инстанс с нужным нам scope-ом.+        //створюємо інстанс із потрібним нам scope-ом.
         $userRouter = new Stigma('USERBUYROUTER');         $userRouter = new Stigma('USERBUYROUTER');
-        //зовем обработчик фоновых коллбеков на случай если у нас измениться состояние+        //викличемо обробник фонових коллбеків на випадок, якщо у нас зміниться стан
         $userRouter->stigmaController();         $userRouter->stigmaController();
-        //показываем интерфейс изменения состояния для нашего конкретного пользователя+        //показуємо інтерфейс зміни стану для нашого конкретного користувача
         show_window(__('User bought a router'), $userRouter->render($userLogin));         show_window(__('User bought a router'), $userRouter->render($userLogin));
     }     }
Рядок 52: Рядок 54:
  
  
-Ну и собственно сразу получаем результат в виде панели управления состояниями пользователя.+Ну і власне одразу отримуємо результат у вигляді панелі управління станами користувача.
  
 {{:stigma1.png|}} {{:stigma1.png|}}
  
-А может хотим панельку поменьше+А може хочемо меншу панельку?
  
 <code php> <code php>
Рядок 62: Рядок 64:
 </code> </code>
  
-типа такой?+типу такої?
  
 {{:stigma2.png|}} {{:stigma2.png|}}
  
-А может хотим read-only панельку для администраторов без какого-то права, но нормально работающую для администраторов наделенных этими правами? Тогда как-то так+А може хочемо read-only панельку для адміністраторів без якогось права, але яка нормально працює для адміністраторівнаділених цими правами? Тоді якось так
  
 <code php> <code php>
Рядок 82: Рядок 84:
 </code> </code>
  
-А если мы хотим поросто где-то в другом месте показать тупо список существующих состояний этого пользователя?+А якщо ми хочемо просто десь в іншому місці показати тупо список наявних станів цього користувача?
  
 <code php>  <code php> 
Рядок 88: Рядок 90:
 </code> </code>
  
-типа так+типу так
  
 {{::stigma3.png|}} {{::stigma3.png|}}
  
-или вообще тупо проверить есть ли какие-то установленные состояния и получить их в виде массива для наших дальнейших дофига концептуальных бизнес-приложений?+чи взагалі тупо перевірити чи є якісь встановлені стани й отримати їх у вигляді масиву для наших подальших дофіга концептуальних бізнес-додатків?
  
 <code php> <code php>
Рядок 100: Рядок 102:
 </code> </code>
  
-А еще мы можем получить все возможные для скоупа состояния с их текстовыми описаниями вот как-то так+А ще ми можемо отримати всі можливі для скоупа стани з їхніми текстовими описами ось якось так
 <code php> <code php>
 $userRouter = new Stigma('USERBUYROUTER'); $userRouter = new Stigma('USERBUYROUTER');
Рядок 108: Рядок 110:
 </code> </code>
  
-Короче все настолько прямолинейно и брутально, насколько это возможно. А вообще [[https://ubilling.net.ua/api_doc/classes/Stigma.xhtml|посмотреть]] на публичные методы и чего у них в параметрах будет намного продуктивнее и понятнее.+Коротше все настільки прямолінійно і брутально, наскільки це можливо. А взагалі [[https://ubilling.net.ua/api_doc/classes/Stigma.xhtml|поглянути]] на публічні методи і що у них у параметрах буде набагато продуктивніше і зрозуміліше.
  
  
-===== О оптимизации быстродействия =====+===== Про оптимізацію швидкодії =====
  
-В примере выше, мы создавали инстанс стигмы как +У прикладі вище, ми створювали інстанс стигми як 
  
 <code php> <code php>
Рядок 119: Рядок 121:
 </code> </code>
  
-Что в свою очередь загружало из базы все состояния всех айтемов в этом scop-е. Это может быть полезно, когда мы одним и тем же инстансом пытаемся работать с разными айтемами одним инстансом. Например читая/проверяя наличие состояний для разных айтемов одним и тем же инстансом. Типа как+Що зі свого боку завантажувало з бази всі стани всіх айтемів у цьому scop-і. Це може бути корисно, коли ми одним і тим самим інстансом намагаємося працювати з різними айтемами одним інстансом. Наприклад читаючи/перевіряючи наявність станів для різних айтемів одним і тим же інстансом. Типу як
  
 <code php> <code php>
Рядок 143: Рядок 145:
  
  
-но в нашем первом примере, логично было бы загружать из БД только состояние одного конкретного, интересующего нас айтема, а точнее, конкретного пользователякоторого мы поймали в GET-параметре username. В таком случае создание нашего инстанса должно бы выглядеть так:+але в нашому першому прикладі, логічно було б завантажувати з БД тільки стан одного конкретного, що цікавить нас айтема, а точніше, конкретного користувача, якого ми зловили в GET-параметрі username. У такому разі створення нашого інстансу мало б виглядати так:
  
 <code php> <code php>
Рядок 149: Рядок 151:
 </code> </code>
  
-что приведет к загрузке данных о состояниях только для айтема $userLogin в рамках scop-а USERBUYROUTER в процесе создания инстанса, и вполне себе позволит нам с ними работатьНо только вот для этого конкретного $userLogin+що призведе до завантаження даних про стани тільки для айтема $userLogin у межах scop-а USERBUYROUTER у процесі створення інстансу, і цілком собі дасть нам змогу з ними працювати. Але тільки ось для цього конкретного $userLogin.  
 + 
 + 
 +===== Логування змін станів ===== 
 + 
 +Базово, підтримується три різноманітні режими логування змін станівякщо вам це необхідно: TASKMAN, SYSTEM, CUSTOM. 
 + 
 +  * TASKMAN:[стан] - запис до логу "Планування робіт"
 +  * SYSTEM:[стан] - запис до системного журналу подій. 
 +  * CUSTOM:[таблиця] - запис до довільної таблиці в БД. 
 + 
 +Для логування до довільної таблиці, її структура має мати наступний формат: 
 + 
 +<code sql> 
 +CREATE TABLE IF NOT EXISTS `somecustomlog` ( 
 +  `id` INT(11) NOT NULL AUTO_INCREMENT, 
 +  `date` datetime NOT NULL, 
 +  `admin` VARCHAR(64) DEFAULT NULL, 
 +  `scope` VARCHAR(64) DEFAULT NULL, 
 +  `itemid` VARCHAR(128) NOT NULL, 
 +  `action` VARCHAR(32) DEFAULT NULL, 
 +  `state` VARCHAR(255) DEFAULT NULL, 
 +   PRIMARY KEY (`id`), 
 +   KEY `scope` (`scope`), 
 +   KEY `itemid` (`itemid`) 
 +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 
 +</code> 
 + 
 + 
 +Логування TASKMAN: ви не використовуватимете з ймовірністю 99%, з логуванням SYSTEM:[стан] який ви можете ввімкнути при виклику обробника коллбеків, наступним чином: 
 + 
 +<code php> 
 +   $leadSource->stigmaController('SYSTEM:якийсь_стан'); 
 +</code> 
 + 
 +в системному лозі з'являтимуться записи наступного вигляду 
 + 
 +<code> 
 +STIGMA [поточний_SCOPE] CHANGE [ідентифікатор_айтема] `[якийсь_стан]` ON `[ідентифікатор_стану]` 
 +</code> 
 + 
 +Чим буде заповнюватись табличка somecustomlog при логуванні CUSTOM:somecustomlog викликаному отак: 
 + 
 +<code php> 
 +   $leadSource->stigmaController('CUSTOM:somecustomlog'); 
 +</code> 
 + 
 +теж доволі зрозуміло з іменування її полів. 
 + 
 +===== Типи рендерингу ===== 
 + 
 +Починаючи з Ubilling 1.4.1 в секції конфігурації [stigmasettings] також можна опційно встановити опцію **RENDERER**, яка прямо вказує на тип відображення контролів конкретної стигми. 
 + 
 +Можливі значення опції на даний момент
 + 
 +  * iconic  - рендерер, за замовчуванням у вигляді "натискаємих іконок". Він же використовується у випадку якщо опція RENDERER відсутня. 
 +  * selector - просто стандартний селектор у вигляді "вибирушки". Працює тільки з TYPE=radiolist, що доволі очевидно. 
 +  * textlink - зображає всі наявні стани в скоупі у вигляді простих текстових посилань. 
 +  * imagelink - зображає всі наявні стани в скоупі у вигляді простих текстових посилань з маленькими іконками станів. 
 + 
stigma.1664019551.txt.gz · Востаннє змінено: 2022/09/24 14:39 повз 127.0.0.1