Журнал изменений

Официальный сайт SLAED CMS

Журнал изменений

Фильтр и поиск

Всего: 1328 Доступных коммитов | Отфильтровано: 1328 Коммиты | Страница: 1 из 133
Сегодня (30.10.2026)
Feature: The panel moves by one set of rules, and the theme gets the parts of the statistics and monitor series
Автор: Eduard Laas | Дата: 12:49 30.10.2026

The effects settled on the demo series "Статистика" become the motion of the admin theme, each living once and all stopped by one switch. On that motion the theme gains the parts the screens "Статистика" and "Мониторинг" will be built of, ready for every screen of the panel; no screen takes them yet.

Core changes:

  1. The motion of the panel (public/templates/admin/assets/css/theme.css, base.css, tools/ui-contract.php):
  2. the block "Motion over the page" holds the moving rules, the tokens carry --sl-time-scale

    • sl-aurora runs a light round the frame of the cockpit, a home tile and a monitor card under the hand
    • the scan and the comet of the cockpit move into the block, the circles glow by --sl-knob-mix
  3. the arcs of the rings fill on --sl-knob-dur, the tiles rise on --sl-tile-dur, a press spreads on --sl-ripple-dur
  4. a chart of "Мониторинг" is drawn once on --sl-graph-dur
  5. The behaviours (public/templates/admin/assets/js/admin-ui.js):
  6. setFigureRun() runs a figure of the rings, the strip and the queues to its new value, setFigureFresh() lights it once
  7. setArriveMarks() and setArriveDone() let the tiles and the charts wait for the view
  8. setTileTilt() leans a tile to the hand under a glare, one pointerdown spreads the ripple
  9. a still panel gets none of it, by isMotionStill()
  10. The parts of the series (public/templates/admin/fragments/pane.html, pane-row.html, pane-ground.html, metric-list.html, kv-list.html, long.html, meter.html, signal.html, signal-list.html, ext.html, theme.css, base.css, tools/ui-contract.php):

  11. the window .sl-pane with its lamps or icon, its meta and live chip, one body or two halves
  12. the rows .sl-pane-split, .sl-pane-side and .sl-pane-trio on the ground .sl-ground

    • the grid of the ground drifts by transform on a layer of its own, .sl-ground-lines
  13. the tile of figures .sl-metric with the dot and the icon of its series
  14. the list .sl-kv in a dl, the "i" of a cut value .sl-long, the meter .sl-meter with the role meter
  15. the signal .sl-signal with the passed ones folded, the extensions by weight .sl-ext
  16. a part of a ground rises in its turn, a tile of figures leans, the beam crosses the head of a window
  17. the demo classes st- and mn- stay on the stand; their text at --sl-text-subtle takes --sl-text-muted, 4.5:1
  18. Reference and help (docs/TEMPLATES.md, docs/VERSIONS.md, admin/info/panel/ru.md, public/demo/assets/st.css):
  19. "Motion" of "Panel Shell" with the laws of a move, the entry of the motion in the versions
  20. "Layout Sections" and the entry of the builder take the parity with its demo: the keys order and for, the icon of a zone, the scale of the canvas, the canon over the demo

  21. the help of the home names the motion, st.css reads sl-aurora and --sl-aurora-dur
  22. Tests and gates (tests/Unit/SeriesPartsTest.php, tools/ui-audit-baseline.json):
  23. every fragment of the series is held by its keys and its escaping
  24. the baseline stored from the tree

Benefits:

  • One switch stops every effect, and a new effect has one place and one set of laws
  • The screens of the series are built of one set of parts, which the rest of the panel can take
  • The drift of the ground costs about 1% of a core against 15% and more by background-position

Technical notes:

  • No schema, URL or API change
  • New tokens --sl-aurora-dur, --sl-aurora-width, --sl-tile-dur, --sl-ripple-dur, --sl-graph-dur, --sl-knob-dur, --sl-knob-mix, --sl-ground-dur, --sl-ground-width, --sl-pane-dur, --sl-metric-min-width with their components

  • The reference of the parts is the last step of their plan; "Motion" does not list them until then
  • The stand database, uploads/ and the stand's draft unchanged; config/layout.php and config/security.php are not part of the commit

Feature: The site builder matches its demo on the canon of the panel, reaches every module from its choice of a page, and the statistics demo gets its archive
Автор: Eduard Laas | Дата: 00:16 30.10.2026

The screen of the site builder was set beside its demo series and brought to it where the builder plan had settled it: the library and the inspector, the behaviour of buttons and keys, the tree, the top bar and the choice of a page, with the canon of the panel as the standard of sizes and styles. The floating menu keeps one entry of the builder, and the cockpit demo of the statistics takes the archive of all months with a float per month.

Core changes:

  1. The library and the inspector (admin/modules/layout.php, public/templates/admin/fragments/menu-grid-item.html, public/templates/admin/assets/css/layout.css, theme.css, base.css, tools/ui-contract.php, sections/*.json):

  2. getLayoutTypes() sorts the types by the groups of LAYOUT_GROUP and the key order of <type>.json, a heading per group

    • the types of lite, of Node and of the presentation carry their order
  3. a card shows the schema of its type at --sl-builder-thumb-width x --sl-builder-thumb-height and its icon before the title
  4. the subtitle of the window names the place of the new section, _LAYOUT_AFTER or _LAYOUT_ATSTART
  5. the side panel has one column of labels, --sl-form-side-width, as a modifier of the form canon
  6. Buttons, keys and texts (public/templates/lite/sections/*.json, presets.json, core/system.php, public/plugins/system/builder.js, public/templates/admin/assets/js/layout.js, admin/lang/*.php):

  7. the address of a button of hero, cta, media and prices carries "for", their make has no text without an address

    • getLayoutIssues() names a button that leads nowhere, _LAYOUT_IS_NOLINK; _LAYOUT_CTA_BTN is gone
  8. setFoot() leaves the mark of the draft out of every frame of the screen asked with edit=1
  9. Alt+Up/Down move the picked section, Delete removes it; a key pressed on the canvas reaches the screen as {sl: 'key'}
  10. _LAYOUT_NOPICK2 and _LAYOUT_PICKHINT name the click on the canvas; the palette adds "Добавить: <тип>" and "Весь сайт"
  11. The tree (admin/modules/layout.php, public/templates/admin/partials/layout-tree.html, fragments/menu-list-item.html, public/templates/lite/places.json, layout.css):

  12. a block of a zone shows its order there, order_num with the title _SORTORDER
  13. the second line of a row ends in its ellipsis and carries its whole text in its title, sub_title
  14. under a menu item stands the name of its page or module, its path in the title
  15. the zones stand under one head "Блоки", each with its icon, the key icon of a zone in places.json
  16. the row of a page says "Адрес: /…", the address of its module for a page holding a slot
  17. the rows are the canon row .sl-menu-list-item, the chips of the heads, the item titles and the inspector on the canon
  18. The top bar and the choice of a page (public/templates/admin/partials/layout-screen.html, layout-state.html, admin/modules/layout.php, layout.js, layout.css):

  19. Undo and Redo are the first group of the capsule of tools, the chip and "Опубликовать" stand at the right edge

    • getLayoutChip() draws one part for the screen and both for a swap out of band
  20. the disabled "Опубликовать" fades, the capsules wrap whole in a narrow bar
  21. the choice of a page has the groups "Страницы" and "Модули" and the option "+ Новая страница"

    • a module opens by mod as from the site, the new page opens the window of the ready pages
  22. "Ведёт на" lists the modules and Node types by their shown name
  23. One entry of the builder (core/system.php, lang/*.php, docs/VERSIONS.md, admin/info/layout/ru.md):
  24. the floating menu shows "Конструктор сайта" with layers-half in the panel and on the site, its address still the page
  25. _LAYOUT_EDITPAGE is gone from the six locales; _TOPUSERS of ru is spelled in Cyrillic
  26. The demos (public/demo/*):
  27. the builder demo reads its marks from uploads/presentation/brand/tech/, its chips keep the canon weight, one entry
  28. st-02-cockpit.html takes the window "Архив статистики" under the plate: every month a bar, a float of its sums

    • the bar is the average day, the picked month is told by colour, the season follows the medians of slaed.net
  29. "Топ" is spelled in Cyrillic in the static demos
  30. Help and tests (admin/info/layout/ru.md, tests/Unit/LayoutTest.php, LayoutDraftTest.php, RouteParseTest.php, tests/Support/layout_probe.php):

  31. the help of the builder describes the tree, the top bar, the choice of a page and the one entry
  32. the tests hold the order of the types, the relation "for", the order of "Ведёт на" and the spelling of _TOPUSERS

Benefits:

  • The builder looks and behaves as its demo, on one standard of sizes and styles with the rest of the panel
  • Every module is reached from the screen, and a new page is one choice away
  • The statistics demo shows the whole history of the counter in one window

Technical notes:

  • No schema, URL or API change; the protocol of builder.js gains {sl: 'key'}
  • New token --sl-builder-pick-width and --sl-form-side-width with their components in tools/ui-contract.php
  • The key icon of a zone in places.json is optional; a zone without it keeps layout-sidebar
  • The stand database, uploads/ and the stand's draft unchanged; config/layout.php and config/security.php are not part of the commit

Вчера (29.10.2026)
Fix: The site builder draws the page at the width of its device and scales it to the stage, and the logo of lite keeps its width
Автор: Eduard Laas | Дата: 17:52 29.10.2026

The canvas of the builder showed the page at the width left for it, so a computer of an ordinary monitor saw the tablet layout of the theme. The page is now drawn at 1366, 820 or 390 px and scaled down to the stage, the page is told the scale so its rings and toolbar keep their size, and the logo of lite no longer shrinks beside a long tagline and links to the root of the site.

Core changes:

  1. The stage of the screen (public/templates/admin/assets/js/layout.js, public/templates/admin/assets/css/layout.css, public/templates/admin/partials/layout-screen.html):

  2. the devices desk 1366, tablet 820, phone 390; setFit() writes --sl-d-device, --sl-d-device-h and --sl-d-scale

    • a narrow window that stacks the columns gives the page the width of the stage up to its device
    • a ResizeObserver on the stage refits the page, and the scale is posted as {sl: 'scale'} after init and on change
  3. the iframe is drawn at the device width with transform: scale and origin 0 0, the frame is device x scale wide
  4. a picture of an inspector field, the logo among them, is limited to the column
  5. the unused data-sl-device attribute of the frame is gone
  6. The page in the frame (public/plugins/system/builder.js, public/templates/lite/assets/css/presentation.css):
  7. the message scale sets --sl-d-zoom, the reverse of the scale up to 2, and redraws the rings
  8. the names, the toolbar, its button and the drag label take that zoom, so they keep their size
  9. the drag label follows the pointer divided by the zoom
  10. The logo of lite (public/templates/lite/assets/css/theme.css, public/templates/lite/partials/site-header.html):
  11. .sl-logo is flex: none, so it keeps the width of its picture
  12. its link is {{ root }} instead of /
  13. Help (admin/info/layout/ru.md):
  14. the page in the middle is drawn at the width of the chosen device and scaled to the place it has

Benefits:

  • Every monitor shows the layout of the theme for the chosen device
  • The rings, names and toolbar keep one size at every scale
  • The logo of lite renders whole at every width and follows a site in a subfolder

Technical notes:

  • No schema, URL or API change; the protocol of builder.js gains the message {sl: 'scale', scale}
  • The stand database, uploads/ and the stand's draft unchanged
  • The neutral shipped config/layout.php unchanged
Feature: The site builder gets the feed and the record of Node, the block of lite and the export of its layout, and its reference
Автор: Eduard Laas | Дата: 11:13 29.10.2026

The site builder takes the types of the module Node as sections: a feed over the one engine of materials the block node.php reads too, and a single record; lite gains a section of one site block. The layout is exported and imported as JSON in "Настройки", and the lasting part of the builder plan moves into the docs and the help of the panel.

Core changes:

  1. One feed of materials (core/system.php, blocks/node.php):
  2. getNodeFeed() picks the materials of a feed by types, mode and limit, pinned first for one type

    • blocks/node.php and the section "Свежие материалы" read it alike
  3. Sections of Node and lite (modules/node/sections/, public/templates/lite/sections/, core/classes/template.php):
  4. feed and item of the module Node with their descriptions and providers
  5. block.json of lite renders one free block; Template::getFree() becomes public for it
  6. feed.html draws nothing without rows, item.html nothing without a text
  7. presets.json gains "Новости и статьи" and "Статья"
  8. The screen of the builder (admin/modules/layout.php, layout.js, layout-field.html, layout-insp.html, layout-screen.html, core/classes/layout.php):

  9. the kinds nodetype, noderef and blockref in the inspector: getLayoutFeedTypes(), getLayoutNodes(), getLayoutNodeHtml() and the op find

  10. the export of the layout and its import with Undo: getLayoutImport(), getLayoutClean(), getLayoutCleanItems(), setLayoutImport() and the op export

    • an import checks every value by the descriptions of the theme and its modules and names what it refuses
  11. Texts and help (admin/lang/.php, modules/node/lang/.php, modules/node/admin/lang/*.php, admin/info/layout/ru.md, admin/info/template/ru.md):

  12. the constants of the new kinds, sections and the export in six locales
  13. the help of the builder and of "Шаблон" in their current state
  14. Reference (docs/TEMPLATES.md, docs/ARCHITECTURE.md, docs/UPDATE.md, docs/VERSIONS.md):
  15. "Layout Sections", "Layout Boundary" and the kind page of the routes, the version of the layout, the entry of the site builder

  16. Tests (tests/Unit/LayoutTest.php, tests/Unit/LayoutDraftTest.php, tests/Support/layout_probe.php):
  17. the import with its refusals, the checks of the Node and block sections, every fragment of lite described, and the probe for them

Benefits:

  • One engine of materials for the block and the section
  • A layout moves between sites as a checked JSON file

Technical notes:

  • No schema change; the stand database and uploads/ unchanged
  • The neutral shipped config/layout.php unchanged
Эта неделя (28.10.2026)
Feature: The site builder edits the page in its frame, opens from "Изменить страницу" of the floating menu, and finishes its screen with the help over it
Автор: Eduard Laas | Дата: 23:07 28.10.2026

The site builder moves on by two steps of its plan. The screen gets the checks its last step left, a foot that keeps every act of a section in sight, the cut name of a picked file and its help in the window "?". The page in the frame becomes editable in place for the super administrator: rings, typing, a toolbar, Ctrl+D and the drag of sections, while a visitor gets neither the marks nor the script; the floating menu opens the builder on the page it stands on.

Core changes:

  1. Editing on the page (public/plugins/system/builder.js, core/classes/layout.php, core/system.php, public/index.php):
  2. the frame asks edit=1 beside its draft link; a super administrator outside the guest view gets Layout::setBuildMode(), which hands the fragments is_build and the frame of a section its pick

    • the slot of a module is picked in a div of section.html, a block in block-all.html by setBlockView()
    • setFoot() prints the template fragments/builder.html and no floating menu, doScript() loads builder.js for dock.js
  3. builder.js: a dashed ring on hover, the ring of the pick with its name, a click on a text of the picked part types it (Enter, Ctrl+Enter, Esc), a double click on Markdown or the own HTML opens the editor window

    • the toolbar of a section: drag, up, down, copy, link of its anchor, hide, delete, "Добавить секцию"
    • the drag of a section shows the line where it lands; a block is picked and moved in the tree alone
  4. the screen and the page talk by postMessage, the protocol is the head of builder.js
  5. The marks of lite (public/templates/lite/sections/*.html, fragments/section.html, presentation-head.html, block-all.html, partials/site-header.html, site-footer.html, menu.html):

  6. data-sl-text with the key of a field, data-sl-lines for several lines, an item by its place (items.{{ item.order_num }}.key), data-sl-md for Markdown and the own HTML, data-sl-pick of the parts and the menu items; all of them only under is_build

  7. The screen (admin/modules/layout.php, assets/js/layout.js, partials/layout-screen.html, layout-state.html):
  8. a pick on the page fetches the inspector and turns the tree to its tab; a typed text posts op=save of its field with redraw; the toolbar posts the acts of the foot, a drop the new act sec-move

  9. the words of the toolbar come from data-sl-lay-words, the names of the rings with every write in the state (getLayoutNames()); the keys pressed in the page are the keys of the screen, Ctrl+D copies the picked section

  10. a new link of the draft signs the frame anew with edit and mod
  11. "Изменить страницу" (core/system.php getAdminDock(), fragments/dock.html of both themes):
  12. on the site the app of the builder leads to the layout page of the request, or with mod on the front view of a module without a page; elsewhere it stays "Конструктор сайта"

  13. setLayoutSlotPage() makes the page of that module in memory, every request of the screen carries mod, the frame runs the module under the draft link, and getLayoutStored() keeps the page out of the state, the steps, the checks, the publication and the counter of links until the first write

  14. The foot, the file field and the help of the screen (assets/css/layout.css, partials/layout-insp.html, fragments/file-field.html of both themes, public/plugins/system/filemanager.js, admin/info/layout/ru.md):

  15. "Удалить" of the inspector is a red icon named by its title, the capsule of the foot takes the width it leaves
  16. the chip of a picked file holds its name on one line with an ellipsis, the whole path in its title
  17. "?" and the command of the palette open the help over the screen; the help describes the current state, the editing on the page and Ctrl+D included

  18. Theme, contract, languages and tests (assets/css/presentation.css, theme.css, tools/ui-contract.php, lang/*.php, admin/lang/*.php, core/classes/editor.php, tests/):

  19. the rules of the editing layer in presentation.css, the open capsule sl-editor-pill-open in lite as in admin; --sl-d-box-x/y/w/h registered as data

  20. _LAYOUT_EDITPAGE in lang/, _LAYOUT_DRAG in admin/lang/, six locales each
  21. LayoutTest: the marks only in the edit mode, every mark naming a field of its type or of a part; LayoutDraftTest: the page of a module in memory and sec-move; lines over 180 wrapped in editor.php and EditorFormatTest; UploadFormatTest lets the row layout carry the canonical set with the uploads of users off

Benefits:

  • the page is edited where it is seen, with the inspector and the tree following the hand
  • a visitor pays nothing: no mark, no script, the same markup
  • a theme without the marks keeps the ring and the inspector

Technical notes:

  • no table, column or config key changes; the draft format is unchanged, base and made never reach its file
  • the stand's config/layout.php and its secret stay out of the commit
Feature: The site builder checks its draft before a publication, writes its texts and pictures in the editors of the panel, and copies and makes pages
Автор: Eduard Laas | Дата: 16:14 28.10.2026

The site builder moves on by two steps of its plan: the screen gets its checks and tools - the list of changes and remarks before a publication with its note, the guest view, my sections, the ready pages of the theme, one section back from the history, the full preview - and its texts, files and pages: Markdown and the own HTML in the editors of the panel with the file window of layout.attach, a file field for every picture, the published file read-only in the settings, a choice of an address, the copy of a page, a page from a text and a link to look at the draft.

Core changes:

  1. Checks and tools of the screen (admin/modules/layout.php, partials/layout-checks.html, layout-dest.html, layout-mine.html, layout-state.html, layout-story.html, layout-insp.html, assets/js/layout.js, assets/css/layout.css, fragments/menu-grid-item.html):

  2. "Опубликовать" and the checks open one window (op=checks): the changes against the site by the ids of the draft, the remarks by the kinds of the fields (addresses, files with their alt, videos, pages, the links and pictures of Markdown, the weight of a picture), the note of a publication and "Отменить все изменения"

  3. the guest view of the frame, the full preview, my sections shared by the editors (storage/layout/mine.json), the recent types, the copy of a look, ‹ › of the inspector, a field back to its value on the site, the link of a section

  4. one section back from a publication of the history; the count of the draft in its chip; the place after a reload
  5. a field may carry when, honoured by the checks and by the conditional rows of slaed.js, which now read radios
  6. The ready pages of a theme (public/templates/lite/presets.json, sections/hero.json):
  7. eleven ready sets after the built-in "Пустая", each section made from the defaults of its type with the values of the set; a type the theme lacks is passed over

  8. Texts and pictures in the editors of the panel (admin/modules/layout.php, partials/layout-edit.html, fragments/layout-field.html, core/classes/editor.php, core/helpers.php, public/plugins/system/filemanager.js):

  9. a field markdown or code shows the beginning of its text and "Редактировать", which opens the editor window: Markdown in the editor the site chose with the file window of layout.attach and the preview, the own HTML in the code editor; its form posts the one field, a refusal keeps the window open

  10. a field file is the file field of the panel over layout.attach: a pick of an uploaded file or a new file sent with the multipart form of the inspector into uploads/layout/

    • filemanager.js raises change on the carrier a pick landed in; getFileManagerField() registers a row swapped in by
htmx once its runtime is loaded
  • the settings show config/layout.php read-only; Editor::getCode() passes readonly to its frame
  • Pages and addresses (admin/modules/layout.php, partials/layout-screen.html):
  • a field url is a choice of the home page and the pages of the draft with an address of their own, the modules and the Node types, with an own address beside it

  • "Копировать страницу" copies a page with ids and an address of its own, the slot of a module staying with its page
  • "Из текста" makes a page from a Markdown document: # the cover, each ## a section "Текст"
  • the window "Ссылка для просмотра" makes a link to the draft for 1, 7 or 30 days, takes the earlier ones back and signs the frame anew

  • Uploads (core/stream.php, config/uploads.php, README.md, UPGRADING.md, docs/ARCHITECTURE.md):
  • layout is a public folder of the uploads; its rule is that of content with the uploads of users and guests off
  • Languages, help and tests (admin/lang, admin/info/layout, tests):
  • the words of the checks, the tools, the editor window, the link and the pages in six locales
  • the help of the builder in its current state
  • LayoutDraftTest over the probe modes tools and pages and the source of the editor window; EditorFormatTest for the read-only code editor

Benefits:

  • A publication shows what it changes and what a visitor would trip over before it lands
  • Every text and picture of a page is written with the tools every content editor of the panel has
  • A page starts from a ready set, a copy or a text, and is shown to others before it is published

Technical notes:

  • Stored data: storage/layout/mine.json for my sections; uploads/layout/ for the files of the builder
  • config/uploads.php gains the row layout; an update adds it to a site by the merge of the configuration
  • The stand keeps its own config/layout.php and the secret line of config/security.php outside this commit
Feature: The site builder gets its screen in the panel and publishes its draft in one transaction with a history of ten
Автор: Eduard Laas | Дата: 11:58 28.10.2026

The site builder moves on by two steps of its plan: the panel screen "Конструктор сайта" edits a draft of the layout and of the blocks - structure, frame of the page, inspector, library, settings and palette - and the button "Опубликовать" carries that draft to the site in one transaction of the layout, the addresses of its pages and the rows of _blocks. A second editor or a site changed meanwhile is refused instead of overwritten, an unsure commit is finished by a witness row, and the last ten publications can be brought back into the draft.

Core changes:

  1. The panel screen of the builder (admin/modules/layout.php, config/modules.php, partials/layout-*.html, fragments/layout-field.html, assets/css/layout.css, assets/js/layout.js, layouts/admin.html):

  2. the module layout of the super administrator, every write a POST through checkAdminPost('layout'); the screen covers the window (is_full drops the shell of the panel) with the tree, the frame of the draft and the inspector

  3. the draft lives in storage/layout/draft.json: the layout, the changed, new and deleted blocks with the rows they began from, the name and the logo of the site, and fifty steps of Undo and Redo

  4. the frame shows the page by the signed link of the draft and reloads where it stood after every write; a pick fetches the inspector, a write swaps the tree, the inspector and the state out of band

  5. the fields take their types from Field, the kinds of the builder (markdown, file, focus, icon, tone, choice) their own checks; the library of sections, the settings with the screens that keep the rest, one Ctrl+K

  6. The entries and the canon the screen takes (fragments/dock.html of both themes, menu-grid-item.html, menu-list-item.html, assets/css/theme.css and base.css, plugins/system/slaed.js, core/system.php):

  7. "Конструктор сайта" is an app of the floating menu after the app of the page
  8. a card of the grid may carry the schema of a section, a row of the list a level and attributes of its own
  9. the capsule of the editors gets a state shown at once, a window held at its top; a select of pictures keeps its preview after a swap of htmx

  10. The publication (core/classes/layout.php, core/system.php, core/classes/update.php, admin/modules/layout.php, partials/layout-state.html):

  11. layout joins the shared areas of setConfigFile(), so config/layout.php is written in the Closure form with its native types; Update::SHARED takes it outside the check that a shared pack brings node.php

  12. Layout::setPublish() checks the published file against the checksum the screen opened with, writes the blocks through the module (each row against the row the draft began from), marks the addresses of deleted pages gone, moves a renamed page with its former address kept for 301, and saves the layout with the path each page got

    • the proof of the operation is the first written row whose fingerprint changed (Layout::getWitnessHash(), a row
of _blocks or the rows of _routes of a page); setConfigRestore() reads it FOR UPDATE as it reads the type row
of Node, and a row matching neither side keeps the marker
  • the name and the logo of the site follow by the string form into config/global.php; a failed write keeps them
in the draft and says so
  • refusals with nothing written: a block changed in "Блоки и баннеры", a site changed after the screen opened, an address the registry does not take

  • the restore screen of the configuration names the proof of a publication
  • Two editors and the history (admin/modules/layout.php, partials/layout-screen.html, partials/layout-story.html, assets/js/layout.js):

  • the draft carries its revision, its time, its writer and the screen that wrote it; every write posts the screen and the revision it saw, and a write over the change of another screen is refused by name and time

  • the last ten publications are files pub-<n>.json with the author, the layout, the blocks and the name and logo of the site; the window "История публикаций" brings one back into the draft as a step with Undo

  • Languages, help, docs and tests (admin/lang, lang, admin/info/layout, docs, tests, tools):
  • the words of the screen and of the publication in six locales
  • the help of the builder in its current state; docs/NODE.md and docs/UPDATE.md for the five shared areas
  • LayoutDraftTest over the lifted functions of the module; LayoutPublishTest over real requests of route_probe.php publish: the refusals, the publication, the addresses, the history and an unsure commit both ways; ConfigFileTest over the five areas and the witness row; the audit baseline and the contrast registry

Benefits:

  • A site is changed in one step that either lands whole or not at all, never half a layout with old blocks
  • A second administrator or a screen left open cannot write over another one's work unnoticed
  • Every publication can be taken back from the history

Technical notes:

  • Stored data: storage/layout/ holds the draft and the history, outside the document root and never in a package
  • config/layout.php is now written with native types; the reader still takes the text form an older save left
  • The stand keeps its own config/layout.php outside this commit
Эта неделя (27.10.2026)
Feature: The chrome of lite comes from the layout, blocks get one writer of their place, the panel drags the rows of a list, and the cockpit lamp counts the passed checks
Автор: Eduard Laas | Дата: 23:39 27.10.2026

The site builder moves on by three steps of its plan: the header, the menus and the footer of lite are drawn from the layout and the places the theme describes, the blocks get one writer of their position and order with a Node type choosing its own columns, and the panel has one drag for the rows of a table and of a list, which the menu of the panel takes for an order of each administrator. Beside it the lamp of the cockpit becomes a disc of glass with the count of the passed checks and a bar for each, rests in a lull on a quiet site, and the demo series of the monitor and the statistic follow it.

Core changes:

  1. The chrome of lite from the layout (public/templates/lite/places.json, partials/site-header.html, partials/site-footer.html, partials/menu.html, index.php, blocks/menu.php, core/classes/layout.php, config/layout.php):

  2. places.json describes the parts of lite with their fields, the two menus with their depth and the zones of blocks; its labels are language constants

  3. the header, the line under the logo, the top links, the band before the footer, the contacts, the marks of the footer and the side tabs are drawn from the layout; sitename and site_logo stay in config/global.php

  4. blocks/menu.php prints the main menu of the layout; the shipped layout carries neutral menus of the site's own sections and no data of slaed.net

  5. the marks of the technologies move from templates/lite/images/tmp/ to uploads/presentation/brand/tech/
  6. Blocks (core/admin.php, core/system.php, admin/modules/blocks.php, blocks/node.php, public/index.php, storage/update/sql/table_update6_3.sql):

  7. setBlockOrder() is the one writer of the position and the order of _blocks: add, save, delete, fix and the drag order go through it, a zone numbered from 1 and closed up behind a row that left it

  8. getBlockWhich() and isBlockShown() read which as the columns do; the pages of the builder (page-<key>) are places of "Отображать блок в модулях"; a block with a lost file or a place no page answers is marked in the list

  9. the positions b and f are gone: the update moves their rows to the end of the centre below
  10. a Node type keeps the columns of its pages in its settings (view.side and view.top, config/node.php, the profiles, NodeQuery::filterViewRule()); the node block takes a list of types

  11. [block=id] prints its free block in a trusted rendering and is kept from every writer but the super administrator (filterTrustedTags(), Parser::filterFreeBlocks())

  12. One drag of the panel (public/templates/admin/assets/js/admin-ui.js, fragments/menu-list-item.html, partials/block-sidebar.html, admin/index.php, core/system.php, assets/css/theme.css):

  13. a row is any [data-sl-drag-id] taken by its sl-drag-handle; a list with data-sl-drag-url posts its order and swaps in the answer, a list with data-sl-drag-event raises that event with the id, the new order and the order before

  14. a row moves within its own list and group, anywhere else it shows the mark of a refusal
  15. the sidebar menu raises sl:menu-order and keeps the order of its administrator in the cookie menu through op option; getAdminSectionList() sorts by it, so the sidebar, the cards of the home and "Все разделы панели" follow

  16. the handle of a menu row lies over its icon under the pointer and in focus, a click on it opens the section, the rail has none; the drop marks of a menu row stand beside its plate

  17. The lamp of the cockpit (core/monitor.php, partials/cockpit.html, assets/css/base.css and theme.css of both themes, modules/presentation/index.php):

  18. a disc of glass (--sl-gauge-bg, --sl-gauge-shadow) with the mark, the passed checks of fourteen, a bar for each check and the word of the state

  19. getCockpitTone(): the worst signal, and with every check passed a lull while the hour counts under twenty pages
  20. the hero of the presentation shows the same lamp with every check passed
  21. the link words of the Toast UI editor take the link of the theme, which holds 4.5:1
  22. The demo series of the monitor and the statistic (public/demo/mon-.html, st-02-cockpit.html, assets/mon., assets/st.*, demo/admin/):

  23. the cockpit of the stand draws the lamp of the theme with its pace of the running hour; the own rules of the admin demo that the theme now carries are gone

  24. Languages, help and tests (admin/lang, lang, admin/info, modules/node/admin/info, docs, tests, tools):
  25. the labels of the places of lite, the marks of a lost block file or place, the lull and "Пройдено N из M" in six locales

  26. the help of the panel, of "Блоки и баннеры", of the configuration, of the monitor and of a Node type in their current state; docs/ARCHITECTURE.md, docs/NODE.md and docs/PARSER.md

  27. BlocksTest on the probe, LayoutTest, the route probe, AdminGuardTest over the order of the menu, CockpitTest over the lull; ui-contract.php and the contrast registry

Benefits:

  • No data of slaed.net ships in a theme, and a site keeps its chrome across a change of theme
  • One writer of the place of a block, so no screen leaves a zone with gaps or two rows on one number
  • One drag mechanism for the tables, the menu and the tree of the builder to come

Technical notes:

  • Stored data: the update moves the blocks of b and f; a Node type gains view.side and view.top
  • The cookie menu holds module keys only, no more than the modules of the site; without it the order is that of config/modules.php

  • config/layout.php carries the neutral shipped default; the stand keeps its own layout outside this commit
Feature: A page of the layout answers at its own address and draws the sections of lite, and the statistic and the monitor get their demo series
Автор: Eduard Laas | Дата: 15:36 27.10.2026

The site builder moves on by three steps of its plan: a page of the layout is a row of the address registry at the root of the site, the theme lite draws sixteen types of section on the classes of its presentation, and a module brings a type of its own with a provider and a default fragment. Beside it the demo stand gets two series of the panel, the statistic redrawn eight ways and the monitor four ways, the cockpit of the monitor carrying the pulse of the server, and the chart of the presentation gets washes under its lines.

Core changes:

  1. The page of the layout at its address (core/classes/route.php, core/classes/layout.php, public/index.php, core/system.php, core/security.php):

  2. the kind page of Route lives at the root: its own check of the name under the grammar of a slug, the empty prefix in addRouteRow() and isRouteReserved(), 301 from a former path and 410 for a deleted page

  3. a page of the layout carries the name page-<key> in $conf['name'], its title, description, og:image, robots and canonical address through setHead(), and its entry in the sitemap

  4. the page 404 of the layout answers through setError() with the code kept; a page may be for users only
  5. the read-only link of the draft: a signed token with a term over storage/layout/draft.json, noindex, the mark "Черновик" and the answer 403 for a dead link; storage/layout/ is ignored by git

  6. The sections of lite (public/templates/lite/sections/, fragments/section.html, assets/css/presentation.css):
  7. "Основа": hero, features, media, text, steps and cta, each a description sections/<type>.json and a fragment
  8. the other groups: gallery and video, stats, voices and team, faq, prices and map, embed and own HTML

    • the fragments of the feed, the record and the block wait for their data without a description
  9. every section stands in the frame of a presentation section with its number, anchor, devices and dates
  10. the alt of a picture, its point of focus (--sl-d-focus), Markdown through Parser::filterDoc() with the module layout
  11. the own rules sl-sec-* only where the presentation has no form: the picture beside a text, the claim, the columns, the frame of an outside service, the cards of the contacts

  12. The rendering of a section (core/classes/layout.php, core/classes/template.php, public/plugins/system/slaed.js):
  13. the kinds code, video, page and point: raw HTML of the super administrator, the privacy mode of YouTube or a film of the uploads, a page of https alone with its host, a map of OpenStreetMap from one field "lat, lon"

  14. an outside frame waits behind a placeholder, the picture of the section or its icon with a button, and asks the outside server only after the click; slaed.js puts the frame of the template in its place

  15. every fragment gets the values of the theme of the layout as parts and every item is_first
  16. a section whose fragment prints nothing loses its frame and its number
  17. Template::getHtmlSection() renders the default fragment a module brings where the theme has none, held inside the folder of that module

  18. The showcase of sites as a type of the module presentation (modules/presentation/):
  19. sections/sites.json, the provider sites.php and the default fragment sites.html; lite draws it on fragments/presentation-site.html

  20. getPresentationSites(), getPresentationBrand(), getPresentationDna() and getPresentationVoices() move into common.php, so the provider never runs the module

  21. The chart of the presentation (public/plugins/presentation/presentation.js, partials/presentation-rhythm.html):
  22. a chart marked data-sl-pres-fill="all" lays a wash and a soft shade under every line, as the monitor of the panel
  23. The demo series of the statistic and the monitor (public/demo/st-.html, mon-.html, assets/st., assets/mon., assets/demo.js, README.md):

  24. the statistic: eight faces of admin.php?name=statistic on one engine and one corpus of the counter
  25. the monitor: four faces of admin.php?name=monitor on the engine of the statistic, the findings of the live page drawn mended

    • the lamp, the state and the checks follow thirteen signals of the server and its programs, not the checks of SLAED
    • the lamp of the cockpit shows the pulse of the server: the heart, the rate, a running cardiogram and the mood in
the tone of the state, with the scene "Ночь" of the stand
  1. Languages and tests (admin/lang, lang, modules/presentation/lang, tests):
  2. the labels of the sections in six locales, the words of the draft and of the outside frames on the site
  3. LayoutTest holds the shape, the kinds, the outside frames and the type of the module; RoutePageTest and RouteRegistryTest hold the page at the root

Benefits:

  • a page of sections is a page of the site with its address, SEO and sitemap, without a module of its own
  • a section of a site visits no outside server before the visitor asks for it
  • a theme brings only markup and a schema, a module brings its own types with their data

Technical notes:

  • config/layout.php stays version 1; a page of the builder is a row of _routes of the kind page with its number as oid
  • tools/ui-contract.php declares --sl-d-focus and --sl-d-frame
  • no change of the database schema; the stand database and uploads/ are unchanged
Feature: One writer samples the server for the cockpit and the monitor, the statistic keeps the load of every page by hour, and the site gets its layout
Автор: Eduard Laas | Дата: 09:48 27.10.2026

The cockpit of the panel home made the site slow: every poll ran its own PowerShell probes, parallel polls ran them at once and each held the session of the administrator while it did. The server is now sampled by one writer under a lock into storage/logs/monitor.json, every poll lets the session go, and the load of a page becomes part of the statistic, so the panel shows its history by day and by hour. The layout of the site arrives with its own class.

Core changes:

  1. One writer of the server sample (core/monitor.php, admin/modules/monitor.php, core/system.php):
  2. getMonitorSample() retakes a sample older than ten seconds under the non-blocking lock monitor-sample.lock

    • a request that does not get the lock reads the file as it stands, so no probe ever runs twice at once
    • the cockpit poll and the HTMX polls of the monitor ask for a fresh sample, the monitor page and the
presentation only read
  • the monitor job takes the same sample once a minute and fails when it is older than a minute
  • the sample holds CPU, memory, disk, network and disk-io rates with timed histories, uptime, cores, the server software and the uploads size, retaken once an hour instead of on every monitor page

  • monitor.json is written once per sample: the history functions take and return the sample
  • the chart labels each point by its stored time; the live chip of the cockpit shows the age of the sample
  • One PowerShell run per sample on Windows (core/monitor.php):
  • getWindowsProbe() reads load, cores, clock, memory and boot time in one run through proc_open()

    • killed after ten seconds, so a hung WMI query never holds the lock
    • a run that gave nothing writes no sample: the old figures stay and age instead of turning into zeros
  • every OS check is PHP_OS_FAMILY; stristr(PHP_OS, 'WIN') also matched Darwin, so macOS had no CPU figure
  • the duplicate open_basedir closures of getCpuLoad() give way to isPathAllowed() and getFileSafe()
  • the Linux CPU share is loadavg / cores 100; it was 10 and showed a full server at ten per cent
  • the cpu_details and memory caches leave, the WMIC fallbacks send their errors to NUL
  • Polls release the session (core/security.php, public/index.php):
  • a request carrying X-SL-Poll calls session_write_close() right after the idle check

    • the cockpit, the queue bell, the private message poll and the HTMX polls hold no other request of the visitor
    • no poll handler writes the session after that point, checked handler by handler
  • The load of a page in the statistic (core/system.php, admin/modules/statistic.php, statistic-extended.html):
  • updateStatsTrack() adds generation (ms), queries and peak memory (KB) of the page to hour fields 17-19 of statistic.log, beside the hits by hour, so they roll into days.log and the month archives

  • the statistic page shows the average page per day with a total row and an average generation by hour chart
  • the strip of the cockpit shows the average page of the running hour instead of the figures of its own poll
  • The layout of the site (core/classes/layout.php, config/layout.php, public/index.php, core/system.php, core/classes/template.php, core/classes/update.php):

  • Layout reads config/layout.php: pages with their sections, the module slot, menus and the places of the theme
  • the home page and the page of a module render through it; getBlocks() asks Layout::isViewShown() for the scale
  • Template renders a section of the theme, sections/<type>.html
  • an update adds new keys of layout.theme but never a page or a menu item the site deleted
  • Help, documents and tests (admin/info, docs/ARCHITECTURE.md, docs/UPDATE.md, tests):
  • the help of the monitor, the scheduler and the statistic describes the sample, the poll rule and the load columns
  • CockpitTest holds the strip of the hour, LayoutTest the layout

Benefits:

  • a cockpit poll costs 20-90 ms instead of 1.5-6.8 s, a page of the same session no longer waits behind it
  • a sample costs about 1.7 s of PowerShell at most every ten seconds instead of several runs per poll
  • the monitor page with expired extras renders in about 0.3 s instead of 4.3 s
  • administrators see the load history of the site in the statistic

Technical notes:

  • statistic.log gains fields 17, 18 and 19, twenty-four sums each; readers address fields by number, older days show a dash
  • monitor.json gains cpu_p, cpu, mem, net, diskio, sys_hist_time, uploads and uploads_at
  • the hours already counted on the day of the update carry no load and lower that day's average
  • the rule that a poll handler never writes the session is documented, not held by a test

Страница 1 из 133. Всего: 1328

1 2 3 4 5 6 7 8 9 10 … 133
Хотите опробовать SLAED CMS в действии?
Идеи и предложения
Обратная связь
Подтверждение

Поделиться
QR-код

Предварительный просмотр