Champs Extras — API et créations

Dans ce document vous trouverez expliquées les API disponibles dans le plugin « Champs Extras » ainsi que les manières de les utiliser pour créer un plugin ajoutant des champs extras (via ces API donc).

Le plugin « Champs Extras Interface », entre autres, s’appuie sur ces API et offre une interface graphique pour gérer ces champs.

La documentation est valable à partir de la version 3.0.0 du plugin.

API d’autorisation / restrictions des champs extras

Comme dans la version précédente, il est possible de restreindre l’usage de champs extras à certains secteurs ou rubriques. La fonction d’API restreindre_extras est identique, cependant, les noms des fonctions d’autorisations sous-jacentes ont, eux, évolué.

La fonction restreindre_extras facilite les restrictions des champs, c’est à dire des restrictions d’affichages définies en fonction de la rubrique à laquelle ces champs appartiennent. Ces fonctions sont à placer dans le fichier squelettes/mes_fonctions.php. Leur rôle est de créer « à la volée » les fonctions d’autorisations adéquates (elles sont décrites plus loin).

Pour leur bon fonctionnement, il est nécessaire de charger la librairie inc/cextras_autoriser.

Les arguments de cette fonction sont :

  1. objet incriminé (article, rubrique, mot, site...)
  2. nom du/des champ(s) extras
  3. identifiants de restriction (par défaut des rubriques)
  4. cible (par défaut ’rubrique’, mais peut aussi être ’secteur’ ou ’groupe’)
  5. recursif (false par défaut) (applique t-on aux éléments enfants ?)

Un exemple de fichier d’autorisation et diverses autorisations :

<?php
include_spip('inc/cextras_autoriser');

// restreindre le champ 'gamma' des articles, sur la rubrique 2
restreindre_extras('article', 'gamma', 2);
// restreindre le champ 'alpha' et 'beta' des articles, sur les rubriques 2 et 3
restreindre_extras('article', array('alpha', 'beta'), array(2, 3));
// restreindre le champ 'iota' des rubriques, sur la rubrique 37
restreindre_extras('rubrique', 'iota', 37);
// restreindre le champ 'iota' des rubriques, sur la rubrique 37 et ses sous rubriques
restreindre_extras('rubrique', 'iota', 37, 'rubrique', true);
// restreindre les champs 'alpha' et 'beta' des articles, sur les rubriques 37 et 38 et leurs enfants
restreindre_extras('article', array('alpha', 'beta'), array(37, 38), 'rubrique', true);
// lorsqu'on veut appliquer sur un secteur, préférer 'secteur' plutôt que rubriques récursives. Pour restreindre au secteur 2 :
 restreindre_extras('article', 'beta', 2, 'secteur');

?>

Un argument supplémentaire permet donc de définir la fonction qui fera la recherche de validité, et vaut par défaut ’rubrique’, ce qui charge la fonction inc_restreindre_extras_objet_sur_{rubrique}_dist. Le plugin supporte aussi secteur et groupemot :

// restreindre les champs 'motin' et 'moteur' des mots, sur le groupe 2
restreindre_extras('mot', array('motin',  'moteur'), 3, 'groupemot');

Depuis la version 3.3.0, il est aussi possible de restreindre les champs extras en fonction de la composition de l’objet, ex :

// restreindre le champ 'loisirs' sur les articles qui portent la composition 'cv'
restreindre_extras('article', 'loisirs', 'cv', 'composition');

Depuis la version 3.7.0, il est aussi possible de restreindre les champs extras en fonction d’un mot clé lié à l’objet, ex :

// restreindre le champ 'loisirs' sur les articles qui portent un des mots clés n°9 ou 10
restreindre_extras('article', 'loisirs', array(9, 10), 'mot');

Notes :

  • Par souci d’optimisation (moins de requêtes SQL), il est préférable de regrouper en un seul appel au lieu de plusieurs lorsque c’est possible,
  • Il n’est pas possible de définir deux restrictions différentes pour un même champ extra.
    // impossible (seul le 1er est pris en compte) :
    restreindre_extras('article', 'c1', 1);
    restreindre_extras('article', 'c1', 2);
    // Utiliser :
    restreindre_extras('article', 'c1', array(1, 2));
    
    // Mais grouper les champs dés que c'est possible (mêmes identifiants d'application). Si :
    restreindre_extras('article', 'c1', array(1, 2));
    restreindre_extras('article', 'c2', array(1, 2));
    // Préférer :
    restreindre_extras('article', array('c1', 'c2'), array(1, 2));

Fonctions d’autorisations précises

Certains cas sont bien plus complexes et peuvent nécessiter que vous créiez vous-même les fonctions d’autorisations avec leurs actions qui vont bien. Ces fonctions doivent être nommées (le _dist n’est pas obligatoire) :

  • autoriser_{objet}_voirextra_{champ}_dist
  • autoriser_{objet}_modifierextra_{champ}_dist

Cela peut donner une fonction (table auteurs, champ prenom) :

  • autoriser_auteur_voirextra_prenom_dist
  • autoriser_auteur_modifierextra_prenom_dist

Un exemple de code simple pourrait être :

// seuls les rédacteurs et admins peuvent voir
function autoriser_auteur_voirextra_prenom_dist($faire, $type, $id, $qui, $opt) {
    return in_array($qui['statut'], array('0minirezo', '1comite'));
}
// seuls les admins peuvent modifier
function autoriser_auteur_modifierextra_prenom_dist($faire, $type, $id, $qui, $opt) {
    return in_array($qui['statut'], array('0minirezo'));
}

Voici un autre exemple plus complet qui teste si un article a une certaine composition, la composition « carte », pour afficher ou non des champs extras :

/* AUTORISATIONS */
function grainepc_objet_est_carto($objet, $id) {
	$compo = compositions_determiner($objet, $id);
	return ($compo == 'carte');
}

// autorisations des champs extras de carte ...
foreach (array(
	'declinaison',
	'structure',
	'affichage',
	'date_creation',
	'coordonnees',
	'presentation',
	'infos') as $nom)
{
	$m = "autoriser_article_modifierextra_" . $nom . "_dist";
	$v = "autoriser_article_voirextra_" . $nom . "_dist";

	$code = "
		if (!function_exists('$m')) {
			function $m(\$faire, \$type, \$id, \$qui, \$opt) {
				return grainepc_objet_est_carto(\$type, \$id);
			}
		}
		if (!function_exists('$v')) {
			function $v(\$faire, \$type, \$id, \$qui, \$opt) {
				return grainepc_objet_est_carto(\$type, \$id);
			}
		}
	";

	# var_dump($code);
	eval($code);
}

Créer un plugin en utilisant les API de Champs Extras

Vous le savez, le plugin « Champs Extras Interfaces » s’appuie sur une API de Champs Extras pour proposer une gestion graphique des champs. Cependant, des plugins peuvent aussi s’appuyer sur cette API afin de décharger sur le plugin champs extras la gestion de l’affichage, de la vérification et le traitement de nouveaux champs. Il n’y a rien d’obligatoire à cette utilisation, vous pouvez très bien développer un plugin qui crée des nouveaux champs en base et les gère de lui-même en utilisant les pipelines fournis par SPIP. L’avantage ici, est que toutes les déclarations sont regroupées dans un seul pipeline, et que la procédure d’installation et de désinstallation est simplifiée. Voyons un exemple, l’extension de démonstration nommée « Titre court pour rubriques ».

Tout d’abord, il faut créer un paquet.xml présentant le plugin :

<paquet 
		prefix="titrecourt"
		categorie="outil"
		version="1.1.0"
		etat="stable"
		compatibilite="[3.0.0-beta;["
		logo=""
		schema="0.0.1"
>
	<nom>Titre Court pour Rubriques</nom>

	<auteur>Matthieu Marcillaud [->magraine.net]</auteur>
	<licence>GNU/GPL</licence>

	<necessite nom="cextras" compatibilite="[3.0.5;[" />

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

On remarque l’indication de dépendance à « cextras » qui est, donc, le cœur de Champs Extras, son API (« iextras » étant le plugin d’interface graphique), ainsi que l’appel d’un pipeline declarer_champs_extras.

Nous allons remplir le pipeline de notre nouveau champ « titrecourt » sur la table des rubriques. Pour cela, on crée le fichier base/titrecourt.php avec comme contenu :

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;

function titrecourt_declarer_champs_extras($champs = array()) {
  $champs['spip_rubriques']['titre_court'] = array(
      'saisie' => 'input',//Type du champ (voir plugin Saisies)
      'options' => array(
            'nom' => 'titre_court', 
            'label' => _T('titrecourt:titre_court'), 
            'sql' => "varchar(30) NOT NULL DEFAULT ''",
            'defaut' => '',// Valeur par défaut
            'restrictions'=>array('voir' => array('auteur' => ''),//Tout le monde peut voir
                        'modifier' => array('auteur' => 'webmestre')),//Seuls les webmestres peuvent modifier
      ),
  );
  return $champs;	
}
?>

Observons. Le code remplit un tableau de description dans $champs['spip_rubriques']['titre_court']. Le principe est donc de remplir le tableau $champs avec une clé indiquant la table SQL, puis une clé indiquant la colonne SQL $champs[table][champ].

Le tableau de description est ensuite au format du plugin « Saisies » (puisque Champs Extras s’appuie dessus). On trouve cependant 6 options supplémentaires :

  • « nom » indique le nom le la colonne SQL désirée,
  • « sql » indique la ligne SQL correspondante,
  • « rechercher » (optionnel) permet d’indiquer si le champ doit être pris en compte dans les recherches. Vous pouvez renseigner la valeur true (la pondération appliquée par défaut est 2), ou toute valeur entière de pondération de recherche désirée, par exemple 5 ;
  • « versionner » (optionnel) permet d’indiquer si le champ peut être versionné lorsque les révisions sont activées (plugin révisions) sur l’objet éditorial sur lequel est ajouté le champs extras. true pour activer le versionnage ;
  • « restrictions » (optionnel) permet d’indiquer les restrictions appliquées automatiquement dans l’espace privé. On peut trouver dedans les options :
    • ’voir’ => array(’auteur’=>’’) // tout le monde peut voir (c’est l’action par défaut !)
    • ’voir’ => false // personne peut voir
    • ’modifier => array(’auteur’ => ’admin’) // seuls les admins.
    • ’modifier => array(’auteur’ => ’admin_complet’) // seuls les admins non restreints
    • ’modifier => array(’auteur’ => ’webmestre’) // seuls les webmestres.
    • ’secteur’ => ’3’ (restreint au secteur 3).
    • ’secteur’ => ’3:5:8’ (restreint au secteurs 3, 5 et 8).
    • ’branche’ => ’2’ (restreint à la branche 2...).
    • ’rubrique’ => ’1’.
    • ’groupe’ => ’4’.
  • « traitements », traitements typographiques à appliquer, soit une constante prédéfinie, soit un chaîne décrivant les fonctions à appliquer. Lire la documentation sur Programmer avec SPIP.

Notez que si ces restrictions ne sont pas suffisantes, vous pouvez créer comme on l’a vu plus haut les fonctions d’autorisations spécifiques à vos champs extras.

Le dernier fichier à créer gère l’installation et la désinstallation des champs. C’est dans notre exemple le fichier titrecourt_administrations.php et il contient le minimum syndical :

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;

include_spip('inc/cextras');
include_spip('base/titrecourt');
	
function titrecourt_upgrade($nom_meta_base_version,$version_cible) {

  $maj = array();
  cextras_api_upgrade(titrecourt_declarer_champs_extras(), $maj['create']);	

  include_spip('base/upgrade');
  maj_plugin($nom_meta_base_version, $version_cible, $maj);

}

function titrecourt_vider_tables($nom_meta_base_version) {
  cextras_api_vider_tables(titrecourt_declarer_champs_extras());
  effacer_meta($nom_meta_base_version);
}
?>

On trouve les fonctions upgrade() et vider_tables() des plugins, qui appellent des fonctions cextras_api_upgrade() et cextras_api_vider_tables() avec le contenu de la fonction qui liste les champs que l’on crée, ici titrecourt_declarer_champs_extras().

Pour la fonction d’upgrade, on indique aussi où l’on souhaite créer les mises à jour, ici dans $maj['create'] qui est « à la création du plugin », mais cela aurait pu être appelé aussi lors d’une mise à jour (par exemple si vous avez ajouté un champ de plus).

$maj = array();
cextras_api_upgrade(titrecourt_declarer_champs_extras(), $maj['create']);
// mise à jour de la version 1.2 (nouveaux champs a créer)
cextras_api_upgrade(titrecourt_declarer_champs_extras(), $maj['1.2']);

Un autre exemple...

Voici un autre exemple plus complexe. C’était pour cet exemple que les autorisations par compositions avaient aussi été créées. Ici, plusieurs champs sont présents sur des tables différentes et plusieurs mises à jour sont faites.

Déclaration des champs

<?php

if (!defined("_ECRIRE_INC_VERSION")) return;

function grainepc_declarer_champs_extras($champs = array()){
    $champs['spip_auteurs']['telephone'] = array(
        'saisie' => 'input', // Type du champs (voir plugin Saisies)
        'options' => array(
            'nom' => 'telephone', 
            'label' => _T('grainepc:info_telephone'), 
            'sql' => "varchar(30) NOT NULL DEFAULT ''",
            'defaut' => '',// Valeur par défaut
        ));

    $champs['spip_articles']['declinaison'] = array(
        'saisie' => 'input', // Type du champs (voir plugin Saisies)
        'options' => array(
            'nom' => 'declinaison', 
            'label' => _T('grainepc:info_declinaison'), 
            'sql' => "text DEFAULT '' NOT NULL",
            'defaut' => '',// Valeur par défaut
            'traitements' => '_TRAITEMENT_TYPO',
        ));

    $champs['spip_articles']['structure'] = array(
        'saisie' => 'radio', // Type du champs (voir plugin Saisies)
        'options' => array(
            'nom' => 'structure', 
            'label' => _T('grainepc:info_type_structure'), 
            'sql' => "varchar(30) NOT NULL DEFAULT ''",
            'defaut' => '',// Valeur par défaut
            'datas' => array(
                '' =>  _T('grainepc:info_rien'), 
                'structure' =>  _T('grainepc:info_structure'), 
                'structure_adherente' =>  _T('grainepc:info_structure_adherente'), 
            ),
        ));


    $champs['spip_articles']['affichage'] = array(
        'saisie' => 'radio', // Type du champs (voir plugin Saisies)
        'options' => array(
            'nom' => 'affichage', 
            'label' => _T('grainepc:info_affichage'), 
            'sql' => "varchar(30) NOT NULL DEFAULT 'complet'",
            'defaut' => 'complet',// Valeur par défaut
            'datas' => array(
                'complet' =>  _T('grainepc:info_complet'), 
                'reduit' =>  _T('grainepc:info_reduit'), 
            ),
        ));
        
    $champs['spip_articles']['date_creation'] = array(
        'saisie' => 'date', // Type du champs (voir plugin Saisies)
        'options' => array(
            'nom' => 'date_creation', 
            'label' => _T('grainepc:info_date_creation'), 
            'sql' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
            'defaut' => '0000-00-00 00:00:00',// Valeur par défaut
        ),
        'verifier' => array(
            'type' => 'date',
            'options' => array(
                'normaliser' => 'datetime',
            )
        ));

    $champs['spip_articles']['coordonnees'] = array(
        'saisie' => 'textarea', // Type du champs (voir plugin Saisies)
        'options' => array(
            'nom' => 'coordonnees', 
            'label' => _T('grainepc:info_coordonnees'), 
            'sql' => "text DEFAULT '' NOT NULL",
            'defaut' => '',// Valeur par défaut
            'rows' => 4,
            'traitements' => '_TRAITEMENT_RACCOURCIS',
        ));

    $champs['spip_articles']['presentation'] = array(
        'saisie' => 'textarea', // Type du champs (voir plugin Saisies)
        'options' => array(
            'nom' => 'presentation', 
            'label' => _T('grainepc:info_presentation'), 
            'sql' => "text DEFAULT '' NOT NULL",
            'defaut' => '',// Valeur par défaut
            'rows' => 6,
            'traitements' => '_TRAITEMENT_RACCOURCIS',
        ));

    $champs['spip_articles']['infos'] = array(
        'saisie' => 'textarea', // Type du champs (voir plugin Saisies)
        'options' => array(
            'nom' => 'infos', 
            'label' => _T('grainepc:info_infos'), 
            'sql' => "text DEFAULT '' NOT NULL",
            'defaut' => '',// Valeur par défaut
            'rows' => 5,
            'traitements' => '_TRAITEMENT_RACCOURCIS',
        ));
        
    return $champs;    
}

?>

Installation

<?php

include_spip('inc/cextras');
include_spip('base/grainepc');

function grainepc_upgrade($nom_meta_base_version,$version_cible){
	$maj = array();

	cextras_api_upgrade(grainepc_declarer_champs_extras(), $maj['create']);
	cextras_api_upgrade(grainepc_declarer_champs_extras(), $maj['1.1.0']);
	cextras_api_upgrade(grainepc_declarer_champs_extras(), $maj['1.2.0']);
	$maj['1.2.0'][] = array('sql_alter',"TABLE spip_auteurs DROP type");
	cextras_api_upgrade(grainepc_declarer_champs_extras(), $maj['1.3.0']);
	
	include_spip('base/upgrade');
	maj_plugin($nom_meta_base_version, $version_cible, $maj);
}

function grainepc_vider_tables($nom_meta_base_version) {
	cextras_api_vider_tables(grainepc_declarer_champs_extras());
	effacer_meta($nom_meta_base_version);
}

?>

Un autre exemple... en utilisant un ou plusieurs fieldset pour séparer les nouveau champs ajoutés

Voici un autre exemple où les champs sont regroupés par fieldsets (suite à une question posée dans les forums de cet article).

Ici, l’ensemble des champs sont sur la même table, et sont regroupés en deux fieldsets différents numeros et adresse.

Déclaration des champs

<?php

if (!defined("_ECRIRE_INC_VERSION")) return;

function numadresse_declarer_champs_extras($champs = array()){

    $champs['spip_auteurs']['numeros'] = array(
        'saisie' => 'fieldset',//Type du champ (voir plugin Saisies)
        'options' => array(
            'nom' => "numeros",
            'label' => _T('numadresse:legend_numeros')
        ),
        'saisies' => array(
            'telephone' => array(
                'saisie' => 'input', // Type du champs (voir plugin Saisies)
                'options' => array(
                    'nom' => 'telephone', 
                    'label' => _T('numadresse:info_telephone'), 
                    'sql' => "varchar(30) NOT NULL DEFAULT ''",
                    'defaut' => '',// Valeur par défaut
                )),
            'fax' => array(
                'saisie' => 'input', // Type du champs (voir plugin Saisies)
                'options' => array(
                    'nom' => 'fax', 
                    'label' => _T('numadresse:info_fax'), 
                    'sql' => "varchar(30) NOT NULL DEFAULT ''",
                    'defaut' => '',// Valeur par défaut
                ))
        )
    );
    $champs['spip_auteurs']['adresse'] = array(
        'saisie' => 'fieldset',//Type du champ (voir plugin Saisies)
        'options' => array(
            'nom' => "adresse",
            'label' => _T('numadresse:legend_adresse')        
        ),
        'saisies' => array(
            'adresse' => array(
                'saisie' => 'input', // Type du champs (voir plugin Saisies)
                'options' => array(
                    'nom' => 'adresse', 
                    'label' => _T('numadresse:info_adresse'), 
                    'sql' => "text NOT NULL DEFAULT ''",
                    'defaut' => '',// Valeur par défaut
                )),
            'code_postal' => array(
                'saisie' => 'input', // Type du champs (voir plugin Saisies)
                'options' => array(
                    'nom' => 'code_postal', 
                    'label' => _T('numadresse:info_code_postal'), 
                    'sql' => "varchar(30) NOT NULL DEFAULT ''",
                    'defaut' => '',// Valeur par défaut
                ))
        )
    );

    return $champs;
}

?>

Pour l’installation de ces champs, faire comme l’exemple situé plus haut.

Les quatres nouveaux champs sont ainsi répartis dans deux fieldsets différents en bas du profil de l’auteur.

Discussion

35 discussions

  • 2

    Le plugin propose d’ajouter une barre d’édition gras/italique etc. mais la mise en forme à l’affichage n’est pas prise en compte.

    Ai-je raté quelque chose ? Comment ajouter les champs extras de type textarea au pipeline de mise en forme ?

    merci…

    • Onglet Technique dans la configuration du champs extras > Activer la prise en compte des raccourcis typographique (propre).

      Voili voilou :)

    • Ou si c’est par l’API (et pas l’interface graphique) il y a :

      'traitements' => '_TRAITEMENT_RACCOURCIS',

      Ou encore en squelettes :

      [(#MON_CHAMP|propre)]

    Répondre à ce message

  • 1

    Bonjour,

    J’ai créé des saisies que j’utilise en champs extras sur des organisations qui appartiennent à des annuaires ... Je souhaiterai restreindre l’apparition de ces champs extras à certains annuaires, je suis en train de m’emmêler les pinceaux :-)

    Je dois donc créer dans un mes_fonctions.php quelque chose du genre :

    include_spip('inc/cextras_autoriser');
    restreindre_extras('organisation', array('champextra1', 'champextra2'), 1, 'annuaire');

    Si j’ai bien lu la doc, ça ne marche pas car restreindre_extras() s’il peut s’appliquer à l’objet « organisation », il va chercher à restreindre l’affichage dans des rubriques/secteur/groupemot, mais pas dans des annuaires ... je dois donc écrire une fonction spéciale genre pour autoriser champextra1 dans l’annuaire avec l’id 1 :

    function autoriser_annuaire_voirextra_champextra1_dist() {
        return in_array($qui['id_annuaire'], 1);
    }

    et idem pour champextra2 et ensuite à doubler avec « modifierextra » ...

    Est-ce que j’ai bon jusque là ? (j’en doute, si je pose la question c’est que ça ne marche pas ... :-)
    Merci pour vos lumières !

    Pierre

    • Bonjour,

      Je me permets un petit up sur ce sujet, je patine toujours dans la choucroute. L’idée générale est bien d’autoriser un champ extra pour une organisation en fonction de son appartenance à un annuaire.
      Donc un truc qui ressemblerait plutot à :

      function autoriser_organisation_voirextra_champextra1_dist($objetutilisantchamp, $nomchampextra, $idobjetcontenantobjetutilisantchamp, $objetcontenantobjetutilisantchamp) {
         //c'est ici que ça se corse ...
      }

      Ai-je bon déjà à ce niveau ? dans l’ordre de ma fonction on aurait (’organisation’, ’nomduchamparestreindre’, 5, ’annuaire’) pour restreindre le champ ’nomduchamparestreindre’ sur les organisations appartenant à l’annuaire n°5 ...
      Ensuite je ne suis pas sûr de ce que doit retourner la fonction ... un true/false simple ?

      Merci d’avance ?
      Pierre

    Répondre à ce message

  • Stephane Vasseur

    J’utilise SPIP SPIP 3.0.16 et Champs Extras 3.2.7 .

    J’ai créé un plugin en suivant les exemples ici pour définir un set de champs extra pour les articles. À l’installation du plugin les champs sont bien déclarés dans la base de donnée avec les types souhaités mais ils ne s’affichent pas dans l’espace privé.
    Si j’installe le plugin champs_extra_interface les champs déclarés via l’API apparaissent comme non gérés. Je ne souhaite pas utiliser le plugin interface si possible.

    Dois-je modifier des squelettes de l’espace privé pour que les champs extra déclarés via l’API soient éditables ?

    Merci

    Répondre à ce message

  • 3

    Bonjour à tous, d’abord merci pour ce plugin qui est d’une grande utilité.

    Je rencontre un bug lorsque je souhaite utilisé un champ extra de type date, mon article ne s’enregistre pas et j’ai l’erreur suivante :
    « Une erreur technique a empêché l’enregistrement correct du champ ’date_debut’,’date_fin’. »

    Je suis sur spip 3.08 avec la dernière version du plugin champ extra à jour.

    Avez vous une idée ? Je suis bloqué ?

    Merci d’avance.

    • Oui, plein d’idées.

      Déjà, tu es ici sur l’article qui présente les API, je suppose que c’est parce que tu les utilises (et donc que ce n’est pas via l’interface graphique que tu crées tes champs).

      Si c’est par l’interface graphique : la simple présence du plugin « verifier » devrait normalement être suffisant pour gérer correctement la date.

      Si c’est par les API, il faut non seulement le plugin « verifier » actif, mais déclarer aussi une « normalisation » telle que présente dans l’exemple de la partie « Un autre exemple... » de cette page pour le champ de type date :

      	$champs['spip_articles']['date_creation'] = array(
      		'saisie' => 'date', // Type du champs (voir plugin Saisies)
      		'options' => array(
      			'nom' => 'date_creation', 
      			'label' => _T('grainepc:info_date_creation'), 
      			'sql' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
      			'defaut' => '',// Valeur par défaut
      		),
      		'verifier' => array(
      			'type' => 'date',
      			'options' => array(
      				'normaliser' => 'datetime',
      			)
      		));
    • Bonjour et merci de votre réponse, alors non je me suis trompé de page, je n’utilise pas l’api mais bien l’interface graphique du plugin champ extra, par défaut dans spip 3.08 il y a déjà le plugin « verifier » j’ai vu que sur spip contrib il y a une version plus récente du plugin « vérifier » donc je l’ai installé. j’ai tester à nouveau et toujours le même message d’erreur.

      Je vous joins une capture d’écran, j’ai simplement ajouter un champ de type date avec heure et j’ai laisser les autres paramètres par défaut. Impossible d’enregistrer l’article.

      Quels précisions de plus avez vous besoin pour identifier ce qui pose problème ?

      Merci d’avance et bon dimanche !

    • Effectivement, j’ai exactement la même chose. Avec en prime en cas de vérification de la date le message suivant ==> Le format de la date n’est pas accepté.

    Répondre à ce message

  • Bonjour,

    Très belle application que j’utilise avec bonheur depuis longtemps mais actuellement je n’arrive pas à vraiment utiliser les fonctions de restriction sur des auteurs.
    Je veux restreindre l’utilisation d’un champ pour quelques auteurs bien spécifiques et j’ai écrit dans mes_fonction.php :

    <?php
    include_spip('inc/cextras_autoriser');
    // restreindre le champ 'mon_champ' des auteurs sur les auteurs 1,6,7,10
    restreindre_extras('auteur', 'mon_champ', array(1,6,7,10));
    ?>

    Et cela ne fonctionne pas et fait disparaître la saisie du champ sur tous les auteurs.

    Si je comprend bien maintenant, le troisième argument de restreindre_extras doit uniquement concerner les rubriques et non les auteurs, ici, comme je le voudrais ?

    Comment faire ?

    Je suis en SPIP 1.3.13 avec la dernière version de Champs extra 3

    Répondre à ce message

  • bonjour à tous,
    j’ai un petit problème avec ce plugins car sur mon local tout fonctionne bien mais pas sur la preprod. Quand je souhaite modifier un champ , tout disparais sauf le bouton enregistrer.
    Merci d’avance

    Répondre à ce message

  • 3

    Bonjour,

    j’essaie de restreindre l’utilisation d’un champ à une seule rubrique et ne pas l’afficher dans ces sous-rubriques

    selon la doc, il me semble que la déclaration suivante devrait le faire

      $champs['spip_articles']['guidance'] = array(
          'saisie' => 'textarea',//Type du champ (voir plugin Saisies)
          'options' => array(
                'nom' => 'guidance', 
                'label' => _T('wiki_cso:guidance'), 
                'sql' => "text NOT NULL DEFAULT ''",
                'versionner' => true,
                'traitements' => '_TRAITEMENT_TYPO',
                'recherche' => true,                                   
                'restrictions'=>array(
                    'rubrique' => '3:2', 
                    'voir' => array('auteur' => ''),
                    'modifier' => array('auteur' => ''),
                            ),
                    )
      ); 
     

    j’ai égalment essayé

    if(function_exists(’restreindre_extras’))restreindre_extras(’article’, array(’guidance’,’how_to_analyse_context’,’how_to_analyse_org_aspects’,’suggested_objectives’,’activities’,’in_practice’,’voices’,’other_ressources’), array(2,3)) ;
    </code<

    dans les deux cas, les champs sont également affiché dans les sous-rubriques, comment arriver à limiter l’affichage aux deux rubriques 2 et 3 ?

    • Bonjour,

      Est-ce quelqu’un à une idée comment limiter les restrictions à des rubriques en excluant ses sous-rubriques ?

      Je reformule :

      dans le cadre d’une déclaration de champs extras depuis un plugin, Est-ce qu’il es possible de limiter l’affichage à des rubriques sans ses sous-rubriques, donc pour
      ’restrictions’=>array(
      ’rubrique’ => ’3:2’,
      ),
      )

      le champ ne devrait uniquement s’afficher dans les rubriques 2 et 3 et pas dans ses sous-rubriques. Mais il s’affiche également dans ses sous-rubriques

      Est-ce que la fonction restreindre_extras() fonctionne bien si les champs sont déclarés via la pipeline « declarer_champs_extras ». Dans mon cas cela ne fonctionne pas. J’ai mis
      if(function_exists(’restreindre_extras’))restreindre_extras(’article’, array(’guidance’,’how_to_analyse_context’,’how_to_analyse_org_aspects’,’suggested_objectives’,’activities’,’in_practice’,’voices’,’other_ressources’), array(2,3)) ;

      dans les fichier mes_fonctions.php du plugin et également dans le squelette d’un site, aucun effet. Merci pour votre aide

      Rainer

    • Je me demande si y a pas un bug :/

      /me qui arrive en retard ^^

    • Je crois que http://zone.spip.org/trac/spip-zone/changeset/70444 répare !

      J’espère du moins :)

      Mes tests fonctionnent (api ou interface).

    Répondre à ce message

  • Alexandre

    Bonjour,
    J’aimerai savoir s’il existe un moyen de lister les champs extra (et afficher leur valeur) d’un objet dans un squelette coté public ?
    C’est fait coté privé, mais je me demande par quel moyen on peut arriver a cela via un boucle DATA par exemple sur un squelette public.
    Merci d’avance au eventuelle réponses ! ;)

    Répondre à ce message

  • 5

    Bonjour,
    Une petite question en passant : est-ce que le versionnage est géré ?
    Par exemple, puis-je utiliser ça : ’versionner’ => ’true’ comme option pour un champ extra ?

    • Ça m’intéresse également de savoir comment obtenir le versionnage

    • Bonjour,

      Est-ce quelqu’un à une idée comment limiter les restrictions à des rubriques en excluant ses sous-rubriques ?

      Je reformule :

      dans le cadre d’une déclaration de champs extras depuis un plugin, Est-ce qu’il es possible de limiter l’affichage à des rubriques sans ses sous-rubriques, donc pour

      'restrictions'=>array(
                      'rubrique' => '3:2', 
                              ),
                      )

      le champ ne devrait uniquement s’afficher dans les rubriques 2 et 3 et pas dans ses sous-rubriques. Mais il s’affiche également dans ses sous-rubriques

      Est-ce que la fonction restreindre_extras() fonctionne bien si les champs sont déclarés via la pipeline « declarer_champs_extras ». Dans mon cas cela ne fonctionne pas. J’ai mis
      if(function_exists(’restreindre_extras’))restreindre_extras(’article’, array(’guidance’,’how_to_analyse_context’,’how_to_analyse_org_aspects’,’suggested_objectives’,’activities’,’in_practice’,’voices’,’other_ressources’), array(2,3)) ;

      dans les fichier mes_fonctions.php du plugin et également dans le squelette d’un site, aucun effet. Merci pour votre aide

      Rainer

    Répondre à ce message

  • Cricri

    Quelque ne semble pas tourner rond sur le plugin « API de vérification » - il génére un message d’erreur quand on essaye de l’activer dans le back-office Spip 3 RC avec Champs Extras (Interface) 3.0.3 ...

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom