Créer des champs extras depuis un plugin perso avec l’aide de Saisies

Nécessites

Pour ce faire, il faut installer 3 plugins :

  • Champs Extras 3 pour gérer les champs en base
  • Saisies pour gérer les saisies (interface avec la base)
  • Vérifier pour vérifier les infos saisies avant de les rentrer en base

Créer la fonction qui va déclarer les nouveaux champs

Dans un fichier base/prefixe.php

<?php
 
if (!defined("_ECRIRE_INC_VERSION")) return;
 
function prefixe_declarer_champs_extras($champs = array()) {
 
    // SAISIE DATE
    $champs['spip_articles']['date_emission'] = array(
        // Le type de saisie
        'saisie' => 'date',
        'options' => array(
            // Le nom du champs dans la base
            'nom' => 'date_nom', 
            // Le label
            'label' => _T('prefixe:chaine_de_langue'),
            // Le type d'info attendue
            'sql' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
            // Valeur par défaut
            'defaut' => '',
            // Champ obligatoire
            'obligatoire' => 'oui',
            // Champ restreint à un objet (secteur, rubrique, article...)
            'restrictions'=>array('secteur' => '1'),
       ),
        // Vérifier les infos saisies
        'verifier' => array(
            'type' => 'date',
            'options' => array(
                'normaliser' => 'datetime',
            )
        )
	);
    // SAISIE TEXTE AREA
    $champs['spip_rubriques']['infos_textarea'] = array(
        'saisie' => 'textarea',
        'options' => array(
            'nom' => 'infos_textarea',
            'label' => _T('prefix:chaine_de_langue'), 
            'sql' => "text DEFAULT '' NOT NULL",
            'defaut' => '',
            'traitements' => '_TRAITEMENT_RACCOURCIS',
            'rows' => 10,
            'inserer_barre' => 'forum',
            'explication' => _T('prefix:chaine_de_langue'),
            'restrictions'=>array(
                'branche' => '1'
            ),
        )
    );
    return $champs;	
}

Exemple sur Radio U https://gitlab.com/jmoupah/radiou/-...

Indiquer au plugin de mettre à jour la base

Dans un fichier prefixe_administrations.php

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
 
include_spip('inc/cextras');
include_spip('base/prefixe');
 
function prefixe_upgrade($nom_meta_base_version,$version_cible) {
 
	$maj = array();
	// Création des champs à l'installation du plugin
	cextras_api_upgrade(prefixe_declarer_champs_extras(), $maj['create']);
 
	// Mise à jour une fois le plugin installé
	cextras_api_upgrade(prefixe_declarer_champs_extras(), $maj['0.1.1']);
 
	include_spip('base/upgrade');
	maj_plugin($nom_meta_base_version, $version_cible, $maj);
 
}
 
function prefixe_vider_tables($nom_meta_base_version) {
	cextras_api_vider_tables(prefixe_declarer_champs_extras());
	effacer_meta($nom_meta_base_version);
}

Indiquer que le plugin doit mettre à jour la base

Dans le fichier paquet.xml

Ajouter schema="0.1.0" dans la balise puis monter d’une version que chaque changement soit pris en compte.

Déclarer le pipeline champs extras

	<pipeline nom="declarer_champs_extras" inclure="base/prefixe.php" />

Liens