SPIP - français, ces 365 derniers jours

SPIP est un système de publication pour l’Internet qui s’attache particulièrement au fonctionnement collectif, au multilinguisme et à la facilité (...)



vendredi 8 octobre 2021

  • $GLOBALS['marqueur']

    Le fichier cache dépend du contexte (page et variables de la page), mais aussi du nom de domaine, de la valeur de $dossier_squelettes et de la valeur de la variable globale $marqueur. Cette variable sert donc à différencier différents jeux de cache sur votre site, permettant, entre autres, de changer de squelette à la volée tout en bénéficiant du cache.

    Plus les valeurs différentes de marqueur sont nombreuses, plus il y aura de jeux de cache différents, et donc le cache sera moins efficace car utilisé moins souvent : cette variable est donc à utiliser avec parcimonie.

    Par exemple, quand un squelette varie en fonction de la présence d'un cookie sur le poste de l'internaute, il est impératif de demander à ce que le cache dépende aussi de ce cookie, car sinon la même version du cache serait servie à tout le monde et ne refléterait pas le squelette. On devra donc faire varier le marqueur selon le cookie, par exemple en ajoutant dans le fichier d'options :

    # gestion des cookies
    $GLOBALS['marqueur'] .= ':'.($_COOKIE['dev'] ?? 'dev' : 'prod');

    Avec ce code, un squelette peut alors dépendre de ce cookie :

    #SET{dev,#EVAL{$_COOKIE['dev']??''}}
    [(#GET{dev}|?{Ici code pour développement,Ici code en production})]

  • #SAUTER

    La balise #SAUTER reçoit un nombre entier en argument et permet, dans une boucle, de sauter en avant ce nombre de résultats.

    La balise modifie le compteur courant de la boucle, mais pas les autres champs qui gardent leurs valeurs issues de la boucle avant le saut. Il est donc préférable d'utiliser la balise juste avant la fermeture .

    L'argument reçu doit être supérieur à zéro sinon la balise ne fait rien.

    Exemples :

    - Parcourir un résultat sur 3

    
    
      span>(ARTICLES)>
    • #TITRE
    • #SAUTER{2}

    - On peut se servir de #SAUTER{999999} pour sortir d'une boucle prématurément.


jeudi 30 septembre 2021

jeudi 23 septembre 2021

  • |label_nettoyer

    En français, il est parfois préférable de ne pas présenter de ' :' à la fin d'une chaîne d'un ou d'un dans un formulaire. Ce comportement dépend néanmoins de la langue et du contexte.

    Le filtre |label_nettoyer élimine tout ' : ' et espace terminale éventuellement présents dans une chaîne de langue de SPIP ou de vos squelettes. Cela permet de les utiliser proprement comme étiquettes de formulaire.

    Exemple : <:info_maximum|label_nettoyer:>

    Voir : le filtre |label_ponctuer qui, au contraire, inclue la ponctuation adaptée à la langue.


  • |label_ponctuer

    En français, il est parfois préférable de ne pas présenter de ' :' à la fin d'une chaîne d'un ou d'un dans un formulaire. Ce comportement dépend néanmoins de la langue et du contexte.

    Le filtre |label_ponctuer permet d'ajouter si besoin un ' : ' terminal aux chaînes de texte utilisées comme étiquettes de formulaire.

    Il commence par mettre la première lettre de la chaîne en majuscule et par retirer de la fin de celle-ci le ' :' et l'éventuel espace précédent, au moyen du filtre |label_nettoyer, puis il ajoute la terminaison adaptée en tenant compte du contexte de langue.

    Exemple : <:info_maximum|label_ponctuer:>

    Il est possible
    - de ne pas mettre la première lettre en majuscule en passant un argument vide au filtre : <:info_maximum|label_ponctuer{''}:>
    - de modifier le caractère final et l'espace qui le précède éventuellement en modifiant la chaîne de langue 'label_ponctuer', localement dans votre fichier de langue (voir « Internationaliser les squelettes »).


samedi 11 septembre 2021

  • _HTML_BG_CRON_INHIB

    La constante _HTML_BG_CRON_INHIB, lorsqu'elle est définie à true, permet d'inhiber l'insertion du code HTML qui lance les tâches périodiques (CRON).

    Elle peut être utilisée sur certains sites incompatibles avec le fonctionnement du CRON de SPIP car ils fournissent du contenu pseudo HTML propriétaire.

    Voir aussi _HTML_BG_CRON_FORCE


lundi 6 septembre 2021

  • _DEV_VERSION_SPIP_COMPAT

    Cette constante permet d'utiliser des plugins qui n'ont pas encore été déclarés compatibles avec la version de SPIP utilisée. Cela permet de les tester, de les utiliser ou de les déboguer si nécessaire.

    Par exemple, lors de la sortie de SPIP 4.0, on peut la définir ainsi dans le fichier mes_options.php, pour pouvoir utiliser des plugins déclarés compatibles jusqu'à SPIP 3.2 seulement.

    define('_DEV_VERSION_SPIP_COMPAT', '3.2.0');

    Rq : lorsque vous modifiez cette constante, il devient possible immédiatement d'activer les plugins déjà installés, mais le cache local des dépôts de plugins n'est pas actualisé en fonction des nouvelles possibilités. Il faut donc supprimer les dépôts déclarés, puis les réinstaller, pour que la recherche retourne l'ensemble des résultats désormais possibles.


jeudi 2 septembre 2021

  • Standard "SPIP41"

    Le standard "SPIP41" est un ensemble de règles utilisable avec l'outil PHP_CodeSniffer.

    Celui-ci embarque les règles de codage SCS1 et vérifie que le code est compatible avec les versions PHP 7.4, 8.0 et 8.1.

    Ce standard est disponible avec l'outil PHP_CodeSniffer dans l'extension de cet outil spip/coding-standards.


  • Standard "SPIP40"

    Le standard "SPIP40" est un ensemble de règles utilisable avec l'outil PHP_CodeSniffer.

    Celui-ci embarque les règles de codage SCS1 et vérifie que le code est compatible avec les versions PHP 7.3, 7.4 et 8.0.

    Ce standard est disponible avec l'outil PHP_CodeSniffer dans l'extension de cet outil spip/coding-standards.


  • Standard "SCS1"

    Les règles de codage s'appuient sur la recommandation PSR-12 sans la respecter entièrement. voir le détail ci-dessous.

    Elles sont techniquement rassemblées dans un ensemble de règles utilisables avec l'outil PHP_CodeSniffer dans l'extension de cet outil spip/coding-standards.

    Fichiers

    • La balise d'ouverture d'un fichier PHP DOIT être <?php. L'ouverture <? est proscrite.
    • L'encodage de caractères des fichiers PHP DOIT être UTF-8 sans BOM.
    • Tous les fichiers PHP DOIVENT utiliser uniquement la fin de ligne Unix LF (linefeed).
    • Tous les fichiers PHP DOIVENT se terminer par une ligne non vide, terminée par un seul LF.
    • La balise de fermeture ?> DOIT être omise des fichiers contenant uniquement du PHP.

    Lignes et indentation

    • Il NE DOIT PAS y avoir de limite stricte sur la longueur de la ligne.
    • La limite souple sur la longueur de ligne DOIT être de 120 caractères.
    • Les lignes NE DEVRAIENT PAS dépasser 80 caractères ; les lignes plus longues DEVRAIENT être divisées en plusieurs lignes suivantes de 80 caractères chacune au maximum.
    • Il NE DOIT PAS y avoir d'espace à la fin des lignes.
    • Des lignes vierges PEUVENT être ajoutées pour améliorer la lisibilité et pour indiquer les blocs de code associés, sauf là où cela est explicitement interdit.
    • Il NE DOIT PAS y avoir plus d'une instruction par ligne.
    • Contrairement à PSR-12, le code DOIT utiliser une tabulation pour chaque niveau de retrait et NE DOIT PAS utiliser d'espaces pour le retrait.

    Fonctions, Classes et Namespaces

    • Dans les versions 4.x et antérieures, SPIP ne suit pas de PSR d'autoloading (ex : PSR-4. En conséquence, SCS1 n'impose aucun formalisme pour les namespaces et les classes, y compris les Traits et les interfaces.
    • Les fonctions DEVRAIENT être déclarées en snake_case.
    • L'accolade ouvrante DOIT être sur la même ligne que le nom de la fonction, et DOIT avoir un espace avant et aucun espace après.
      function ma_fonction() { $ma_variable = 0; // … return $mon_resultat;
      }

    Constantes, Variables et propriétés de classe

    • Les constantes DOIVENT être déclarées en majuscules avec un tiret bas séparateur et préfixées par un tiret bas.
      define('_NOUVELLE_CONSTANTE', true);
    • Les variables et les arguments de fonctions DEVRAIENT être déclarées en snake_case.
      function ma_super_fonction($un_argument, $autre_argument) {}
    • les propriétés de classe PEUVENT être déclarées en snake_case.
    • Les variables globales, dont l'usage est déconseillé, sont référencée par $GLOBALS['xxx'] et non par une déclaration global $xxx, car cela permet d'être certain de la référence qu'on utilise et de facilement faire la différence lors de la lecture du code.
      if (isset($GLOBALS['meta']['adresse_site'])) { $adresse = $GLOBALS['meta']['adresse_site'];
      }

    Mots-clés réservés, Structures de contrôle et opérateurs

    • Tous les mots-clés et types réservés PHP 12 DOIVENT être en minuscules.
    • Tous les nouveaux types et mots-clés ajoutés aux futures versions de PHP DOIVENT être en minuscules.
    • La forme courte des mots-clés de "type", quand ils sont présents, DOIT être utilisée, c'est-à-dire bool au lieu de boolean, int au lieu d'integer, etc.
    • L'accolade ouvrante des structures de contrôle DOIT être sur la même ligne que le nom de la fonction, et DOIT avoir un espace avant et aucun espace après.
    • Dans les expressions PHP, laisser un espace de part et d'autre des opérateurs binaires (+, =, *, and, ...).
      $hypothenuse = sqrt(($a * $a) + ($b * $b));
    • Les opérateurs unaires (!, ...) doivent être collés au paramètre auquel ils s'appliquent.
    • la notation courte DOIT être appliquée sur les tableaux
      $tableau = [ 'cle' => 'valeur', ...
      ];

    Opérations sur les chaines de caractères

    • Utilisez les guillemets doubles uniquement quand cela est nécessaire. Si vous n'avez pas de variable ($var) ou de caractère de contrôle (\n, \r, \t...) à évaluer dans la chaîne, utilisez les guillemets simples.
      $chaine = "\"$url\">Lien\n";
      $chaine2 = 'Une simple phrase : ' . $autre_chose;

vendredi 16 juillet 2021

jeudi 15 juillet 2021

  • _CACHE_PROFONDEUR_STOCKAGE

    La constante _CACHE_PROFONDEUR_STOCKAGE permet de régler le nombre de fichiers utilisés par le cache.

    Par défaut, le cache de SPIP est constitué d'un maximum de 16^4 (65 536) fichiers dans 256 répertoires. Ce réglage est parfait dans 99,9% des cas.

    La constante _CACHE_PROFONDEUR_STOCKAGE permet de débloquer des situations indésirables chez certains hébergements ayant un quota limité sur le nombre d'inodes.

    Cette constante peut prendre une valeur entre 2 et 8 permettant de disposer de 16^2 à 16^8 fichiers cache, répartis en 16^(_CACHE_PROFONDEUR_STOCKAGE/2) répertoires.

    Il est possible de définir cette constante dans votre fichier /config/mes_options.php (voir l'article qui lui est consacré).

    Exemple :

    // réduire la taille du cache de SPIP à maximum 4096 fichiers
    define('_CACHE_PROFONDEUR_STOCKAGE', 3); 

  • _AUTEURS_DELAI_REJET_NOUVEAU

    Cette constante règle le délai après lequel SPIP détruit les comptes de la table spip_auteurs récemment créés mais dont l'internaute n'a jamais validé la demande de création.

    Ce délai est exprimé en secondes. Par défaut, il vaut 45 jours.

    Exemple : define('_AUTEURS_DELAI_REJET_NOUVEAU', 7 * 24 * 3600); assurera que les comptes récemment créés mais non authentifiés soient détruits après un délai d'une semaine seulement.


  • $GLOBALS['medias_liste_champs']

    La variable globale $GLOBALS['medias_liste_champs'] contient l'ensemble des champs testés par SPIP pour déterminer le statut "vu" ou non d'un document dans un article, pour le critère {vu}. Si, pour un article donné, le document est inclu dans l'un de ces champs, alors il est considéré comme "vu" dans cet article. Dans ce cas, il est présenté dans la partie privée avec une icone "œuil" et il fera partie des résultats d'une boucle avec le criture {vu=oui}

    Par défaut, seuls les champs TEXTE et CHAPO sont testés. Il est possible d'en ajouter d'autres.

    Exemple dans votre fichier d'options (voir l'article qui lui est consacré) :

    // Ajouter le PS aux champs scruptés pour définir le statut "vu" $GLOBALS['medias_liste_champs'][] = 'ps';

  • |commuter_class

    Disponible depuis SPIP 4.0, le filtre |commuter_class compare les classes fournies aux classes présentes dans une balise HTML. Le filtre retire les classes déjà présentes et il ajoute les classes qui n'existaient pas.

    Exemple

    1. #LOGO_RUBRIQUE

    Produit le HTML suivant :

    <img
    	src="IMG/logo/essai-1.jpg?1614197741"
    	class="spip_logo"
    	width="800"
    	height="600"
    	alt=""/>

    Appliquons le filtre |commuter_class avec l'argument 'nav spip_logo menu' :

    1. [(#LOGO_RUBRIQUE|commuter_class{nav spip_logo menu})]

    Les classes 'nav' et 'menu', absentes, sont ajoutées, et la classe 'spip_logo', déjà présente, est supprimée.
    On obtient :

    <img
    	src="IMG/logo/essai-1.jpg?1614197741" class='nav menu'
    	width="800"
    	height="600"
    	alt=""/>

    Voir aussi


mercredi 14 juillet 2021

  • _SERVEUR_SOFTWARE_ACCEPTE_LOCATION_APRES_COOKIE

    Cette constante sert à détecter si le serveur accepte une redirection par header("location: $url") après dépose d'un cookie. Elle contient l'expression régulière qui doit être employée pour tester la valeur de la variable $_SERVER['SERVER_SOFTWARE'].

    Dans le cas contraire, c'est un header("Refresh: 0; url=$url"); qui sera employé.

    Par défaut elle vaut "^(Apache|Cherokee|nginx)"

    Voir aussi _SERVEUR_SIGNATURE_ACCEPTE_LOCATION_APRES_COOKIE.


samedi 10 juillet 2021

  • _COMPORTEMENT_HISTORIQUE_PORTFOLIO

    Avec SPIP 4.0, la gestion des images a subi de grosses évolutions : la notion de portfolio disparaît totalement. Définir la constante _COMPORTEMENT_HISTORIQUE_PORTFOLIO permet de retrouver le fonctionnement historique du portfolio :

    define ('_COMPORTEMENT_HISTORIQUE_PORTFOLIO', true);

    Remarque : le plugin historique_spip32_documents permet d'activer cette constante ainsi que la constante _COMPORTEMENT_HISTORIQUE_IMG_DOC_EMB, et définit les styles CSS utiles et qui ne sont plus associés à SPIP 4.0.


  • _COMPORTEMENT_HISTORIQUE_IMG_DOC_EMB

    Avec SPIP 4.0, la gestion des images a subi de grosses évolutions : les modèles et disparaissent au profit du seul modèle . Définir la constante _COMPORTEMENT_HISTORIQUE_IMG_DOC_EMB permet de retrouver le fonctionnement historique de tous ces modèles :

    define ('_COMPORTEMENT_HISTORIQUE_IMG_DOC_EMB', true);

    Le plugin historique_spip32_documents permet d'activer cette constante ainsi que la constante _COMPORTEMENT_HISTORIQUE_PORTFOLIO, et définit les styles CSS utiles et qui ne sont plus associés avec SPIP 4.0.


vendredi 9 juillet 2021

  • _PAGINATION_NOMBRE_LIENS_MAX_ECRIRE

    Depuis SPIP 4.0, la constante _PAGINATION_NOMBRE_LIENS_MAX_ECRIRE permet de définir le nombre maximum de liens de pagination affichés par défaut dans les modèles de pagination de l'espace privé.

    Elle n'est utilisée que si le paramètre nombre_liens_max n'est pas passé a la balise #PAGINATION

    Voir aussi la constante _PAGINATION_NOMBRE_LIENS_MAX qui permet de définir ce même nombre pour les paginations de l'espace public.


  • _PAGINATION_NOMBRE_LIENS_MAX

    Depuis SPIP 4.0, la constante _PAGINATION_NOMBRE_LIENS_MAX permet de définir le nombre maximum de liens de pagination affichés par défaut dans les modèles de pagination.

    Elle n'est utilisée que si le paramètre nombre_liens_max n'est pas passé a la balise #PAGINATION

    Voir aussi la constante _PAGINATION_NOMBRE_LIENS_MAX_ECRIRE qui permet de définir ce même nombre pour les paginations de l'espace privé.

    Exemple :

    // Limiter le nombre de liens de pagination à 6 items define('_PAGINATION_NOMBRE_LIENS_MAX', 6);

  • {fusion_supprimer}

    {fusion_supprimer} : ce critère supprime de la requête sql la condition GROUP BY qui y est présente à cette étape de la compilation. Ce peut être utile pour s'affranchir d'un GROUP BY ajouté par défaut par le compilateur SPIP lors d'une jointure et qui interfère. Il est ensuite possible d'y ajouter le critère d'une fusion désirée (cf #3209)

    Exemple

    Dans la boucle suivante il est nécessaire d'ajouter {fusion_supprimer} pour obtenir la fusion sur les dates, car par défaut le compilateur ajoute ajoute automatiquement un GOUP BY id_article pour la jointure de la table ARTICLES avec la table MOTS :

    span>(ARTICLES){id_mot=27}{fusion_supprimer}{fusion YEAR(date)}> [(#DATE|annee)]

    Ce critère était précédemment défini par le plugin SPIP-Bonux, et a été intégré à SPIP 4.0.


  • |supprimer_class

    Disponible depuis SPIP 4.0, le filtre |supprimer_class supprime une classe ou plusieurs classes à une balise HTML.

    Exemple

    1. #LOGO_RUBRIQUE

    Produit le HTML suivant :

    <img
    	src="IMG/logo/essai-1.jpg?1614197741"
    	class="spip_logo"
    	width="800"
    	height="600"
    	alt=""/>

    Si on applique le filtre |supprimer_class

    1. [(#LOGO_RUBRIQUE|supprimer_class{spip_logo})]

    On obtient :

    <img
    	src="IMG/logo/essai-1.jpg?1614197741"
    	width="800"
    	height="600"
    	alt=""/>

    Voir aussi


  • |ajouter_class

    Disponible depuis SPIP 4.0, le filtre |ajouter_class ajoute une classe ou plusieurs classes à une balise HTML.

    Exemple

    [(#CHEMIN{img/logo.svg)|balise_img|ajouter_class{nav logo-site})]

    Cherche le fichier img/logo.svg et génère la balise d'image avec les classes nav et logo-site.

    Ce qui produit le HTML suivant :

    <img src='squelettes/img/logo.svg?1579179279' alt='' width='200' height='200' class=' nav logo-site' />

    Voir aussi


  • identifiant_slug

    Cette fonction permet de transformer un texte clair en nom court pouvant servir d'identifiant, de classe CSS, d'id HTML ou d'url.

    Pour cela, elle enlève les accents, ne conserve que les caractères alphanumériques, supprime les autres caractères et les remplace par un séparateur '_' par défaut, sauf au début et à la fin.

    Exemple : [(#VAL{Hé ! L'été approche !}|identifiant_slug)] renvoie he_l_ete_approche.

    Le filtre accepte 2 arguments optionnels :

    - un type : si ce type est 'id', 'class' ou 'anchor', la chaîne est préfixée dans le cas où elle commence par un numérique, afin de générer une chaîne valide pour l'utiliser dans cet attributs HTML.

    - un tableau d'options qui accepte 3 clés possibles :

    • separateur : le caractère séparateur
    • longueur_maxi : la longueur maximum de la chaîne renvoyée.
    • longueur_mini : la longueur minimum de la chaîne renvoyée. Si celle-ci est trop courte, la chaîne est complétée jusqu'à la longueur minimum par des caractères du md5 de la chaîne reçue. L'objectif est que la chaîne renvoyée soit unique.

    Exemple :

    [id="(#TITRE|identifiant_slug{id,#ARRAY{longueur_maxi,10}})"]> #TEXTE

  • {par_ordre_liste...}

    Le critère {par_ordre_liste champ, #LISTE{...}} permet d'ordonner explicitement les résultats d'une boucle de manière à ce que la valeur de champ suive l'ordre du tableau passé en 2eme paramètre.

    Dans les boucles les plus simples, le résultat est le même que si on utilise un {champ IN ...} ; mais avec le critère IN, l'ordre spécifié par la liste n'est pas pris en compte s'il y a un autre critère de tri ou une jointure.

    Par ailleurs
    - le critère {par_ordre_liste ...} permet de séparer la sélection du classement ;
    - on peut le combiner avec d'autres critères {par...} dans l'ordre que l'on veut.

    Existe à partir de SPIP 4.0.0


  • {id_ ?}

    Le critère {id_?} permet de faire toutes les jointures possibles avec des variables d'environnement. Il se comporte donc comme autant de critères {id_xxx ?} que possible pour la boucle donnée.

    Par exemple, la boucle ... sera comprise comme ..., variant selon les liaisons possibles, et donc selon les plugins actifs. L'écriture est donc nettement plus concise.

    Pour une boucle sur une table donnée, les liaisons créées prennent en compte :
    - la table de liaison si elle existe (par exemple spip_mots_liens pour spip_mots)
    - les champs objets,id_objet sinon (par exemple pour spip_forum).

    Clés objet,id_objet

    Sur une table disposant des champs objet et id_objet (comme spip_forum), à la fois le critère {objet?} et le critère {id_objet?} seront appliqués.

    Installation et désinstallation de plugins

    Le critère {id_?} permet d'écrire des boucles identiques quelques soient les plugins actifs. En effet, certains plugins créent des tables et permettent des jointures conditionnelles supplémentaires sur ces tables , mais si on intègre ces jointures dans une boucle en utilisant l'identifiant de cette table {id_latable?}, la désinstallation de ce plugin provoquera une erreur de compilation. Avec le critère {id_?}, les jointures se font automatiquement et sans erreur quels que soient les plugins installés ou non.

    Voir aussi
    - critère ?
    - La syntaxe des boucles


  • SPIP 4.0

    Interface

    Espace privé relooké

    Un gros travail d'ergonomie a été initié pour rendre à terme l'espace privé adaptatif sur toutes les tailles d'écrans afin d'en faciliter l'usage.

    L'espace privé s'adapte mieux à la largeur de l'écran, et commence à utiliser différentes variables CSS pour faciliter sa maintenance.

    Aperçu de l'espace privé de SPIP 4.0
    L'espace privé de SPIP 4.0 dans le site SPIP Contrib.
    Vue d'un article (avec la couleur grise)
    Édition d'un article (avec la couleur grise)

    Un écran de connexion (login) élégant

    La page de connexion par défaut (login.html) est toute re-stylée, teintée du rose SPIP en fond.

    Écran de connexion par défaut à SPIP 4.0
    L'écran de connexion sur le site SPIP.net.

    Et si le rose vous surprend, pas de panique ! Un nouveau formulaire dans la configuration de l'identité du site existe. Il permet de choisir la couleur qu'on veut. Et mieux : il permet même de déposer une magnifique image de fond.

    Écran de connexion avec une image, dans SPIP 4.0

    Iconographie en SVG

    Une grande partie des icones et illustrations dans l'espace privé de SPIP et ses plugins sont passés en SVG.

    • Tickets #4468 et #4562 : Harmonisation dans l'espace privé du HTML & CSS des boutons
    • Nouveau jeu d'icône basé sur le thème Numix (en SVG) pour les types de document de la médiathèque

    Documents & Logos

    Un gros travail a été fait sur les documents et logos :

    • Les logos des articles et autres objets éditoriaux sont stockés comme les documents (dans spip_documents en base de données, et dans IMG/logo/ sur le disque en conservant le nom du fichier). Une phase de migration déplace les logos à leur nouvel emplacement sur le disque.
    • Les logos, documents images et filtres d'images acceptent et gèrent le format SVG
    • Le filtre balise_img permet de gérer des fichiers SVG et de déclarer leur taille
    • Le nouveau filtre balise_svg permet d'intégrer le code source d'un fichier d'image SVG dans le code html directement. Peut être pratique par exemple pour les petites icônes.
    • Les documents / logos peuvent être téléversés par drag'n'drop, quelque soit leurs tailles (intégration du plugin BigUp en plugins-dist, amélioré pour l'occasion). La taille maximum autorisée est configurable.
    • Les modèles de documents (, , ...) sont revus et simplifiés et utilisent la balise
      . Commit fa13018a. Attention : Les modèles doc.html, img.html et emb.html ne sont plus utilisés (et donc toute ancienne surcharge de ces fichiers dans des plugins ou squelettes ne sera plus utilisée). À la place, on utilise les modèles image.html, audio.html, video.html et file.html, correspondant au type de document. Le mode de document n'est plus pris en compte pour le calcul du modèle.
    • Possibilité de décliner les fichiers HTML des modèles de document par type de fichier (mime type) détaillé : file_text_csv.html ou principal : file_text.html ; ou par extension : video_mp4.html. En conséquence vos variantes personnalisées doc_[variante].html correspondant au raccourci ne fonctionneront plus et sont à décliner : image_[variante].html, video_[variante].html, etc.
    • L'écriture des raccourcis SPIP des modèles de documents , ou devient équivalente. L'écriture recommandée est (où XX est le numéro du document).
    • La notion de Portfolio et de mode document / image sur les documents disparaît. Commit 9cf774b9. La constante _COMPORTEMENT_HISTORIQUE_PORTFOLIO déclarée à true permet de rétablir l'ancien fonctionnement.

    Compatibilité PHP

    Limitation de la compatibilité de SPIP 4.0 avec PHP de 7.3 à 8.0. De nombreuses notices, dépréciations ont été aussi corrigées. À noter que SPIP 3.2 sera donc la dernière version de SPIP à être compatible avec PHP 5.

    Base de données

    SPIP 4.0 fonctionne avec Mysql ou Sqlite. Il peut mettre à jour une base issue d'un SPIP >= 2.0.0.

    Pour une mise à jour d'un SPIP antérieur, une étape de migration en SPIP 3.2 sera nécessaire.

    Syntaxe des squelettes étendue

    Ajout du support des boucles anonymes :

    Marre du fichage ? une boucle anonyme n'a pas besoin de préciser son nom !
    Un identifiant lui sera automatiquement attribué en interne.

    [(#REM) Une boucle nommée ]
     
      span>(ARTICLES){id_article}{0,5}>
    • #TITRE
    [(#REM) Une boucle anonyme ]
     
      {id_article}{0,5}>
    • #TITRE

    Et si vous êtes ambitieux, vous pouvez en mettre autant que vous le souhaitez dans un squelette, et même les imbriquer ! Mais bon, pensez à vos successeurs pour ne pas rendre le code trop anonyme à ne plus pouvoir s'y retrouver :)

     
    

    Ajout des parties non conditionnelles de boucles, avant et après

    Une syntaxe pour des parties non conditionnelles aux boucles est ajoutée : ce contenu sera toujours affiché, qu'il y ait un résultat ou pas, tout en permettant d'utiliser les balises propre à la boucle (#TOTAL_BOUCLE, #TRI, etc).

    Cette syntaxe sert particulièrement pour les tableaux d'éléments avec des tris et filtrages. Si la boucle ne retourne pas d'éléments, on souhaite toujours afficher les filtres (pour les décocher / les modifier).

    [(#REM) Une partie non conditionnelle avant / après la boucle ]
     [(#REM) cette partie est affichée même si la boucle ne retourne pas d'articles ] 

    Les articles

    Nombre : #TOTAL_BOUCLE
    span>(ARTICLES){id_article?}{id_rubrique?}{!par date}{0,5}{', '}> #URL_ARTICLE">#TITRE [(#REM) cette partie est affichée même si la boucle ne retourne pas d'articles ]

    Cela complète les parties conditionnelles des boucles avant et après qui elles s'affichent uniquement si la boucle a au moins un résultat.

    [(#REM) Une partie conditionnelle avant / après la boucle ]
     [(#REM) cette partie n'est affichée que si la boucle retourne des articles ] 

    Les articles

    Nombre : #TOTAL_BOUCLE
    span>(ARTICLES){id_article}{id_article?}{id_rubrique?}{!par date}{0,5}{', '}> #URL_ARTICLE">#TITRE [(#REM) cette partie n'est affichée que si la boucle retourne des articles ]

    Aucun article

    /B_conditionnel>

    La partie non conditionnelle des boucles peut se coupler avec la partie conditionnelle : dans se cas elle encadre la partie conditionnelle.

    [(#REM) Mix non conditionnel / conditionnel avant / après ]
    
    

    Les articles

      span>(ARTICLES){id_article}{id_article}{!par date}{0,5}{', '}>
    • #TITRE

    Ajout du support des boucles dans la partie conditionnelle des balises

    Oui ! On peut maintenant mettre des boucles dans des balises !
    Si si ! Dans les parties conditionnelles des balises.

    Quelques exemples :

    [(#BALISE) {0,1}>#TITRE ] [{0,1}>#TITRE (#BALISE)] [(#ENV{documents}|oui)
     
      span>(DOCUMENTS){id_article}{par num titre, titre}{mode=document}>
    • #URL_DOCUMENT
    • "> [(#TITRE|sinon{Document n°#ID_DOCUMENT})] \(#EXTENSION\)
        ]

    Changements et apports pour les squelettes

    Les balises #PAGINATION nécessitent un changement de syntaxe et d'arguments.

    Le changement porte 1) sur la balise englobante, qui doit être nav 2) sur les arguments.

    1) La balise englobante doit désormais être


    [1] Sur les installation existantes, ce n'est le cas que si elles nétaient pas utilisées auparavant


mardi 22 juin 2021

  • _IMG_GD_MAX_PIXELS

    Si vous avez choisi en configuration avancée d'utiliser la librairie GD pour le traitement des images, cette constante définit la taille maximale des images en pixels [1].

    Il peut être utile de limiter cette taille car une image avec une définition trop importante peut faire planter le site si le serveur n'a pas assez de mémoire disponible pour traiter cette image.

    Il faut néanmoins rappeler que :

    • SPIP fait de son mieux pour détecter automatiquement la taille maximum des images manipulables dans GD2, et indique la valeur trouvée quand on est sur la page de configuration avancée du réducteur, si on choisit le mode GD2. Dans le cas général, cette détection permet un fonctionnement optimum, et il n'est pas utile de définir la constante.
    • la constante existe tout de même pour le cas où, pour des raisons techniques, cette détection serait erronée ou surestimée. Elle permet alors au webmestre qui connaît les contraintes du serveur de forcer une valeur plus sûre.

    Cette constante est à définir dans votre fichier config/mes_options.php (voir l'article qui lui est consacré)

    Exemple :

    // Définir la définition maximale des images téléversées define('_IMG_GD_MAX_PIXELS', 2000000);

    Valeur par défaut : 0

    Lorsque cette constante est définie à 0 (zéro), SPIP n'effectue pas de vérification lors de l'upload d'un document.

    Voir aussi :
    - _IMG_MAX_WIDTH et _IMG_MAX_HEIGHT qui limitent les largeur et hauteur en pixels
    - _IMG_MAX_SIZE qui limite le poids en kilo-octets


    [1] de par le fonctionnement des formulaires d'upload, le fichier image sera quand même envoyé sur le serveur. Ce n'est qu'une fois « uploadé » que SPIP vérifiera la conformité de ce fichier avec la constante.


  • _MAX_LOG

    La constante _MAX_LOG définit le nombre d'entrées que chaque appel d'une page peut écrire dans un fichier de log. La valeur par défaut est de 100. Ainsi, après 100 appels de spip_log() par un même script, cette fonction ne log plus.

    Il est possible de personnaliser la valeur de cette constante dans votre fichier config/mes_options.php (voir l'article qui lui est consacré).

    Exemple :

    // Augmenter le nombre maximum de logs par hit define('_MAX_LOG', 500);

  • #LOGO_RUBRIQUE_SURVOL

    Cette balise affiche le logo de survol de la rubrique.

    Dans un squelette, elle s'utilise comme la balise #LOGO_RUBRIQUE :

    [(#LOGO_RUBRIQUE_SURVOL{left})]

  • #LOGO_ARTICLE_SURVOL

    Cette balise affiche le logo de survol de l'article.

    Dans un squelette, elle s'utilise comme la balise #LOGO_ARTICLE :

    [(#LOGO_ARTICLE_SURVOL|alignement)]

  • #LOGO_RUBRIQUE_NORMAL

    Cette balise affiche le logo de la rubrique, sans survol.

    Dans un squelette, elle s'utilise comme la balise #LOGO_RUBRIQUE :

    [(#LOGO_RUBRIQUE_NORMAL|alignement)]

  • #LOGO_ARTICLE_NORMAL

    Cette balise affiche le logo de l'article, sans survol.

    Dans un squelette, elle s'utilise comme la balise #LOGO_ARTICLE :

    [(#LOGO_ARTICLE_NORMAL|alignement)]

samedi 5 juin 2021

  • Branches en fin de vie

    Cette page répertorie la date de fin de vie de chaque branche non prise en charge de SPIP. Si vous utilisez ces versions, il vous est fortement conseillé de passer à une version actuelle, car l'utilisation d'anciennes versions peut vous exposer à des vulnérabilités de sécurité et des bogues qui ont été corrigés dans des versions plus récentes de SPIP.


    Branche Fin de vie Dernière publication
    3.0 30 juin 2019 3.0.28
    2.1 17 octobre 2017 2.1.30
    2.0 6 janvier 2016 2.0.26
    1.9 12 mai 2012 1.9.2+p
    1.8 9 avril 2010 1.8.3+b
    1.7 1er avril 2005 1.7.2
    1.6 3 janvier 2004 1.6.0
    1.5 26 mai 2003 1.5.2
    1.4 14 décembre 2002 1.4.2
    1.3 12 septembre 2002 1.3.1
    1.2 12 septembre 2002 1.2.1
    1.0 12 octobre 2001 1.0.6

dimanche 16 mai 2021

  • Notes de publication

    Nous avons rassemblé toutes les informations officielles et le code disponible pour les versions précédentes de SPIP. Vous pouvez trouver plus de détails sur la version actuelle sur notre page de téléchargement. Veuillez noter que les versions plus anciennes sont répertoriées à des fins d'archivage uniquement et qu'elles ne sont plus prises en charge.

    4.0.0

    3.2.11

    3.2.10

    3.1.15

    3.2.9

    3.1.14

    3.1.13

    • Publiée le : 29 septembre 2020
    • Téléchargement :

    3.2.8

    3.2.7

    3.1.12


mercredi 14 avril 2021

  • _AUTO_SELECTION_RUBRIQUE

    La constante _AUTO_SELECTION_RUBRIQUE, lorsqu'elle est définie, permet à un⋅e internaute de créer un objet SPIP, en particulier un article, sans indiquer sa rubrique. Dans ce cas, une rubrique lui est automatiquement attribuée.

    Exemple : define('_AUTO_SELECTION_RUBRIQUE', true); dans le fichier mes_options.php.

    La rubrique est choisie en fonction des critères suivants :

    • si l'auteur est administrateur restreint, c'est sa rubrique (ou la première des rubriques sur lesquelles il a autorité)
    • si la valeur de la constante n'est pas true, mais un entier, cet entier est le numéro de la rubrique retenue (depuis SPIP 3.3)
    • sinon c'est la dernière rubrique créée qui est choisie, si l'auteur a le droit d'y publier.
    • sinon c'est l'un des secteurs autorisés.

    Il est aussi possible de définir sa propre heuristique en surchargeant la fonction inc_preselectionner_parent_nouvel_objet().


  • #PAGINATION

    La balise #PAGINATION placée dans une des parties optionnelles (« avant » ou « après ») d'une boucle ayant un critère {pagination}, affiche les liens de « pagination ».

    Voir Le système de pagination.


jeudi 11 mars 2021

  • heures_minutes

    Le filtre |heures_minutes s'applique sur une date et renvoie l'heure et les minutes.

    [(#DATE|heures_minutes)] affichera par exemple 17h26min

    À partir de SPIP 3.3, le filtre accepte en argument optionnel "abbr" lorsqu'on ne souhaite pas indiquer l'unité des minutes.

    [(#DATE|heures_minutes{abbr})] affichera ainsi, par exemple : 17h26


mercredi 10 mars 2021

  • rang_lien

    Dans une boucle DOCUMENTS, le critère rang_lien permet d'ordonner les documents liés selon leur rang.

    Depuis SPIP 3.2 il est possible d'ordonner les documents liés à un objet par simple glisser/déposer.

    Par défaut, aucun ordre n'est défini. Il devient défini dès qu'on a déplacé un document. Dès qu'un ordre est défini , un bouton “Réinitialiser l'ordre” est affiché en bas du tableau de documents et/ou illustrations liés.

    Pour afficher les éléments d'une boucle DOCUMENTS dans l'ordre ainsi défini, il faut utiliser le critère {par rang_lien}, comme dans l'exemple ci-dessous :

    span>(DOCUMENTS){id_article}{par rang_lien, num titre, titre}> [(#LOGO_DOCUMENT|image_reduire{200})]
    

    Techniquement, l'ordre est enregistré dans un champ rang_lien de la table spip_documents_liens.

    Voir aussi


jeudi 4 mars 2021

  • _NB_SESSIONS_MAX

    Cette constante permet de limiter le nombre de sessions maximum d'un auteur. S'il y a plus de sessions que le seuil défini par la constante _NB_SESSIONS_MAX les plus anciennes sessions sont supprimées.

    La valeur par défaut est de 100 et il est possible de personnaliser celle-ci dans votre fichier config/mes_options.php (voir l'article qui lui est consacré).

    Exemple :

    // Limiter le nombre de sessions ouvertes pour un auteur à 10
    define('_NB_SESSIONS_MAX',10);

    Voir aussi _MAX_NB_SESSIONS_OUVERTES.


mercredi 24 février 2021

  • |picker_selected

    Ce filtre, initialement proposé par le plugin Bonux puis intégré au noyau avec SPIP 3.0.17 s'applique :

    • soit sur un tableau d'entrées dont chacune des valeurs est de la forme type_objet|id_objet . Par exemple : array("rubrique|9", "article|8").
    • soit sur une chaine de la forme rubrique|9,article|8,...

    Il retourne un tableau de couples (objet => id_objet).

    Si on lui fournit un argument type, le tableau résultat est restreint aux objets de ce type.

    Exemples

    Après #SET{liste, #LISTE{article|1,article|2,rubrique|5}}

    [(#GET{liste}|picker_selected)] renvoie le tableau array('article' => 1, 'article' => 2, 'rubrique' => 5)

    et [(#GET{liste}|picker_selected{article})] renvoie le tableau array('article' => 1, 'article' => 2) qui ne contient que les articles.

    Usage

    Le format rubrique|9,article|8,... est celui fourni par les saisies de type sélecteur générique.

    Exemple : Si dans un plugin, le formulaire de configuration propose un sélecteur de rubriques nommé "accueil", on peut récupérer la sélection dans le squelette avec :
    {id_rubrique IN #CONFIG{monplugin/accueil}|picker_selected{rubrique}}


  • |image_aplatir

    Supprimer la transparence et forcer le format de l'image

    La fonction image_aplatir réalise deux opérations :

    • elle sauvegarde une image dans un format prédéfini (par exemple, transformer une image PNG en une image GIF) ;
    • elle supprime les informations de transparence, et remplace les zones transparentes par une couleur.

    Par exemple :

    [(#TITRE |image_typo{police=stencil.ttf,couleur=000000,taille=40} |image_aplatir{gif,ff0000})]

    Le titre transformé en image typographique est un fichier PNG avec des zones transparentes. En passant cette image par le filtre image_aplatir, on la transforme en GIF, en remplaçant les zones transparentes par du rouge (ff0000).

    La fonction accepte en paramètres, dans l'ordre : le format (gif, jpg ou png), la couleur de fond, mais aussi la qualité de compression (32, 64, ou 128 pour les gif et de 0 à 100 pour les jpg) et l'opacité (0 ou 1). Par exemple : |image_aplatir{gif,ffffff,128,1} convertira l'image en GIF de bonne qualité en forçant la transparence du fond.


mercredi 10 février 2021

  • |==={a}

    Le filtre |==={valeur} permet de vérifier si l'élément filtré est identique à la valeur, c'est à dire de même valeur et de même type PHP.

    À la différence du filtre |=={valeur}, le type des 2 éléments est testé : ce pourra être utile lorsque les valeurs comparées sont potentiellement égales selon '==' mais de type différent. Par exemple, le booléen false et la chaine vide.


    voir aussi le filtre |=={a}


  • | !=={a}

    Le filtre |!=={valeur} permet de vérifier si l'élément filtré n'est pas identique à la valeur, c'est à dire qu'il est de valeur différente ou de type PHP différent.

    À la différence du filtre |!={valeur}, le type des 2 éléments est testé : ce pourra être utile lorsque les valeurs comparées sont potentiellement égales selon '==' mais de type différent. Par exemple, le booléen false et la chaine vide.


    voir aussi le filtre |!={a}


Traduction

Sites favoris


127 sites référencés au total

Brèves

30 mai 2014 - Sur Facebook : Lac de Créteil - 94000 - Val de Marne -...

Lac de Créteil - 94000 - Val de Marne - France

24 février 2014 - Nous contacter

Pour nous contacter, cliquez sur l’enveloppe.http://laccreteil.fr/spip.php?page=...