Top.Mail.Ru
  • CMS «GIRVAS»

    Ein flexibles und kostenloses Content-Management-System, mit dem Sie eine Website für jede Branche erstellen können.

    Mit uns einfacher!

  • Absolut kostenlos

    Hören Sie auf, alte und kostenpflichtige Verwaltungssysteme zu verwenden! Die Ära der neuen Lösungen ist angebrochen – wählen Sie «GIRVAS»!

  • Karelische Lösung

    «GIRVAS» wurde in der Republik Karelien entwickelt und ist im Register der russischen Software des Ministeriums für digitale Entwicklung der Russischen Föderation eingetragen (Registrierungsnummer Nr. 25012 vom 27.11.2024).

CMS "GIRVAS" 0.3.0 "Schuja": Suche, Archiv, SEO-Analyse

Die Firma "Karelischer Entwickler" präsentiert das Update 0.3.0 "Schuja" für das Content-Management-System "GIRVAS". Die Version löst die Codestufe "Woizy" ab und erhält den Namen nach dem Fluss Schuja — einem der größten Flüsse der Republik Karelien, der aus dem See Suojarwi entspringt und in den Onegasee mündet. Die Tradition, CMS-Versionen nach karelischen Gewässern zu benennen, unterstreicht die regionale Zugehörigkeit des Produkts und seine Einbindung in die Landschaft heimischer Technologieentwicklungen.

Dieses Release konzentriert sich auf die Entwicklung von Werkzeugen zur Content-Navigation, Suchfunktionen und Suchmaschinenoptimierung sowie enthält wesentliche technische Verbesserungen des Systemkerns.

Integrierte Suchmaschine

Beispiel für die Implementierung der Suchergebnisausgabe auf der offiziellen Website des CMS "GIRVAS"-Herstellers
Beispiel für die Implementierung der Suchergebnisausgabe auf der offiziellen Website des CMS "GIRVAS"-Herstellers

Eine der wichtigsten Neuerungen der Version ist die Implementierung einer Volltextsuchmaschine, die ohne externe Dienste und Plugins funktioniert.

Die Suche erfolgt in Titeln, Beschreibungen, Hauptinhalten und Schlüsselwörtern von Einträgen. Implementiert wurde eine AND-Suchlogik mit automatischer Aufteilung der Anfrage in einzelne Wörter und Ausschluss von Satzzeichen, was das Auffinden relevanter Materialien auch bei ungenauen Formulierungen ermöglicht. Die Ergebnisrelevanz basiert auf konfigurierbaren Gewichtungsfaktoren: Übereinstimmungen in Titeln haben Priorität vor Übereinstimmungen im Dokumenttext.

Im Admin-Panel werden die Suchfunktionen in zukünftigen Updates erweitert: angemeldete Benutzer können nach Einträgen, statischen Seiten und Systembenutzern suchen.

Eintragsarchiv mit Datumsnavigation

Beispiel für die Archivimplementierung auf der offiziellen Website des CMS "GIRVAS"-Herstellers

Version 0.3.0 führt ein integriertes Eintragsarchiv ein — ein Werkzeug für die chronologische Content-Navigation.

Die Funktion gruppiert Einträge automatisch nach Jahren und Monaten und zeigt die Anzahl der Veröffentlichungen für jedes Zeitintervall an. Die Navigation unterstützt die Filterung nach Kategorien: Der Benutzer kann sowohl das allgemeine Archiv aller Site-Einträge als auch das Archiv einer einzelnen Kategorie einsehen. Die Breadcrumbs werden dynamisch basierend auf dem ausgewählten Zeitraum und der Kategorie generiert und ermöglichen eine bequeme Navigation durch die Archivebenen. Die Archivseiten sind für Suchmaschinen optimiert — Meta-Tags werden automatisch generiert und die URLs der Archivseiten sind in die dynamische Sitemap aufgenommen.

Kategoriehierarchie und verbesserte Navigation

Beispiel für die Verschachtelung der Kategorie "Glückwünsche" in der Kategorie "Nachrichten"
Beispiel für die Verschachtelung der Kategorie "Glückwünsche" in der Kategorie "Nachrichten"

Das Update implementiert Unterstützung für Unterkategorien mit rekursivem Baumdurchlauf. Die Kategorieseite zeigt nun Einträge unter Berücksichtigung aller verschachtelten Unterkategorien an, was eine umfassendere Darstellung des Inhalts ermöglicht.

Die Breadcrumbs auf Kategorie- und Eintragsseiten zeigen die vollständige Hierarchiekette von der Stammkategorie bis zur aktuellen Position. Diese Verbesserung verbessert sowohl die Benutzernavigation als auch die interne Verlinkung der Site für Suchmaschinen.

Integrierter SEO-Content-Analysator

Beispiel für die Funktionsweise des in das CMS "GIRVAS"-Admin-Panel integrierten SEO-Analysators
Beispiel für die Funktionsweise des in das CMS "GIRVAS"-Admin-Panel integrierten SEO-Analysators

In den Seiten- und Eintrags-Editor des Admin-Panels ist ein clientseitiger SEO-Analysator integriert, der ohne Serveranfragen arbeitet.

Der Analysator führt eine Prüfung in fünf Bereichen durch: Titel, Meta-Beschreibung, Schlüsselwörter, Inhalt und URL. Zu den geprüften Parametern gehören Länge und Inhalt der SEO-Tags, Vorkommen von Schlüsselwörtern in Überschriften, im ersten Absatz und im Haupttext, Korrektheit der Überschriftenhierarchie, Vorhandensein von Alt-Texten bei Bildern, das rel="nofollow"-Attribut bei externen Links, Erkennung von "nackten" URLs und Empfehlungen zu deren Formatierung im Markdown-Format. Die Analyseergebnisse werden sofort mit Farbkodierung, Fortschrittsbalken und konkreten Verbesserungsempfehlungen angezeigt.

SEO-Analysator-Panel im CMS "GIRVAS"-Admin-Panel im Ausgangszustand
SEO-Analysator-Panel im CMS "GIRVAS"-Admin-Panel im Ausgangszustand

Inhaltsblöcke

Beispiel für einen integrierten Block vom Typ "Mini-Cabinet"
Beispiel für einen integrierten Block vom Typ "Mini-Cabinet"

Im Admin-Panel gibt es einen neuen Bereich "Inhaltsblöcke", der zur Verwaltung spezialisierter Elemente dient, die in Themenbereiche eingebettet werden, ohne Vorlagen bearbeiten zu müssen.

Mehrere Blocktypen werden unterstützt:

  • "Personalisierter" — beliebiger Inhalt mit Markdown-Formatierung;
  • "Cabinet" — Benutzer-Miniprofil mit automatischer Anzeige des Anmeldeformulars für nicht angemeldete Besucher;
  • "Kategorieliste" — hierarchische Liste aller Eintragskategorien;
  • "Leer" — spezialisierter Typ für die Integration durch Drittanbieter-Module.

Für jeden Block werden Anzeigeregeln über reguläre Ausdrücke definiert, die auf die URL angewendet werden. Bei Übereinstimmung der angeforderten Adresse mit dem Muster wird der Block im entsprechenden Bereich des Themas angezeigt.

Technische Verbesserungen des Kerns

Version 0.3.0 enthält wesentliche Überarbeitungen der QueryBuilder-Komponente — dem internen SQL-Query-Builder:

  • Unterstützung für JOINs (INNER, LEFT, RIGHT, FULL) mit adaptiver Generierung von Bedingungen für MySQL und PostgreSQL hinzugefügt;
  • CaseExpression-Klasse für die Konstruktion von CASE-Ausdrücken implementiert, einschließlich spezialisierter Methoden für die JSON-Suche;
  • Umfassende Indexunterstützung hinzugefügt: Erstellung und Löschung unter Berücksichtigung der Typen BTREE, HASH, GIST, GIN, SPGIST, BRIN, FULLTEXT sowie UNIQUE, CONCURRENTLY, IF NOT EXISTS und partieller Indizes mit WHERE-Bedingungen.

Bei der CMS-Installation werden jetzt automatisch optimierende Indizes für alle Tabellen erstellt, einschließlich GIN-Indizes für JSONB-Felder (PostgreSQL) und eines partiellen Index für veröffentlichte Einträge. Fehler bei der Indexerstellung werden protokolliert, ohne den Installationsprozess zu unterbrechen.

Der EntryCategory-Klasse wurde Caching initialisierter Daten hinzugefügt, das wiederholte Datenbankabfragen bei mehreren Aufrufen der initData()-Methode verhindert.

Migration

Dateisystem-Update

Wir empfehlen dringend, das Update über das offizielle CMS "GIRVAS"-Repository zu beziehen. Wenn Sie es standardmäßig verwenden, führen Sie im Stammverzeichnis Ihres Projekts den Konsolenbefehl git pull aus, nachdem Sie zuvor auf den Branch production gewechselt haben (falls Sie zuvor einen anderen Branch verwendet haben).

Nach dem Dateisystem-Update leeren Sie den Cache: rm -R ./cache/* (der Pfad kann je nach tatsächlichem Standort im System abweichen).

Datenbank-Migration

Nach dem erfolgreichen Update der CMS-Dateien muss eine Datenbankmigration durchgeführt werden. Dazu müssen je nach Art Ihres DBMS mehrere SQL-Abfragen an Ihre Datenbank ausgeführt werden (einfach kopieren und einfügen).

Für MySQL

-- Erstellung der Tabelle für Inhaltsblöcke --

CREATE TABLE IF NOT EXISTS content_blocks ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name TEXT NOT NULL, texts JSON, metadata JSON, createdUnixTimestamp INTEGER NOT NULL DEFAULT 0, updatedUnixTimestamp INTEGER NOT NULL DEFAULT 0 );

-- Indizes für Tabelle entries CREATE INDEX idx_entries_category ON entries (categoryID); CREATE INDEX idx_entries_author ON entries (authorID); CREATE INDEX idx_entries_created ON entries (createdUnixTimestamp DESC); CREATE INDEX idx_entries_updated ON entries (updatedUnixTimestamp); CREATE UNIQUE INDEX idx_entries_name_unique ON entries (name);

-- Indizes für Tabelle entries_categories CREATE INDEX idx_entries_categories_parent ON entries_categories (parentID); CREATE UNIQUE INDEX idx_entries_categories_name_unique ON entries_categories (name);

-- Indizes für Tabelle entries_comments CREATE INDEX idx_entries_comments_entry ON entries_comments (entryID); CREATE INDEX idx_entries_comments_author ON entries_comments (authorID); CREATE INDEX idx_entries_comments_created ON entries_comments (createdUnixTimestamp DESC);

-- Indizes für Tabelle pages_static CREATE UNIQUE INDEX idx_pages_static_name_unique ON pages_static (name); CREATE INDEX idx_pages_static_author ON pages_static (authorID); CREATE INDEX idx_pages_static_created ON pages_static (createdUnixTimestamp DESC);

-- Indizes für Tabelle users CREATE UNIQUE INDEX idx_users_login_unique ON users (login); CREATE UNIQUE INDEX idx_users_email_unique ON users (email);

-- Indizes für Tabelle users_sessions CREATE INDEX idx_users_sessions_user ON users_sessions (userID); CREATE INDEX idx_users_sessions_token ON users_sessions (token);

-- Indizes für Tabelle forms_data CREATE INDEX idx_forms_data_form ON forms_data (formID); CREATE INDEX idx_forms_data_created ON forms_data (createdUnixTimestamp DESC);

-- Indizes für Tabelle web_channels CREATE UNIQUE INDEX idx_web_channels_name_unique ON web_channels (name);

-- Indizes für Tabelle metrics CREATE INDEX idx_metrics_date ON metrics (date);

Für PostgreSQL

-- Erstellung der Tabelle für Inhaltsblöcke --

CREATE TABLE IF NOT EXISTS content_blocks ( "id" SERIAL NOT NULL PRIMARY KEY, "name" TEXT NOT NULL, "texts" JSONB, "metadata" JSONB, "createdUnixTimestamp" INTEGER NOT NULL DEFAULT 0, "updatedUnixTimestamp" INTEGER NOT NULL DEFAULT 0 );

-- Indizes für Tabelle entries CREATE INDEX IF NOT EXISTS idx_entries_category ON entries ("categoryID"); CREATE INDEX IF NOT EXISTS idx_entries_author ON entries ("authorID"); CREATE INDEX IF NOT EXISTS idx_entries_created ON entries ("createdUnixTimestamp" DESC); CREATE INDEX IF NOT EXISTS idx_entries_updated ON entries ("updatedUnixTimestamp"); CREATE UNIQUE INDEX IF NOT EXISTS idx_entries_name_unique ON entries ("name"); CREATE INDEX IF NOT EXISTS idx_entries_texts_gin ON entries USING GIN (texts); CREATE INDEX IF NOT EXISTS idx_entries_metadata_gin ON entries USING GIN (metadata); CREATE INDEX IF NOT EXISTS idx_entries_published ON entries ("createdUnixTimestamp" DESC) WHERE (metadata::jsonb->>"isPublished")::boolean = true;

-- Indizes für Tabelle entries_categories CREATE INDEX IF NOT EXISTS idx_entries_categories_parent ON entries_categories ("parentID"); CREATE UNIQUE INDEX IF NOT EXISTS idx_entries_categories_name_unique ON entries_categories ("name");

-- Indizes für Tabelle entries_comments CREATE INDEX IF NOT EXISTS idx_entries_comments_entry ON entries_comments ("entryID"); CREATE INDEX IF NOT EXISTS idx_entries_comments_author ON entries_comments ("authorID"); CREATE INDEX IF NOT EXISTS idx_entries_comments_created ON entries_comments ("createdUnixTimestamp" DESC);

-- Indizes für Tabelle pages_static CREATE UNIQUE INDEX IF NOT EXISTS idx_pages_static_name_unique ON pages_static ("name"); CREATE INDEX IF NOT EXISTS idx_pages_static_author ON pages_static ("authorID"); CREATE INDEX IF NOT EXISTS idx_pages_static_created ON pages_static ("createdUnixTimestamp" DESC); CREATE INDEX IF NOT EXISTS idx_pages_static_texts_gin ON pages_static USING GIN (texts);

-- Indizes für Tabelle users CREATE UNIQUE INDEX IF NOT EXISTS idx_users_login_unique ON users ("login"); CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email_unique ON users ("email");

-- Indizes für Tabelle users_sessions CREATE INDEX IF NOT EXISTS idx_users_sessions_user ON users_sessions ("userID"); CREATE INDEX IF NOT EXISTS idx_users_sessions_token ON users_sessions ("token");

-- Indizes für Tabelle forms_data CREATE INDEX IF NOT EXISTS idx_forms_data_form ON forms_data ("formID"); CREATE INDEX IF NOT EXISTS idx_forms_data_created ON forms_data ("createdUnixTimestamp" DESC);

-- Indizes für Tabelle web_channels CREATE UNIQUE INDEX IF NOT EXISTS idx_web_channels_name_unique ON web_channels ("name");

-- Indizes für Tabelle metrics CREATE INDEX IF NOT EXISTS idx_metrics_date ON metrics ("date");

Fazit

Das CMS "GIRVAS"-Update 0.3.0 "Schuja" vereint die Entwicklung von Benutzer-Navigations- und Suchwerkzeugen mit einer tiefgreifenden technischen Modernisierung des Kerns. Wir empfehlen allen Benutzern, das Update durchzuführen, um die verbesserten Suchfunktionen, die benutzerfreundliche Content-Archivierung und die neuen Suchmaschinenoptimierungswerkzeuge zu nutzen.

Übersetzungen

Kommentare

Zu diesem Beitrag gibt es keine Kommentare.