Початкова сторінка

Микола Жарких (Київ)

Персональний сайт

?

Класи вершин

Класи вершин – невидимі об’єкти Смереки. Основне їх призначення – слугувати інтерфейсом до бази даних. Примірник класу вершини вміє прочитати свої атрибути з бази даних і записати модифіковані атрибути в БД. Отже, нові класи вершин створюються по мірі того, як в інформаційній моделі сайту з’являються нові сутності з новими наборами атрибутів.

Слід зауважити, що у Смереці є певна термінологічна плутанина між класами PHP та класами вершин. Класи PHP – це програмні об’єкти, які створюються в оперативній пам’яті сервера на підставі інформації з БД. Смерека має поліморфний конструктор класів PHP; який саме клас буде створено – визначається атрибутом class вершини та відповідним метакласом.

Для різних класів вершин можна створювати примірники одного класу PHP. Новий клас вершин треба декларувати для того, щоб створити нову сутність зі своїм унікальним набором атрибутів; новий клас PHP треба декларувати, коли нова сутність повинна мати якісь нові, специфічні методи роботи з атрибутами. Якщо стандартних методів класу PHP Node достатньо, то впровадження нового класу PHP є зайвим.

Отже, в документації слово «клас» найчастіше означає клас вершини, не клас PHP.

Клас не визначає зовнішнього вигляду веб-сторінок. За це відповідають шаблони сторінок, які використовують атрибути примірників класів для компоновки HTML коду.

Метаоб’єкти

Смерека визначає властивості своїх об’єктів через інші свої об’єкти (метаоб’єкти). Їх властивості задаються безпосередньо в програмному коді Смереки, а всі інші декларації об’єктів (примірники метаоб’єктів) створюються й редагуються за допомогою стандартного редактора вершин Смереки.

Щоб потрапити в редактор метаоб’єктів, треба мати права адміністратора, зайти на сторінку «Налаштування користувача» і клацнути посилання «Метадані».

Смерека має чотири метаоб’єкти : метаклас, меташаблон, метаредактор і метаполе (метаатрибут).

Метаклас

Метаклас є спеціальним класом вершини, який описує властивості інших класів вершин. Він має такі атрибути :

Module – шлях до модуля PHP, який містить програмний код класу; відраховується від кореневого каталогу Смереки. Типово – node.php.

ClassName – ім’я класу PHP, який треба створити. Типово – Node.

Hidden – вимикач, який треба встановити, щоб сховати клас у списках вибору. Редактор вершин не зможе в процесі редагування змінити клас вершини на оцей схований клас. Типово застосовується для класів адміністрування (групи, користувачі і т.д.).

Fields – список атрибутів класу, розділений комами. Наприклад, для класу Node цей список виглядає так : symbname, class, Template, accesslevel, link, Hidden, HideChildren, Smerecasheable, Indexable. Він містить не всі атрибути класу, а тільки ті, для яких шаблон редактора має створити елементи управління. Імена полів мають відповідати іменам вершин класу Метаатрибут. Якщо перед іменем поля поставити символ «-» (мінус), це поле буде виключено з шаблону редактора.

link – в контексті метакласу використовується для задання суперкласу. Якщо це посилання задано, даний Метаклас стає підкласом Метакласу-посилання й успадковує всі його поля. Шаблон редактора виставляє на початку сторінки власні атрибути, запроваджені в метакласі, а потім групує поля, успадковані від суперкласів. Якщо у субкласі якийсь з атрибутів суперкласів є зайвим, його ім’я слід «відмінусувати» в полі Fields.

ClassTpl – шаблон класу, вказівник на меташаблон, який має використовуватись із метакласом. Смерека використовує м’який і жорсткий контексти шаблона класу. У м’якому контексті (типово) шаблон класу буде застосовано лише у випадку, коли вершина (примірник даного класу) не містить атрибуту «Шаблон». У жорсткому контексті атрибут вершини «Шаблон» (навіть якщо він заданий) ігнорується і завжди застосовується шаблон класу. Прикладом застосування жорсткого контексту є клас RSSChannel, який завжди використовується у зв’язці з шаблоном RSSMaker – використання його з іншим шаблоном мабуть недоцільне.

Description – текстовий опис класу. Читання цих описів – найліпший спосіб зрозуміти призначення класу.

Меташаблон і метаредактор

Ці метаоб’єкти визначають зовнішній вигляд веб-сторінок, які генерує Смерека. Меташаблон визначає вигляд сторінки для читача; метаредактор визначає вигляд сторінки для редагування відповідної вершини; решта властивостей співпадають:

Description – текстовий опис шаблона. Читання цих описів – найліпший спосіб зрозуміти призначення шаблона.

TemplateText – текст HTML кода шаблона. Цей код має містити смеретеги (поля підстановки) та секції. Він зберігається безпосередньо в базі даних. Цей спосіб зберігання є рекомендованим, але Смерека може використовувати шаблони з окремих файлів.

link – в контексті меташаблона використовується для задання шаблона-предка. Якщо це посилання задано, даний шаблон мусить містити не повний код, а лише секцію, яку треба замінити у предківському шаблоні.

Module – шлях до модуля PHP, який містить програмний код класу PHP для шаблона; відраховується від кореневого каталогу Смереки. Типово – page.php.

ClassName – ім’я класу PHP, який треба створити. Типово – Page.

Hidden – вимикач, який треба встановити, щоб сховати шаблон у списках вибору. Редактор вершин не зможе в процесі редагування змінити шаблон вершини на оцей схований шаблон. Типово застосовується для шаблонів класів.

Path – якщо TemplateText є порожнім, Смерека шукатиме шаблон на цьому відносному шляху, який відраховується від кореневого каталогу Смереки. Наприклад : ../example/templates

FileName – ім’я файла шаблона. Наприклад : newtpl.html. Слід зважати, що при такому способі збереження шаблонів Смерека шукатиме його на повному шляху ../example/templates/uk/newtpl.html, де uk – ім’я поточної мови. Отже, навіть якщо сайт містить лише одну мовну версію, все одно треба створювати проміжний каталог з іменем цієї мови.

Метаатрибут

Метаатрибут задає визначення атрибута. Слід знати, що один атрибут може використовуватись з різними класами і навіть нести різне смислове навантаження у контексті різних класів. Він має такі атрибути :

DataTypeтип даних атрибута.

ControlType – тип елемента управління для атрибута. На підставі цього атрибута шаблон редактора створює відповідний елемент. Здебільшого тип елемента управління однозначно диктується типом даних, але для атрибуту типу «Ціле число», наприклад, можна замість строкового поля створити список вибору або вимикач.

Properties – текстове поле з переліком властивостей у стилі name="value", розділених пробілами. Для фіксованих списків вибору (ControlType=select) тут можна записати список елементів списку.

Якщо метаатрибут описує вказівник (тобто його тип даних – ід вершини), в цьому полі можна додатково задати клас вершини, на яку може вказувати дане поле.

Наприклад, для метаатрибута Template задано властивість Class="33". Значенням цього атрибута може бути тільки меташаблон. Смерека не дасть змінити це поле на об’єкт іншого класу (в тому числі й на порожнє значення).

За умовчанням ця властивість не задана, що дозволяє полю вказувати на вершину будь-якого класу (або мати порожнє значення).

LangAware – вимикач, який визначає, чи є даний атрибут мовно-залежним.

Label – підпис поля в редакторі.

Description – текстовий опис атрибута. Читання цих описів – найліпший спосіб зрозуміти призначення атрибутів.

Зміна класу вершини

Коли при редагуванні БД задається для вже існуючої вершини новий клас, Смерека діє за консервативним алгоритмом : всі атрибути старого класу залишаються приєднаними до вершини, навіть якщо визначення нового класу не передбачає їх наявності. Принципово кожна вершина може мати будь-які атрибути (інша річ, чи будуть всі вони десь використовуватись).

Смерека не вміє визначати, чи використовується десь якийсь атрибут конкретної вершини, чи ні. Тому багаторазова зміна класу вершини може мати наслідком утворення цілого «хвоста» неактуальних атрибутів. Бажано цього уникати.

Слід знати, що редактор вершин Смереки показує не всі атрибути, які зберігаються в БД, а лише ті, які передбачені поточним класом вершини та відповідним шаблоном редактора (шаблон може ховати деякі з атрибутів задля спрощення вигляду редактора).