Добавить два новых фрагмента для admin-шаблонов и объявить global $tpl в двух функциях monitor.php.
Core changes:
- foot-controls.html:
Условный рендер: top_label (ссылка-якорь наверх), time_html, license_html, debug_html в футере admin-страницы
- link-btn-blank.html:
- Ссылка с target="_blank", классом и title-атрибутом
- admin/modules/monitor.php:
global $tpl добавлен в getMonitorServerStats() и getMonitorRuntimeStats()
Benefits: - Фрагменты foot-controls и link-btn-blank повторно используемы - monitor-функции получают доступ к $tpl для рендера
Technical notes: - foot-controls использует OnClick="Upper(...)" (legacy scroll-хелпер)
Переписать modules/pages/index.php по образцу modules/news/index.php: new/ фрагменты, getTplPager с url_extra, устранить SQL-инъекции, привести код к конвенциям SLAED.
Core changes:
- pages() — список страниц:
- 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=pages + token
- $offset = (int)(($num - 1) * $unum) — убрано двойное присваивание
- view() — просмотр страницы:
- getTplContentView → new/view (единый шаблон)
- fields через getTplFieldsOut; pagebreak-поддержка сохранена
- Связанные записи: assoc-логика → new/related + new/related-item
- liste() — табличный список:
- liste-wrap/liste-basic → new/table + new/table-row-liste
- add() / send():
- hometext/bodytext/field type 'raw'; getTplPreviewContent
- INSERT многострочный; (int)$user[0]; $db убран из add()
- new/alert + getStopText
Benefits: - Устранены SQL-инъекции; единообразие с Etalon - Консистентные edit_href/delete_href (name=pages)
Technical notes: - 4-space indentation; switch ($op) с пробелом - $user убран из globals pages()
Переписать modules/faq/index.php по образцу modules/news/index.php: new/ фрагменты, getTplPager с url_extra, устранить SQL-инъекции, сохранить уникальную quicklinks-логику FAQ.
Core changes:
- faq() — список FAQ:
- getTplContentCard → new/card (width: 100) + new/grid
- setArticleNumbers → getTplPager с url_extra
- $field/$arrayelement убраны; $pagei = (int)$pag - 1
- SQL-инъекции устранены; $ismoder/$token перед loop
- edit_href/delete_href с name=faq + token
- $limit = (!$ncat) ? 'LIMIT ...' : '' — без LIMIT при $ncat
- Pager рендерится только при !$ncat (show-all режим при категории)
- Quicklinks (сохранены):
- faq-quicklinks-open/row/close фрагменты
- $orderbyf вычисляется только в elseif ($ncat)
- filterTextHighlight($ftitle, $word) в quicklinks-row
- view() — просмотр FAQ:
- getTplContentView → new/view; поля без extra-блоков (FAQ прост)
- $pagei = (int)$pag - 1; $iso для date('c', ...)
- liste() / add() / send():
- new/table + new/table-row-liste; getTplPreviewContent
- $db убран из add(); INSERT многострочный; (int)$user[0]
Benefits: - Устранены SQL-инъекции; единообразие с Etalon - Quicklinks-паттерн FAQ сохранён полностью
Technical notes: - 4-space indentation; switch ($op) с пробелом - $user убран из globals faq()
Переписать modules/media/index.php по образцу modules/news/index.php: new/ фрагменты, getTplPager с url_extra, устранить SQL-инъекции, исправить баг с $size, привести код к конвенциям SLAED.
Core changes:
- media() — список медиа:
- getTplContentCard → new/card (width: 100) + new/grid
- setArticleNumbers → getTplPager с url_extra
- $cat/$ncat → прямой $ncat; $field убран
- SQL: инъекции устранены; array_map('intval', $cids)
- $ismoder/$token перед loop; edit_href/delete_href с name=media + token
- $ptitle = title + subtitle для SEO/заголовка
- view() — просмотр медиа:
- getTplContentView → new/view
extra-поля: year, director, roles, createdby, duration, lang, format, quality, size, released, note, mlinks, links_label
- mlinks построен из поля links (ed2k/magnet/http ссылки)
Исправлен баг: $einfo вместо $size в ed2k-loop (outer $size больше не затирается в цикле ссылок)
- $broc → 'broken'; 'download' не передаётся (нет стрима)
- liste() / assoc / add() / send():
- Те же паттерны что в files/links
Benefits: - Устранены SQL-инъекции; единообразие с Etalon - Исправлен баг переменной $size в ed2k-loop
Technical notes: - new/view покрывает все media-поля через условные блоки - 4-space indentation; switch ($op) с пробелом
Переписать 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-панелей





