CMS "GIRVAS" Release dated May 12, 2026 at the "Shuya" development stage.
Latest Changes
QueryBuilder: added support for JOINs, CASE expressions, and indexes
- added Enum IndexType with index types (BTREE, HASH, GIST, GIN, SPGIST, BRIN, FULLTEXT)
- added ClauseJoin class for JOIN support in SELECT queries (INNER, LEFT, RIGHT, FULL)
- implemented adaptive JOIN condition generation for MySQL and PostgreSQL
- added CaseExpression class for building CASE expressions in SQL
- implemented whenJsonLike() and whenJsonArrayContains() methods for JSON search
- added static method CaseExpression::sum() for summing CASE expressions
- added factory method createCase() to QueryBuilder
- added StatementCreateIndex class for building CREATE INDEX queries
- added StatementDropIndex class for building DROP INDEX queries
- implemented support for UNIQUE, CONCURRENTLY, IF NOT EXISTS/IF EXISTS, partial indexes with WHERE
- added setStatementCreateIndex() and setStatementDropIndex() methods to QueryBuilder
- fixed CASE expression escaping in addSelections() for PostgreSQL
- added caching of initialized data (initData) to EntryCategory class
Added built-in search engine for entries
- added search() method to Entries class for full-text search with localization support
- added getCountBySearch() method to Entries class for search results pagination
- implemented search result ranking by relevance with configurable field weights
- implemented AND-search with query splitting into words and punctuation handling
- added PageSearch class for displaying the public search page
- fixed URL decoding of search query in PageSearch
Added entries archive page with date navigation
- added getByDateRange() and getCountByDateRange() methods to Entries class for period selection
- added getAvailableYears() and getAvailableMonths() methods to Entries class for archive navigation
- added PageArchive class for displaying the archive page
- implemented year and month navigation with entry count
- getMonthName() changed to public static method with names retrieved from localization
- archive navigation buildArchiveNavigation() rewritten using DOMDocument
- added archive pages to Sitemap (/archive, /archive?year=YYYY, /archive?year=YYYY&month=MM)
Added support for child categories and hierarchical breadcrumbs
- added getByCategoriesIDs() and getCountByCategoriesIDs() methods to Entries class
- added getChildCategoriesIDs() method to EntryCategory class for recursive retrieval of child categories
- added getParentChain() method to EntryCategory class for breadcrumb hierarchy
- updated getEntries() and getEntriesCount() methods with includeChildren parameter
- category page PageEntries displays entries considering child categories
- breadcrumbs display full hierarchy from root to current category
Added automatic index creation during CMS installation
- added index creation block at installation step 6 after table generation
- indexes for tables entries, entries_categories, entries_comments, pages_static
- indexes for tables users, users_sessions, forms_data, web_channels, metrics
- unique indexes on name, login, email
- for PostgreSQL added GIN indexes on JSONB fields and partial index for published entries
- all indexes are created with IF NOT EXISTS, errors are logged without interrupting installation
Added a subsection in the "Content" section of the admin panel: "Content Blocks"
- Introduced a new subsection "Content Blocks" in the "Content" section
Added built-in SEO content analyzer with markdown support
- implemented
SeoAnalyzerclass for checking five areas: title, meta description, keywords, content, url - the analyzer checks for keyword occurrence in SEO title, meta description, h2-h6 headings, first paragraph, and entire text
- duplication control: warning if SEO fields are empty and duplicate the main fields
- markdown parser supports json attributes of links and images in the CMS "GIRVAS" syntax
- search for bare URLs with recommendation to format them as markdown links
- check for image alt text and external links" rel=nofollow
- heading hierarchy: h1 is excluded from content check as it is generated by the theme
- color coding and progress bars for each section
- recommendation block with specific steps for improvement
- works entirely client-side, without server requests
- localization via _t() with PHP-compatible format
%s,%d,%.nf - interface integrated into the sidebar of the page and entry editor
Minor bugs fixed
Previous release: 0.2.9 "Voitsy"
Comments