Журнал изменений
Добавить CSS-правила для новых фрагментов new/list- и new/assoc- во все три frontend-темы (default/lite/simple).
Core changes:
- List table (sl-list-head / sl-list-row):
Заголовок thead: padding, background #f1f3f5, border-bottom, font-size 12px, border-radius на крайних th
- Строки tbody: border-bottom, padding 5px, font-size .9em
- Assoc block (sl-assoc-*):
- sl-assoc-title: заголовок 30px, color #556779, margin
sl-assoc-item: position relative, padding 25px 29px 0 80px, border-top, margin-bottom 25px
- Декоративный bullet через :before (9px, border-radius 5px)
- sl-assoc-img: absolute, 60px×60px, border-radius, background-size cover
- sl-assoc-meta: inline list, font-size .9em, color #6e7c8b
Benefits:
- Стили сразу применяются во всех темах (default/lite/simple)
- Соответствуют CSS-конвенции sl-* (hyphen-case)
Technical notes:
- sl-assoc-img использует background-image (не img-тег)
- Идентичный CSS во всех трёх темах
Добавить в единый new/view.html условные блоки для extra-полей media, links и faq, чтобы один шаблон обслуживал все модули без создания отдельных вариантов.
Core changes:
- new/view.html (default/lite/simple):
Новый блок sl-section: условный рендер {% if year or director or roles or createdby or duration or lang or format or quality or size or version or released or email or home %}
Поля: year, director, roles, createdby, duration, lang, format, quality, size, version, released, email (raw), home (raw)
- note: отдельный sl-entry-content блок ({% if note %})
- links_label: заголовок h5.sl-related-title ({% if links_label %})
- mlinks: блок sl-section с raw-контентом ({% if mlinks %})
Benefits:
- Один шаблон для news, pages, files, links, media, faq
- Поля не переданные модулем просто не рендерятся ({% if %})
- Нет дублирования шаблонов (no ZOO)
Technical notes:
- Все extra-поля условные — обратно совместим со старыми вызовами
- email и home рендерятся тройными скобками {{{...}}} (raw HTML)
Добавить четыре новых фрагмента в пространство new/ для всех трёх шаблонов (default/lite/simple): блоки связанных материалов (assoc-wrap/assoc-item) и табличный список (list-wrap/list-row).
Core changes:
- new/assoc-wrap.html + new/assoc-item.html:
assoc-wrap: open/close-режим; заголовок в sl-assoc-title; обёртка ul.sl-assoc-list
assoc-item: li.sl-assoc-item с картинкой через background-image, ссылкой, текстом и временной меткой (sl-assoc-meta)
- new/list-wrap.html + new/list-row.html:
list-wrap: table.sl_table_list_sort с thead; letter-блок; open/close-режим
list-row: tr.sl-list-row с колонками: id, title, category, poster, date
Benefits:
- Покрывают паттерны связанных записей и табличных списков
- Семантичный HTML: time[datetime], role через CSS-классы
- Совместимы с CSS-конвенцией sl-* из new.css
Technical notes:
- assoc-item использует background-image для превью (не <img>)
- list-wrap принимает letter-HTML через параметр letter
- Фрагменты идентичны во всех трёх темах
Обновить стили admin-панели: menu-grid с фиксированной шириной колонок, card-стиль для ссылок, hover-эффекты через transform вместо изменения размера, убрать разделитель dashboard-panel-sep.
Core changes:
- Menu grid (sl-menu-grid-*):
- Колонки фиксированной ширины calc((100% - 35px) / 6) вместо flex: 1
- sl-menu-grid-link: border, border-radius, box-shadow, height 100px
- Hover: translateY(-1px), box-shadow, border-color
- sl-menu-grid-image hover: transform scale(0.75) вместо resize
- sl-menu-grid-link span: line-clamp 2 + overflow-wrap
- Menu list (sl-menu-list-*):
- padding 3px 4px + border-radius на элементе
- sl-menu-list-image hover: transform scale(0.84) вместо resize
- Dashboard panel:
- sl-dashboard-panel-head: margin-bottom 12px → 8px
- sl-dashboard-panel-pad: padding убран
- sl-dashboard-panel-content: padding 8px 6px
- sl-dashboard-panel-sep удалён
Benefits:
- Единообразный card-стиль для всех admin-модулей
- Hover-анимации через transform (GPU-accelerated)
- Более компактный layout dashboard-панелей
Перевести admin-модули на новый data-sl-toggle-control API, рефакторить blocks.php (сортировка модулей, переименование переменных) и обновить default admcol с 5 до 6.
Core changes:
Admin toggle (admin/index.php, admins.php, security.php, account/admin/index.php):
- CloseOpen / sl_close_X → data-sl-toggle-control + семантичные ID
- sl_close_1/2 → sl_panel_admin / sl_panel_site
- sl_close_9 → sl_form_admin_mail / sl_form_account_mail
- cookie-зависимость убрана; is_checked = false по умолчанию
- Blocks refactor (admin/modules/blocks.php):
getBlockModules() → прямой обход $conf['modules'] с фильтром type=1 и sort() для алфавитного порядка
- $viewItems → $items; $blockwhere → $bwhere
- $blocktext → $btext; $html_b/$html_e → $htmlb/$htmle
- Config (admin/modules/config.php, config/global.php):
- admcol default: 5 → 6 (6 колонок в admin dashboard)
- config/local.php: обновлён base_fingerprint
Benefits:
- Единый toggle-API без зависимости от cookie-имён
- Блоки модулей отображаются в алфавитном порядке
- Переменные в blocks.php соответствуют naming-конвенции
Technical notes:
- is_checked теперь hardcode false — состояние управляется JS
- getBlockModules() удалён из вызовов (inline-логика)
Заменить устаревший глобальный CloseOpen на декларативный data-атрибут API (data-sl-toggle / data-sl-toggle-control). Блоки и кнопки описываются через HTML-атрибуты без inline JS.
Core changes:
- Toggle engine (slaed.js):
Новые функции: getToggleControls, setToggleControls, setToggleBlockState, toggleBlock, bindToggleControl
initCloseOpenBlocks переведён на [data-sl-toggle-control] и [data-sl-toggle]; поддержка checkbox, aria-expanded, cookie-состояния (path/global scope)
- window.CloseOpen удалён из публичного API
- Admin-шаблоны (dashboard-panel, div-collapse, sidebar-block):
- OnClick="CloseOpen(...)" → data-sl-toggle-control="<id>"
- div id + data-sl-toggle="<id>"
- sl_close_X → семантические ID: sl_panel_, sl_block_
Frontend-шаблоны (block-left, categories, navi, new/navi) для default/lite/simple:
- OnClick/CloseOpen → data-sl-toggle-control
- sl_close_1 → sl_nav_cats (data-sl-toggle-scope="path")
Benefits:
- Inline JS полностью удалён из шаблонов
- Единый toggle-механизм для admin и frontend
- Accessibility: aria-expanded, role="button", tabindex, keyboard
Technical notes:
- window.CloseOpen удалён без замены — все вызовы переведены
- data-all (старый формат) заменён на data-sl-toggle
- ID переименованы: sl_close_X → sl_block_X / sl_panel_ / sl_nav_
Обновление стилей для поддержки новых фрагментов и скорректированного макета form-row с двоеточием через CSS.
Core changes:
- new.css (default, lite, simple):
- Добавить .sl_info:before, .sl_warn:before — иконка из sprite.png для блоков предупреждений
- Скорректировать .sl-form-label: убрать font-weight:bold, увеличить width до 160px
- Добавить .sl-form-label::after { content: ":" } — двоеточие через CSS вместо hardcoded в PHP
- Добавить .sl-form-row .sl-field { flex: 1; min-width: 0 } — корректный flex layout
- new.css (admin):
- Добавить те же правила: sl_info/sl_warn иконка, sl-form-* layout, sl-form-label::after
Benefits:
- Двоеточие после label управляется CSS — PHP передаёт чистый текст
- Все 4 темы синхронизированы по базовым form-row стилям
Technical notes:
- sl-form-label::after соответствует удалению ':' из getTplViewFieldRows в helpers.php
- Существующие классы sl_* не переименовывались
URL формы не содержал op=add — после отправки адресная строка показывала index.php?name=news без оператора.
Core changes:
- form-add.html (default, lite, simple):
Изменить action с index.php?name={{ name }} на index.php?name={{ name }}&op=add
- getVar('req','op',...) проверяет POST перед GET
- скрытое поле op=send продолжает корректно маршрутизировать отправку
- URL при отображении формы и preview теперь показывает op=add
Benefits:
- Адресная строка отражает реальный контекст страницы
- Нет регрессий в маршрутизации: hidden op=send имеет приоритет через POST
Technical notes:
- Admin не использует form-add.html — изменение только для frontend тем
Новые фрагменты в new/ namespace для всех тем (default, lite, simple, admin). Обеспечивают инфраструктуру для getVotingView и getTplViewFieldRows.
Core changes:
- view-field.html (default, lite, simple, admin):
- Строка отображения custom field: label + value
- Использует sl-form-row / sl-form-label / sl-form-value классы
- voting-widget.html (default, lite, simple):
- Оболочка для всего voting-блока
- Условный <form> через has_form; принимает items_html, admin_html, post_html, polls_html, votes_html, comm_html
- voting-post.html (default, lite, simple):
- Один вариант голосования для ввода (radio/checkbox + label)
- voting-view.html (default, lite, simple):
- Один вариант с результатом: прогресс-бар + процент + количество голосов
- span.html (default, lite, simple):
- Универсальный <span class="{{ class }}">{{ text }}</span>
Benefits:
- HTML вынесен из PHP в шаблоны
- Все темы синхронизированы — один набор фрагментов на все
Technical notes:
- Admin тема получает только view-field.html (voting не нужен в admin)
- Root-level voting-post.html и voting-view.html остаются без изменений
При загрузке значения из БД htmlspecialchars-кодирование уже применено. Без decode шаблон применял его повторно — двойное кодирование при редактировании.
Core changes:
- EditorBbcode::getWidget (plugins/editors/bbcode/driver.php):
Добавить html_entity_decode($value, ENT_QUOTES|ENT_HTML5, 'UTF-8') перед getTplBbEditor
- DB хранит htmlspecialchars-encoded текст
- getTplBbEditor передаёт value в шаблон через {{ value_text }} — снова кодирует
- decode разрывает двойное кодирование
Benefits:
- Сохранённый текст отображается корректно в редакторе при повторном открытии
- Нет искажения специальных символов (& → & → &amp; и т.д.)
Technical notes:
- CKEditor не требует этого исправления: использует json_encode + ed.setData()
- Только BBcode-редактор передаёт значение через HTML-атрибут textarea