Top.Mail.Ru
  • CMS «GIRVAS»

    Un système de gestion de contenu flexible et gratuit, permettant de créer un site de toute orientation.

    Plus simple avec nous !

  • Absolument gratuit

    Arrêtez d'utiliser des systèmes de gestion anciens et payants ! L'ère des nouvelles solutions est arrivée - choisissez «GIRVAS» !

  • Solution carélienne

    «GIRVAS» a été développé en République de Carélie et est inscrit au Registre des logiciels russes du Ministère du développement numérique de la Fédération de Russie (numéro d'enregistrement n° 25012 du 27.11.2024).

CMS « GIRVAS » 0.3.0 « Chouïa » : recherche, archive, analyse SEO

La société « Développeur carélien » présente la mise à jour 0.3.0 « Chouïa » pour le système de gestion de contenu « GIRVAS ». La version succède à l"étape de code « Voïtsy » et reçoit le nom de la rivière Chouïa — l"un des plus grands fleuves de la République de Carélie, prenant sa source dans le lac Suojärvi et se jetant dans le lac Onega. La tradition d"attribuer aux versions du CMS des noms de plans d"eau caréliens souligne l"appartenance régionale du produit et son intégration dans le paysage des développements technologiques nationaux.

Cette version est axée sur le développement des outils de navigation dans le contenu, des capacités de recherche et des moyens d"optimisation pour les moteurs de recherche, et contient également des améliorations techniques substantielles du noyau du système.

Moteur de recherche intégré
Exemple d"implémentation des résultats du moteur de recherche sur le site officiel du fabricant du CMS « GIRVAS »
Exemple d"implémentation des résultats du moteur de recherche sur le site officiel du fabricant du CMS « GIRVAS »

L"une des principales innovations de la version est l"implémentation d"un moteur de recherche en texte intégral fonctionnant sans services ni plugins tiers.

La recherche s"effectue dans les titres, descriptions, contenu principal et mots-clés des entrées. Une logique de recherche AND a été implémentée avec une division automatique de la requête en mots individuels et une exclusion de la ponctuation, ce qui permet de trouver des documents pertinents même avec des formulations imprécises. Le classement des résultats est basé sur des coefficients de pondération configurables : les correspondances dans les titres ont la priorité sur les correspondances dans le corps du document.

Dans le panneau d"administration, les capacités de recherche seront étendues dans les prochaines mises à jour : les utilisateurs authentifiés pourront effectuer des recherches dans les entrées, les pages statiques et les utilisateurs du système.

Archive des entrées avec navigation par dates

Exemple d"implémentation de l"archive sur le site officiel du fabricant du CMS « GIRVAS »

La version 0.3.0 présente une archive intégrée des entrées — un outil de navigation chronologique dans le contenu.

La fonction regroupe automatiquement les entrées par années et mois, affichant le nombre de publications pour chaque intervalle de temps. La navigation prend en charge le filtrage par catégorie : l"utilisateur peut consulter à la fois l"archive générale de toutes les entrées du site et l"archive d"une catégorie individuelle. Les fils d"Ariane sont générés dynamiquement en fonction de la période et de la catégorie sélectionnées, permettant une navigation pratique entre les niveaux de l"archive. Les pages d"archive sont optimisées pour les moteurs de recherche — les méta-balises sont générées automatiquement et les URL des pages d"archive sont incluses dans le plan du site dynamique (sitemap).

Hiérarchie des catégories et navigation améliorée

Exemple d"imbrication de la catégorie « Félicitations » dans la catégorie « Actualités »
Exemple d"imbrication de la catégorie « Félicitations » dans la catégorie « Actualités »

La mise à jour implémente la prise en charge des catégories enfants avec un parcours récursif de l"arborescence. La page de catégorie affiche désormais les entrées en tenant compte de toutes les sous-catégories imbriquées, offrant ainsi une représentation plus complète du contenu.

Les fils d"Ariane sur les pages de catégories et d"entrées affichent la chaîne hiérarchique complète de la catégorie racine à la position actuelle. Cette amélioration optimise à la fois la navigation des utilisateurs et le maillage interne du site pour les moteurs de recherche.

Analyseur SEO de contenu intégré

Exemple de fonctionnement de l"analyseur SEO intégré au panneau d"administration du CMS « GIRVAS »
Exemple de fonctionnement de l"analyseur SEO intégré au panneau d"administration du CMS « GIRVAS »

Un analyseur SEO côté client est intégré à l"éditeur de pages et d"entrées du panneau d"administration, fonctionnant sans requêtes vers le serveur.

L"analyseur effectue une vérification dans cinq domaines : titre, méta-description, mots-clés, contenu et URL. Parmi les paramètres vérifiés figurent la longueur et le contenu des balises SEO, la présence de mots-clés dans les titres, le premier paragraphe et le texte principal, la correction de la hiérarchie des titres, la présence de textes alt dans les images, l"attribut rel="nofollow" des liens externes, la détection d"URL « nues » et des recommandations pour les formater au format Markdown. Les résultats de l"analyse s"affichent instantanément avec un code couleur, des barres de progression et un bloc de recommandations concrètes pour l"amélioration.

Panneau de l"analyseur SEO dans le panneau d"administration du CMS « GIRVAS » à l"état initial
Panneau de l"analyseur SEO dans le panneau d"administration du CMS « GIRVAS » à l"état initial

Blocs de contenu

Exemple de bloc intégré de type « Mini-cabinet »
Exemple de bloc intégré de type « Mini-cabinet »

Une nouvelle section « Blocs de contenu » est apparue dans le panneau d"administration, destinée à la gestion d"éléments spécialisés intégrés dans les sections des thèmes sans modification des modèles.

Plusieurs types de blocs sont pris en charge :

  • « Personnalisé » — contenu arbitraire avec formatage Markdown ;
  • « Cabinet » — mini-profil utilisateur avec affichage automatique du formulaire d"authentification pour les visiteurs non authentifiés ;
  • « Liste des catégories » — liste hiérarchique de toutes les catégories d"entrées ;
  • « Vide » — type spécialisé pour l"intégration par des modules tiers.

Pour chaque bloc, des règles d"affichage sont configurées via des expressions régulières appliquées à l"URL. En cas de correspondance de l"adresse demandée avec le modèle, le bloc est affiché dans la section correspondante du thème.

Améliorations techniques du noyau

La version 0.3.0 contient des améliorations substantielles du composant QueryBuilder — le constructeur interne de requêtes SQL :

  • Ajout du support des JOIN (INNER, LEFT, RIGHT, FULL) avec génération adaptative des conditions pour MySQL et PostgreSQL ;
  • Implémentation de la classe CaseExpression pour la construction d"expressions CASE, y compris des méthodes spécialisées pour la recherche JSON ;
  • Ajout d"un support complet des index : création et suppression avec prise en compte des types BTREE, HASH, GIST, GIN, SPGIST, BRIN, FULLTEXT, ainsi que UNIQUE, CONCURRENTLY, IF NOT EXISTS et des index partiels avec conditions WHERE.

Lors de l"installation du CMS, des index d"optimisation sont désormais créés automatiquement pour toutes les tables, y compris des index GIN pour les champs JSONB (PostgreSQL) et un index partiel pour les entrées publiées. Les erreurs de création d"index sont journalisées sans interrompre le processus d"installation.

La classe EntryCategory a reçu une mise en cache des données initialisées, évitant les requêtes répétées à la base de données lors de multiples appels de la méthode initData().

Migration

Mise à jour du système de fichiers

Nous recommandons vivement d"obtenir la mise à jour via le dépôt officiel du CMS « GIRVAS ». Si vous l"utilisez par défaut, exécutez la commande console git pull à la racine de votre projet, après être passé sur la branche production (si vous utilisiez auparavant une autre branche).

Après la mise à jour du système de fichiers, videz le cache : rm -R ./cache/* (le chemin peut varier en fonction de votre emplacement réel dans le système).

Migration de la base de données

Après la mise à jour réussie des fichiers du CMS, il est nécessaire d"effectuer une migration de la base de données. Pour ce faire, vous devez exécuter plusieurs requêtes SQL sur votre base de données (il suffit de copier et coller), selon le type de votre SGBD.

Pour MySQL

-- Création de la table pour les blocs de contenu --

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 );

-- Index pour la table 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);

-- Index pour la table entries_categories CREATE INDEX idx_entries_categories_parent ON entries_categories (parentID); CREATE UNIQUE INDEX idx_entries_categories_name_unique ON entries_categories (name);

-- Index pour la table 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);

-- Index pour la table 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);

-- Index pour la table users CREATE UNIQUE INDEX idx_users_login_unique ON users (login); CREATE UNIQUE INDEX idx_users_email_unique ON users (email);

-- Index pour la table users_sessions CREATE INDEX idx_users_sessions_user ON users_sessions (userID); CREATE INDEX idx_users_sessions_token ON users_sessions (token);

-- Index pour la table forms_data CREATE INDEX idx_forms_data_form ON forms_data (formID); CREATE INDEX idx_forms_data_created ON forms_data (createdUnixTimestamp DESC);

-- Index pour la table web_channels CREATE UNIQUE INDEX idx_web_channels_name_unique ON web_channels (name);

-- Index pour la table metrics CREATE INDEX idx_metrics_date ON metrics (date);

Pour PostgreSQL

-- Création de la table pour les blocs de contenu --

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 );

-- Index pour la table 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;

-- Index pour la table 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");

-- Index pour la table 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);

-- Index pour la table 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);

-- Index pour la table 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");

-- Index pour la table 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");

-- Index pour la table 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);

-- Index pour la table web_channels CREATE UNIQUE INDEX IF NOT EXISTS idx_web_channels_name_unique ON web_channels ("name");

-- Index pour la table metrics CREATE INDEX IF NOT EXISTS idx_metrics_date ON metrics ("date");

Conclusion

La mise à jour 0.3.0 « Chouïa » du CMS « GIRVAS » associe le développement des outils de navigation et de recherche des utilisateurs à une modernisation technique approfondie du noyau. Nous recommandons à tous les utilisateurs d"effectuer la mise à jour pour évaluer les capacités de recherche améliorées, la commodité de l"archivage du contenu et les nouveaux outils d"optimisation pour les moteurs de recherche.

Traductions

Commentaires

Cet article n'a pas de commentaires.