Журнал изменений
Replaces the previous four-function approach (getConfig + filterConfigMerge + getConfigFingerprint + setConfigFingerprint) with a single getConfig that either returns the cached _config from local.php on a cache hit, or rebuilds and writes the full cache on a miss.
Core changes:
- Config loader (core/system.php):
Replaced runtime merge of local.php overrides with cache-first read
- Returns _config directly when cache_version sentinel matches
- Rebuilds full local.php cache on miss, then returns $conf
- Removed filterConfigMerge, getConfigFingerprint, setConfigFingerprint helpers
- Renamed $exp -> $export closure in setConfigFile for consistency
Benefits:
- Eliminates repeated filesystem glob and array merge on every request
- Simplifies config flow: one path to load, one path to rebuild
- local.php is now the authoritative runtime snapshot, not an override layer
Technical notes:
- local.php now stores _meta.cache_version = 1 as cache sentinel
- Cache invalidated automatically when any source config file changes
- Backward-compatible: falls back to full rebuild if local.php is absent
Separates lite template CSS into base.css (element styles only) and theme.css (all .sl-* component classes). Removes retired templates/default and templates/simple directories. Switches active theme to 'lite'.
Core changes:
- CSS architecture (templates/lite/assets/css/):
- Created base.css with @font-face, :root vars, CSS reset and element styles only
- Moved all .sl-* component classes from old base.css into theme.css
- Deleted new.css and system.css (intentionally unused)
- Applied Prettier formatting across both files
- Admin CSS (templates/admin/assets/css/):
- Moved .bi { font-size: var(--sl-size-icon); } from base.css to theme.css
- Applied Prettier formatting across base.css and theme.css
- Template cleanup:
- Removed templates/default/ entirely (retired template)
- Removed templates/simple/ entirely (retired template)
- Renamed block-languages to sl-block-languages in lite/partials/form-wrap.html
- Renamed admin-searchbox to sl-admin-searchbox in lite/partials/searchbox.html
- Config (config/global.php):
- Switched active theme from 'default' to 'lite'
- Updated sitekey and base_fingerprint
Benefits:
- Clear separation: base.css = element styles only, theme.css = all components
- All component classes consistently under sl-* namespace
- Codebase free of unused legacy template directories
Technical notes:
- Prettier 2-space indent applied; compact CSS expanded to multiline
- templates/lite/assets/css/base.css is a new file (previously merged into theme.css)
Document the full performance audit covering frontend and admin paths, measured with Playwright and PHP-side profiling across warm and cold request scenarios.
Core changes:
- Docs (docs/PERFORMANCE_AUDIT_REPORT.md):
- Full audit report with measured ms timings per function
- Frontend findings: getBlocks, setHead, GeoIP, getConfig
- Admin findings: admininfo, getAdminPanelBlocks, news admin page
- Prioritized fix targets and bottom-line summary
- Docs (docs/PERFORMANCE_AUDIT_2026-05-18.md):
- Browser TTFB measurements (Playwright v1.60)
- v6.2 vs v6.3 comparison table
- 50 categorized findings: 17 KRITISCH, 20 MITTEL, 13 GERING
- Cold-start analysis and top-10 fix priorities
- Docs (docs/PERFORMANCE_TEMPLATE_IO.md):
- Template I/O findings from the audit session
Benefits:
- Traceable baseline for optimization work
- Concrete measured numbers per hotspot
- Prioritized fix list with expected ms savings
Rotate the sitekey value and regenerate the base_fingerprint to match the current config state after local testing.
Core changes:
- Config (config/global.php):
- Update sitekey to current value
- Config (config/local.php):
- Regenerate base_fingerprint
Add npm package with browser-audit scripts and an informational PHPUnit test that scans admin CSS class definitions against template HTML usage.
Core changes:
- Browser audit tooling (tools/browser-audit.mjs, package.json):
- Node.js script using chrome-remote-interface / Playwright
- npm scripts: browser:audit, browser:inspect, browser:attach
- CSS class audit test (tests/Unit/AdminCssClassUsageTest.php):
- Scans templates/admin/assets/css/.css for sl- class definitions
- Cross-references usage in admin fragment/layout/page/partial HTML
- Informational only — does not fail CI
Benefits:
- Enables quick browser-driven audits from the command line
- CSS audit test surfaces unused sl-* classes for future cleanup
Technical notes:
- Test is informational (assertTrue(true)) — safe to add to CI
- browser-audit.mjs requires Node.js and Chrome/Playwright to be available
Move [quote], [hide], and Markdown blockquote/callout output from inline strings in Parser to per-theme blockquote fragment templates, enabling markup customization without touching PHP.
Core changes:
- Parser blockquote rendering (core/classes/parser.php):
[quote] and [hide] tags call tpl->getHtmlFrag('blockquote', [...])
- is_quote / is_hide / is_callout / is_plain variants
- Markdown blockquote blocks and GitHub callouts use the same fragment
- Hardcoded HTML fallback preserved when $tpl is unavailable
- Blockquote fragment templates (templates/*/fragments/blockquote.html):
- Added to admin, default, lite, simple themes (identical content)
- callout_type passed through for sl-callout-{type} CSS class
- Link template refactor (templates/admin/fragments/link.html, core/admin.php):
- Replaced hardcoded class='sl-admin-language-link' with is_admin_language_link flag
- CSS class assignment stays in the template layer
- Language cleanup (lang/*.php — 6 files):
- Removed unused constants: _EIMG, _MEML, _PLOAD, _RATE3
- Docs and housekeeping:
docs/TEMPLATES.md: document and/or/not operators, dot-path lookups, and no equality/comparison operators in {% if %} expressions
- templates/admin/partials/basic-monitor.html: BOM character removed
Benefits:
- Blockquote markup is now per-theme customizable
- Dead lang constants removed from all 6 language files
- Admin link CSS class logic fully in template layer
Technical notes:
- blockquote fragment is identical across all 4 themes
- Fallback HTML matches previous hardcoded output exactly
- config/local.php fingerprint updated automatically
Wire icon_name into the block-sidebar partial and top-menu link
fragment so every admin sidebar panel and toolbar entry carries a
contextual Bootstrap Icon. Add --sl-color-primary-hover-soft token
and a dedicated .sl-admin-shell sidebar skin with tight spacing,
rounded tiles, and per-block-id header colour overrides.
Core changes:
- Template (block-sidebar.html):
- Render
<i class="bi bi-{{ icon_name }}">in h3 when icon_name is set - Icon wiring — PHP (admin/index.php, core/admin.php, core/system.php):
- Pass icon_name to all eight block-sidebar calls (shield-lock, puzzle, stars, hourglass-split, pencil-square, eye)
- Add icon key to every top-menu item array; forward as icon_name to getHtmlFrag('link')
- CSS tokens (base.css):
- Add
--sl-color-primary-hover-soft: #58a0c8 - Link :hover uses soft token and drops underline
- CSS sidebar skin (theme.css):
.sl-wrapper.sl-admin-shell .sl-admin-sidebar: tight CSS variables, rounded headers, icon sizing, per-block colour overrides- Menu grid: border/shadow moved from link to item wrapper; link reset to transparent/no-shadow
- Toolbar links: gap + padding added,
.biicon sizing rules, padding removed from innerb .sl-wrapper a:hoverscoped soft-colour override- Sidebar block base: gradient bg, lighter border (border not border-strong)
Benefits:
- Sidebar blocks are visually identifiable by icon without reading the title
- Top-menu entries gain icon context for faster scanning
- Tight-shell skin aligns sidebar spacing with the updated layout
Technical notes:
- icon_name is optional — partial renders nothing when absent (backward-compatible)
- No database or API changes