Журнал изменений
Переписать modules/links/index.php по образцу modules/news/index.php: new/ фрагменты, getTplPager с url_extra, устранить SQL-инъекции, привести код к конвенциям SLAED.
Core changes:
- links() — список ссылок:
- getTplContentCard → new/card (width: 100) + new/grid
- setArticleNumbers → getTplPager с url_extra
- $cat/$ncat → прямой $ncat; $field/$orderby inline → if/elseif/else
- SQL: "cid = '".$ncat."'" → 'cid = '.(int)$ncat; array_map('intval')
- $ismoder/$token перед loop; edit_href/delete_href с name=links + token
- getVar('get', 'cat', 'num') — убрано двойное присваивание $cat=$ncat
- view() — просмотр ссылки:
- getTplContentView → new/view
- extra-поля home переданы как raw; описание в description/bodytext
- liste() — табличный список:
- liste-wrap/liste-basic → new/table + new/table-row-liste
- assoc-блок:
- assoc-wrap/assoc-basic → new/related + new/related-item
- add() / send():
- hometext/bodytext type 'raw'/'text'; getTplPreviewContent
- INSERT многострочный; (int)$user[0]; $db убран из add()
Benefits:
- Устранены SQL-инъекции; единообразие с Etalon
- Консистентные edit_href/delete_href (name=links)
Technical notes:
- 4-space indentation; switch ($op) с пробелом
Переписать modules/files/index.php по образцу modules/news/index.php: new/ фрагменты, getTplPager с url_extra, устранить SQL-инъекции, привести код к конвенциям SLAED.
Core changes:
- files() — список файлов:
- getTplContentCard → new/card (width: 100) + new/grid
- setArticleNumbers → getTplPager с url_extra
- $cat/$ncat → прямой $ncat; $field удалён
- $ismoder/$token вынесены перед loop
- edit_href: name=files&op=files_add; delete_href: name=files&op=files_delete + token
- SQL: "cid = '".$ncat."'" → 'cid = '.(int)$ncat; array_map('intval', $cids)
- view() — просмотр файла:
- getTplContentView → new/view (единый шаблон)
- delete_href: добавлен name=files
- Поля size, version, email, home переданы в new/view как extra-поля
- add() / send():
- hometext/bodytext type 'raw'; getTplPreviewContent
- INSERT многострочный; (int)$user[0]
- $db убран из globals add()
Benefits:
- Устранены SQL-инъекции (prepared statements)
- Единообразие с Etalon-стандартом
- name=files во всех admin-ссылках
Technical notes:
- 4-space indentation; switch ($op) с пробелом
- new/view покрывает extra-поля через условные блоки
Добавить 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 тем