Champs Extras 2

Ce plugin permet de créer et/ou de gérer des champs supplémentaires dans les objets éditoriaux de SPIP. Il permet donc de prendre en compte et d’afficher de nouveaux éléments dans les articles, rubriques, mots, groupes de mots, auteurs et sites.

Installation

  • Le plugin est téléchargeable à cette adresse : Champs Extras2.
  • L’interface de gestion graphique est dans un autre plugin : Champs Extras2 Interface (nécessite les plugin Saisies et Bonux).
  • Il suffit de décompresser ces zips dans le répertoire plugins/ ou d’utiliser le chargeur automatique.

Les nouveaux champs sont créés dans les tables SQL correspondantes (table SQL «spip_rubriques» pour l’objet éditorial «rubrique»). Chaque champ nouveau est une nouvelle colonne dans la table SQL. C’est ce qui le différencie des champs extras présents avant SPIP 2.0 qui stockaient l’ensemble des champs dans une seule colonne «extra» des tables SQL. Ces nouveaux champs peuvent donc être appelés dans les squelettes SPIP directement par #NOM_DU_CHAMP.

Ce plugin est séparé en deux éléments indépendants :

  • le premier, «core» donne accès aux fonctions de création, de gestion et d’affichage des champs, mais pour d’autres plugins. Un exemple de plugin (Post-scriptum sur les rubriques) dans le dossier extensions montre comment créer des plugins offrant des champs prédéfinis.
  • le second, «interface» profite des points d’entrées et des fonctions du plugin «core» pour proposer une interface graphique de gestion et de création de ces champs supplémentaires.
Champs Extras 2
Champs Extras 2
Page récapitulative des éléments
Champs Extras 2
Champs Extras 2
3 champs ajoutés sur les articles.

Créer un nouveau champ via l’interface graphique

Nécessite : SPIP 2.0, Champs Extras Core (cextras), Champs Extras Interface (iextras), SPIP Bonux et Saisies.

Seuls les webmestres du site ont accès à ce panneau de configuration (l’auteur numéro 1 par défaut). Pour déclarer de nouveaux webmestres, il faut spécifier (en SPIP 2.0) leurs numéros d’auteur dans la constante _ID_WEBMESTRES en ajoutant cette ligne dans le fichier mes_options.php :

  1. define(’_ID_WEBMESTRES’,1:743:99);

Exemple 1 : ajout d’un prénom sur un auteur

Nous allons créer un champ ’prenom’ sur les auteurs de SPIP.

Affichage du nouveau champ “Prénom” en bas du formulaire de saisie d'un auteur.
Affichage du nouveau champ “Prénom” en bas du formulaire de saisie d’un auteur.

Pour cela, il faut aller dans «Configuration > Champs Extras» et cliquer l’icône «Créer un champ extra».

Champs Extras 2
Champs Extras 2
Page d’édition d’un nouveau champ

Le formulaire doit être rempli en indiquant correctement les saisies demandées, car certaines ne seront plus modifiables par la suite (champ, table et ligne SQL). Découvrons les éléments à renseigner :

  • Champ : Le nom du champ SQL de la table. Ici, saisir : «prenom». Notez que les champs devront être saisis sans accents ni espaces (les espaces sont à remplacer de préférence par des _). La valeur du champ supplémentaire pourra être affichée dans un squelette avec la balise #PRENOM;
  • Objet éditorial : Table sur laquelle s’applique ce champ, ici «Auteurs»;
  • Label de la saisie : Correspond au nom qui s’affichera dans le formulaire d’édition et dans un squelette avec la balise [(#CHAMP_EXTRA{champ, label})]. Dans cet exemple, saisir «Prénom». Si vous voulez saisir le label du champ avec ses traductions, voir plus bas “Afficher les labels des champs”.
  • Type de saisie : Le type de saisie permet d’afficher tel ou tel type de formulaire pour remplir le champ demandé. Ce peut être une simple ligne (affichera un input de type text, comme pour, par exemple, un sous-titre), un bloc (affichera une zone de saisie textarea), un élément à deux entrées oui ou non, etc. Ces éléments sont définis dans le dossier extra-saisies/. De la même maniere, le dossier extra-vues/ permet de gérer des vues particulières (ce qui est affiché lorsqu’on visualise un élément éditorial, et non lorsqu’on l’édite). Ici, nous avons besoin de la saisie «ligne». À noter : il est assez simple de créer de nouveaux masques de saisie et de vue.
  • Liste de valeurs : Certaines saisies peuvent nécessiter une liste de clé/valeurs pour fonctionner, comme les cases à cocher, les boutons radio ou les sélections. Il faut les indiquer dans ce champ quand nécessaire.
  • Champ obligatoire : Le champ doit-il être obligatoirement renseigné par l’auteur ?
  • Recherche : Cocher cette case si le champ soit être inclu au moteur de recherche;
  • Définition SQL : Correspond à la syntaxe SQL décrivant l’élément. Cette description permet de créer le champ dans la table. Par défaut, c’est un élément “texte” qui est proposé. On pourrait aussi mettre dans ce cas varchar(30) NOT NULL DEFAULT ''
  • Traitements automatiques : Cochez cette case si la saisie contient des raccourcis typographiques ou des chaines de langues.
  • Explication de la saisie : Affiché dans le formulaire de saisie du champ. Ici, ce n’est pas nécessaire, mais dans d’autres cas, ce pourrait être par exemple «Cocher aux moins deux éléments sur les quatre proposés». Un code de langue peut aussi être utilisé, ainsi que les blocs multilingues (valable à partir de Champs Extra2 v1.10.0 et Interfaces pour Champs Extra v1.3.0) ;
  • Classe CSS : Rajouter le nom des classes CSS, séparés par un espace, qui seront appliquées au formulaire de saisie champ. Par exemple, pour un champ de type «ligne», les classes seront rajoutées à la balise input.

À la soumission de ce formulaire de création, le champ est créé. Le formulaire de l’auteur dispose maintenant d’un champ supplémentaire.

Exemple 2 : Attribution d’un auteur à une brève

Nous allons créer un champ ’id_auteur’ sur les brèves de SPIP, permettant d’attribuer un auteur aux brèves. Cliquer l’icône «Créer un champ extra» et remplir comme indiqué :

  • Champ : Saisir : «id_auteur». La balise #ID_AUTEUR pourra donc être utilisée sur les brèves;
  • Objet : «Brèves»;
  • Label : «Nom de l’auteur», ou «Auteur de la brève».
  • Type de saisie : nous avons besoin de la saisie «auteur».
  • Définition SQL : ce qui nous intéresse est un identifiant numérique pour stocker l’identifiant de l’auteur. On remplace donc par : bigint(21) NOT NULL DEFAULT 0.

Créer un nouveau champ via un plugin

Nécessite : SPIP 2.0, Champs Extras Core (cextras).

Vous pouvez utiliser les API du plugin core pour proposer un plugin gérant des champs qu’il définit.

Pour cela, il faut créer un plugin nécessitant le plugin «Champs Extras Core» et utilisant un pipeline «declarer_champs_extras» comme ceci :

<plugin>
	<nom>Un auteur sur les brèves</nom>
	<auteur>Vous !</auteur>
	<licence>GNU/GPL</licence>
	<version>0.1</version>
	<version_base>0.1</version_base>
	<description>
	Ajoute un champ "id_auteur" sur les breves de SPIP.
	</description>
	<etat>stable</etat>
	<prefix>auteur_sur_breves</prefix>
	<necessite id="cextras" version="[0.8;]" />
	<install>base/auteur_sur_breves_install.php</install>
	<pipeline>
		<nom>declarer_champs_extras</nom>
		<inclure>base/auteur_sur_breves.php</inclure>
	</pipeline>
</plugin>

Vous devrez alors créer les fichiers base/auteur_sur_breves_install.php et
base/auteur_sur_breves.php avec pour contenu par exemple :

auteur_sur_breves.php :
Il permet de déclarer les champs extras, en reprenant les mêmes éléments que le formulaire de l’interface.

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
 
function auteur_sur_breves_declarer_champs_extras($champs = array()){
	$champs[] = new ChampExtra(array(
		'table' => 'breve', // sur quelle table ?
		'champ' => 'id_auteur', // nom sql
		'label' => 'Auteur de la br&egrave;ve', // chaine de langue 'prefix:cle'
		'precisions' => '', // precisions sur le champ
		'obligatoire' => false, // 'oui' ou '' (ou false)
		'rechercher' => false, // false, ou true ou directement la valeur de ponderation (de 1 à 8 generalement)
		'type' => 'auteur', // type de saisie
		'sql' => "bigint(21) NOT NULL DEFAULT 0", // declaration sql
	));
	return $champs;
}
?>

auteur_sur_breves_install.php :
Il indique les actions à réaliser à l’installation et à la désinstallation du plugin. Ici, on appelle simplement des fonctions du plugin «Champs Extras Core»

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
 
include_spip('inc/cextras_gerer');
include_spip('base/auteur_sur_breves');
 
function auteur_sur_breves_upgrade($nom_meta_base_version,$version_cible){
	$champs = auteur_sur_breves_declarer_champs_extras();
	installer_champs_extras($champs, $nom_meta_base_version, $version_cible);
}
 
function auteur_sur_breves_vider_tables($nom_meta_base_version) {
	$champs = auteur_sur_breves_declarer_champs_extras();
	desinstaller_champs_extras($champs, $nom_meta_base_version);
}
?>

Cas des listes d’énumération :

Pour les types d’énumération, il faut indiquer un tableau PHP d’éléments clé=>valeur. Exemple :

$champs[] = new ChampExtra(array(
	'table' => 'rubrique', // sur quelle table ?
	'champ' => 'enum', // nom sql
	'label' => 'info_enum', // chaine de langue 'prefix:cle'
	'type' => 'menu-cases', // type de saisie
	'enum' => array(
		"cle1"=>"valeur1", 
		"cle2" => "valeur2",
		"cle3" => "valeur3",
	),
	'sql' => "text NOT NULL DEFAULT ''", // declaration sql
));

Rien de plus...

Prendre en compte des champs déjà existants

Le champ “ville” créé manuellement dans la base de données apparait dans la liste des champs gérables par Extras.
Le champ “ville” créé manuellement dans la base de données apparait dans la liste des champs gérables par Extras.

Il est possible que vous ayez déjà ajouté des champs dans les tables SQL des objets éditoriaux de SPIP, par exemple en utilisant phpMyAdmin. Dans ce cas, vous aimeriez qu’ils soient pris en compte dans l’interface privée de SPIP.

Pour ce faire, le plugin «Interface pour Champs Extras» établit la liste les champs existants et vous signale ceux qui sont gérés par «Champs Extras2», ainsi que ceux qui ne le sont pas. Il suffit donc d’associer le champ voulu via le lien «gérer ce champ», puis de modifier la valeur des labels et le type de saisie de ce champ.

Créer de nouveaux types de saisies

Pour créer un nouveau type de saisies, il suffit de créer les deux squelettes nécessaires à la saisie et à l’affichage des champs extras qui utiliseront ce nouveau type de champ.

Ces squelettes doivent porter le même nom que le nouveau type de champ et doivent être placés dans les répertoires extra-saisies et extra-vues. Ces deux répertoires peuvent être créés dans le dossier de vos squelettes (par défaut le répertoire /squelettes) ou dans le dossier du plugin que vous développez pour rajouter des champs extras.

Par exemple, si vous utilisez le Plugin Contacts & Organisations, qui crée le nouveau type d’objet SPIP contact et que vous souhaitez créer des champs extra de type contact, vous devez créer les squelettes /squelettes/extra-saisies/contact.html et /squelettes/extra-vues/contact.html et y écrire le code nécessaire à l’affichage et à la saisie des champs extra de ce type.

Pour l’écriture des squelettes de la saisie et de la vue, vous pouvez utiliser les paramètres suivants :

  • champ_extra : nom du champ,
  • label_extra : label du champ,
  • valeur_extra : valeur du champ,
  • erreur_extra : erreur du champ,
  • precisions_extra : précisions du champ,
  • obligatoire_extra : renvoie “obligatoire” si le champ est obligatoire, une chaine vide dans le cas contraire.

Par exemple, la saisie ligne qui affiche une balise HTML input type=text s’affiche avec le fichier ligne.html comme ceci :

<li class="editer_[(#ENV{champ_extra})][ (#ENV{obligatoire_extra})][ (#ENV{erreur_extra}|oui)erreur]">
	<label for="#ENV{champ_extra}">#ENV{label_extra}</label>
		[<span class='erreur_message'>(#ENV**{erreur_extra})</span>]
		[<p class="explication">(#ENV{precisions_extra})</p>]
		<input type='text' class='text' name='#ENV{champ_extra}' id='#ENV{champ_extra}' value="#ENV{valeur_extra}" />
</li>

Afficher les champs multiples avec #LISTER_VALEURS et #LISTER_CHOIX

Les saisies de type “menu-case”, “menu-enum” ou “menu-radio” enregistrent en base de données les clés des listes de saisie et non leurs valeurs. Pour obtenir leurs valeurs, vous pouvez utiliser la balise #LISTER_VALEURS (Version de cextras >= 1.0.0) qui prend un ou deux arguments :

  • nom : qui doit obligatoirement être un texte, sans balises. On ne peut donc pas écrire #LISTER_VALEURS{#GET{nom}}.
  • séparateur : un séparateur optionnel (par défaut : “,”).

Exemple :

Soit le tableau suivant d’un champ extra “voiture” de type “case” :

R19, Renault 19
R21, Renault 21
C15, Citroën C15

Si vous cochez les 2 premiers vous obtiendrez dans un squelette :

#VOITURE : R19,R21
#LISTER_VALEURS{voitures} : Renault 19, Renault 21
#LISTER_VALEURS{voitures, " / "} : Renault 19 / Renault 21
#LISTER_VALEURS**{voitures} : Array 
En fait un tableau précisément comme ceci :
    array(
        'R19' => 'Renault 19',
        'R21' => 'Renault 21'
   )

Pour afficher la liste complète des valeurs de la liste (pour permettre par exemple à l’internaute de faire un choix dans un menu déroulant), vous pouvez utiliser la balise #LISTER_CHOIX, combiné avec une boucle POUR :

<BOUCLE_liste_voitures(ARTICLES){id_article}>
        	<select name="voitures">
	 <BOUCLE_liste(POUR){tableau #LISTER_CHOIX**{voitures}}>
        	<option value="#CLE">#VALEUR</option>
	</BOUCLE_liste>
	</select>
</BOUCLE_liste_voitures>

Si vous deviez utiliser cette boucle dans une rubrique, il faudrait limiter la boucle à un seul article, sinon, celle-ci répéterait l’affichage des valeurs possibles du champ autant de fois qu’il y a d’articles dans la rubrique. Cela tient à la manière dont #LISTER_CHOIX**{champ} est calculée pour l’instant.

<BOUCLE_liste_voitures(ARTICLES){id_article}{0,1}>
        	<select name="voitures">
	 <BOUCLE_liste(POUR){tableau #LISTER_CHOIX**{voitures}}>
        	<option value="#CLE">#VALEUR</option>
	</BOUCLE_liste>
	</select>
</BOUCLE_liste_voitures>

Afficher les champs de type auteur ou auteurs

Les saisies de type “auteur” ou “auteurs” enregistrent en base de données les identifiants du ou des auteurs choisit et non le(s) nom(s) de(s) auteur(s).

Si vous créez un champ de type “auteur” sur les articles, par exemple “responsable” vous devez passer par une boucle de type AUTEURS pour afficher le nom du responsable sur la page de l’article (notez l’utilisation du critère {tous} qui permet d’afficher des auteurs qui n’ont pas rédigé d’articles) :

<BOUCLE_article(ARTICLES){id_article}>
<BOUCLE_responsable(AUTEURS){id_auteur=#RESPONSABLE}{tous}>
#NOM
</BOUCLE_responsable>
</BOUCLE_article>

Dans le cas où le champ est de type “auteurs” et se nomme “responsables”, la boucle devient :

<BOUCLE_article(ARTICLES){id_article}>
<BOUCLE_responsables(AUTEURS){id_auteurs IN (#RESPONSABLES|explode{","})}{tous}>
#NOM
</BOUCLE_responsables>
</BOUCLE_article>

En effet, #RESPONSABLES contient les identifiants des auteurs séléctionnés, séparés par des virgules.

Toujours dans le cas où vous auriez créé un champ “responsables” de type “auteurs”, pour afficher la liste des articles auquels ont été affectés un responsable donné, vous pouvez utiliser la boucle suivante :

<BOUCLE_articles(ARTICLES){responsables == #VAL{'(^|,)'}|concat{#ID_AUTEUR,'($|,)'} }>
 #TITRE
 </BOUCLE_articles> 

Afficher les labels des champs

Pour afficher le label d’un champ dans un squelette, vous pouvez utiliser la balise [(#CHAMP_EXTRA{nom_du_champ, label})].

Cette balise doit être écrite à l’intérieur d’une boucle correspondant au type de l’objet auquel a été rajouté le champ. Par exemple, si vous avez rajouté un champ prenom aux auteurs, vous pouvez afficher le label du champ et sa valeur par une boucle du type :

<BOUCLE_personne(AUTEURS){id_auteur}>
[(#CHAMP_EXTRA{prenom, label}) : ][(#PRENOM)]
</BOUCLE_personne>

Pour saisir les traductions d’un label, vous pouvez saisir un code de langue <:code_langue:> ou <:plugin:code_langue:> ou un bloc multilingue pour saisir la traduction dans différentes langues [1]. Par exemple <multi>[fr]Prénom[en]First name</multi>.

Migrer des «Champs Extras» aux «Champs Extras 2»

Les plugins «extras» et «extras2» sont compatibles : il est donc possible d’ajouter des champs supplémentaires tout en conservant ses champs extras à l’ancienne.

Toutefois, le plugin «interface» comporte un utilitaire de migration des anciens champs «extras» vers les champs «extras2». On y accède en appelant la page ecrire/?exec=conversion_extras.

Cet utilitaire liste les champs extras définis par un $GLOBALS['champs_extras'] dans le fichier mes_options.php, et, pour chacun, signale le nombre d’objets (articles, brèves...) pour lesquels ce champ existe et a une valeur non nulle. Vous pouvez alors saisir le nom du champ extras2 vers lequel vous souhaitez migrer ces données. Après vérification de l’existence du champ en question, les données seront supprimées du champ extra à l’ancienne, et recopiées dans le champ extras2 nouvelle manière.

Restrictions d’affichage des champs (expérimental)

Depuis le début du plugin, de façon expérimentale, il existe un moyen de restreindre l’affichage des champs en fonction d’autorisations spécifiques. Deux noms d’autorisations distinctes existent : voirextra et modifierextra. Le premier permet de montrer ou non le champ dans la vue du formulaire, le second dans la saisie.

Ils s’utilisent comme ceci, en créant des fonctions adéquates d’autorisations :

function autoriser_nomtable_nomchamp_voirextra($faire, $type, $id, $qui, $opt){}
function autoriser_nomtable_nomchamp_modifierextra($faire, $type, $id, $qui, $opt){}

Exemple :

Pour afficher un champ “ville” de l’objet “article” uniquement dans la rubrique 9, on glissera dans le fichier config/mes_options.php :

function autoriser_article_ville_modifierextra_dist($faire, $type, $id, $qui, $opt){
    $id_rubrique = $opt['contexte']['id_rubrique'];
    if (!$id_rubrique) {
        $id_rubrique = sql_getfetsel("id_rubrique", "spip_articles", "id_article=".intval($id));
    }
    if ($id_rubrique == 9) {
        return true;
    }
    return false;
}
 
function autoriser_article_ville_voirextra_dist($faire, $type, $id, $qui, $opt) {
    return autoriser('modifierextra', $type, $id, $qui, $opt);
}

API simplifiée de restrictions d’affichage des champs (expérimental)

La version 1.5.0 de cextras introduit une fonction restreindre_extras pour faciliter les restrictions habituelles des champs, c’est à dire définis en fonction de la rubrique à laquelle ils appartiennent.

Ces fonctions sont a placer dans le fichier squelettes/mes_fonctions.php. Leur rôle est de créer “à la volée” les fonctions d’autorisations adequates décrites plus haut.

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

Les arguments de cette fonction sont 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 ê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, preferer 'secteur' plutot que rubriques recursive. 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_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');

Notes :

  • Par soucis d’optimisation (moins de requetes SQL), il est préférable de regrouper en 1 seul appel au lieu de plusieurs lorsque c’est possible,
  • Il n’est pas possible de définir 2 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ême 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));

Plugins compatibles avec les Champs Extras 2

La version 0.9 du plugin champs extras 2 permet d’étendre la liste des objets gérés. Des plugins peuvent donc déclarer un objet extensible via le pipeline “objets_extensibles” (à la condition que l’objet traverse un certain nombre de pipelines de SPIP).

Liste des plugins compatibles :

Footnotes

[1L’utilisation des blocs multilingue pour la saisie et l’affichage du label et de l’explication d’un champ extra est valable à partir de Champs Extra2 v1.10.0 et Interfaces pour Champs Extra v1.3.0).

updated on 2 October 2019

Discussion

287 discussions

  • Bonjour,

    Petit souci avec le champ extra de type “date” qui refuse de fonctionner avec un spip 3 beta (plugin et spip tous les deux mis à jour).
    En partie privée, lorsque je renseigne ce champ dans une rubrique, j’ai ce message d’erreur : Une erreur technique a empêché l'enregistrement correct du champ 'livre_date'

    Le fichier spip.log indique l’erreur suivante :

    Dec 21 18:02:55 127.0.0.1 (pid 20744) :Pri:CRITIQUE: Erreur enregistrement en base rubrique/10 champs :array (
      'livre_date' => 
      array (
        'post' => '30/11/0001',
        'save' => '2030-11-01 00:00:00',
      ),
    )

    Est-ce une erreur du plugin champs extras ? Si non, d’ou cela peut-il venir ?

    Reply to this message

  • 6
    Novispip

    Bonjour,

    une dernière question au sjuet des champs extra:

    Je cherche à pouvoir mettre des champs extras d’auteur sur le formulaire d’inscription. Comment faire ? La balise <!--extra--> ne marche pas.

    Merci pour l’aide !

    Cordialement,
    Novispip

    • Novispip

      j’ai essayé de creuser du côté des formulaires cvt mais c’est vraiment l’enfer, je ne maitrise pas les étapes qui conduisent à l’enregistrement des champs dans la base de données.

      Pouvez-vous me donner un coup de main ?

      Merci beaucoup !

    • personne ne sait comment ajouter des champs extras au formulaire d’inscription ?!

    • Cette demande semble récurrente. Il faudra peut être qu’on y réflechisse un peu. Au moins pour la version prévue pour SPIP 3.

    • Avec une adaptation pour spip 2.1 ça serait tip top :)

      J

    • oui, pour moi aussi, ça me serait utile.

      Jusqu’à présent, je modifie directement le fichier inscription2.html pour lui faire faire ce que je veux..

    • Bonjour,
      Associaspip 2.2 a été interfacé avec Champs Extras 2 pour pouvoir étendre une table de ce plugin (en l’occurence la table spip_asso_membres) et le manque de documentation a rendu la chose un peu longue (pas mal de temps passé a essayer de comprendre comment ca marchait sur Agenda 2 ou Médiathèque).

      Donc voilà un retour des différentes étapes, au cas où ça puisse aider quelqu’un (ça serait peut-etre bien de détailler plus le dernier paragraphe de la documentation).

      • inserer le pipeline objets_extensibles dans plugin.xml et donc le php correspondant, attention c’est le nom de l’objet et non celui de la table qui doit apparaitre (pas de s final donc). Dans la cas d’associaspip ca donne :
        function association_objets_extensibles($objets){
                return array_merge($objets, array(
                        'asso_membre' => _T('asso:membres'),
                ));
        }
      • ajouter <!--extra--> dans le html du formulaire CVT d’edition de l’objet sur lequel on ajoute les champs extras
      • l’action attachée au formulaire CVT, que ce soit dans la fonction de traitement du formulaire ou dans la fonction du répertoire action appelée par cette dernière doit modifier la table en utilisant la fonction modifier_contenu(qui d’après les commentaire du code semble etre dépreciée en SPIP3 mais n’existe sa remplacente n’existe pas en SPIP2.1) et non sql_updateq.
      • pour faire apparaitre dans une page de visualisation de l’objet les champs extras, il suffit d’utiliser le pipeline afficher_contenu_objet

    Reply to this message

  • 1

    Bonsoir,

    Impossible de créer un nouveau champ extra sur la table SYNDIC. Dans l’interface de champ extra, le nouveau champ ainsi créé est présenté comme appartenant à la table BREVES.

    Même punition en créant directement le nouveau champ via phpMyadmin dans la table sql. Le plugin le préssente encore comme appartenant à la table BREVES.

    Un bug ?

    (SPIP 2.1.11 [18566] - Champs Extra 1.10.0 - Interface pour CE 1.3.0).

    Amicalement,

    Perig

    • Après vérifications, le nouveau champ est bien créé dans la table SYNDIC. Il est bien reconnu par Spip ensuite et apparait dans la page “?exec=sites”.

      Le bug ne concerne que l’affichage des champs extra en privévia CHAMPS EXTRA INTERFACE (“?exec=iextras”)

      .

    Reply to this message

  • Bonjour j’ai une saisie de type oui-non et j’aimerai savoir comment récupérer les valeurs? Merci de votre réponse

    Reply to this message

  • hello,
    je cherche à enrichir la profil des auteurs, et j’aimerai pouvoir créer une biographie enrichie :
    -  je souhaiterai avoir un champ parcours avec une date et un commentaire (pour ça pas trop de problème)
    -  je souhaiterai que l’on puisse rentrer plusieurs dates.je me vois mal créer 50 champs extra correspondant aux 50 dernière années, je préfèrerai que l’on puisse simplement ajouter plusieurs champs années à sa bio en choisissant l’année et le contenu.
    Est-ce possible avec ce plugin? me faut-il créer un nouvel objet ? ou me diriger vers autre chose?

    Reply to this message

  • 1

    petite question completement hors sujet
    Est il possible de mettre ceci :

    1. [ (#DATE|strtotime|>{#VAL{-15days}|strtotime}|?{<img src="design/new.gif" width="22" height="9">, ''})]

    dans le fichier

    mes_fonctions.php

    pour pouvoir l’utiliser plusieurs fois si oui avec quel code
    merci d’avance

    • function filtre_nouveau_dist($date) {
      	if (strtotime($date) > strtotime("-15days")) {
      		# return '<img src="' . find_in_path('design/new.gif') . '" width="22" height="9">';
      		return '<img src="design/new.gif" width="22" height="9">';
      	}
      	return "";
      }

      Usage :

      1. [(#DATE|nouveau)]

      Il faudra peut être utiliser find_in_path pour trouver l’adresse réelle de l’image, et peut être même l’entourer de url_absolue(). Cela dépend où le filtre est utilisé :)

    Reply to this message

  • 1

    Bonjour,

    Je ne sais pas si cette question a déjà été posée... un peu trop fainéant pour lire tous les commentaires, désolé. Voici mon soucis:

    J’ai ajouté des champs à la table auteurs_spip, et certains je ne souhaite pas les afficher, et surtout pas qu’ils soient modifiables. En utilisant un input de type “hidden”, ok ça pourrait me convenir, si seulement je ne pouvais pas changer la valeur du champs si facilement avec firebug... J’ai essayé de créer un modèle supplémentaire pour les input, qui est vide, mais quand je sauvegarde mon auteur le champs dans la base de données est vidé à chaque fois.

    Y-a-t’il une solution pour moi? une option qui m’échappe? Merci d’avance.

    Benoit

    • Il faut utiliser les autorisations pour afficher ou cacher les champs dans le formulaire, en restreignant par exemple l’affichage aux administrateurs du site, ou aux webmestres. Cf «Restrictions d’affichage des champs (expérimental)» dans le texte de la doc !!

    Reply to this message

  • 2

    La méthode décrite pour créer un plugin ajoutant un champ extra ne semble plus marcher avec champs extras 3 (trunk). Par exemple le plugin “adresse_jabber” (pour prendre un exemple simple) produit une page blanche. Que faut-il modifier pour que ça fonctionne de nouveau avec CE3 ?

    • Hm, en fait dans le trunk il n’y a plus de classe ChampExtra de déclarée, du coup si on appelle $champs[] = new ChampExtra(array(...)) ça ne risque effectivement pas de marcher !

      Le truc bizarre c’est qu’à plein d’endroits du code il est fait référence à l’objet ChampExtra alors qu’il n’existe plus. Idem pour la fonction cextras_get_extra() par exemple.

    • Ah oui, tu as raison, il reste un peu de ménage à faire dans le plugin SPIP 3, mais il n’y a plus cette classe effectivement. On se replie systématiquement sur le plugin saisies.

      Il faut regarder comment fait le plugin Titre court pour les rubriques, que quelqu’un à mis correctement à jour pour la nouvelle version : http://zone.spip.org/trac/spip-zone/browser/_plugins_/champs_extras/extensions/titre_court_rubriques/trunk

    Reply to this message

  • 3

    Quelqu’un peut-il me dire pourquoi sous Spip 2.11 / iextras 1.30 et cextras 1.10 lorsque je fais :

    1. [(#CHAMP_SQL{logo_ab}|oui) OK ] j'ai bien OK qui s'affiche

    mais

    1. [(#LOGO_AB}|oui) OK ]Je n'ai rien du tout ?

    Il y a un truc qui m’échappe ?

    • Les balises #LOGO_* sont gérées par spip comme étant des logos. ICI, SPIP cherche un logo dans un objet éditorial «AB» qui évidemment n’existe pas. Pour contourner ce problème, tu peux utiliser #CHAMP_SQL{logo_ab}.

    • Je lis trop vite, la solution était déjà donnée ! :)
      Sinon, pour plus de détail, voir le fichier ecrire/balise/logo_.php

    • Mais bon sang mais c’est bien sûr !! Merci de cette précision.

    Reply to this message

  • 11

    Bonjour, je vous écris car j’ai un petit souci j’ai créé un champ extra auteurs
    Bonjour,j’ai ajouté aux rubriques un champ extra « responsables » de type « auteurs »
    j’ai souhaité dans le squelette suivant l’utiliser dans une boucle de rubrique afin d’afficher les auteurs des rubriques que j’ai séléctionner dans le champ extra “responsables” des rubriques concerné.

    Mais lorsque j’appelle cette page le site ne maffiche pas les auteurs et m’indique le message d’erreur suivant :

    1 Erreur(s) dans le squelette Numéro message squelette boucle Ligne 
    1  Critère inconnu IN ? squelettes/trombi.html _auteurs 19 
    

    Quelqu’un aurait’il une idée d’ou peu venir le problème ?

    Merci d’avance

    Je fonctionne avec spip v 2.1

    <INCLURE{fond=tete}{titre_page=Trombinoscope des responsables}>
     
     
        <h1><center>Voici l'ensemble des responsables du Groupe d'Altkirch.</center></h1>
     
     
      <BOUCLE_sommaire_unite(RUBRIQUES){par ordre_rubriques, titre}{titre_mot="menu haut"}{racine}>
        <br /><img src="dist/puce.gif" alt="-" width="8" height="11">&nbsp;<a href="#trombi_#ID_RUBRIQUE">[(#TITRE|supprimer_numero)][(#DESCRIPTIF)]</a>
      </BOUCLE_sommaire_unite>
     
      <br /><br />
     
     
      <BOUCLE_unite(RUBRIQUES){par ordre_rubriques, titre}{titre_mot="menu haut"}{racine}>
        <a name="trombi_#ID_RUBRIQUE">
        <h2>[(#TITRE|supprimer_numero)][(#DESCRIPTIF)]</h2>
        </a>
        <div class="col_trombi">
          <BOUCLE_auteurs(AUTEURS){id_auteurs IN (#RESPONSABLES|explode{","})}>
            <div class="auteur_trombi">
    	  <div class="trombi_nom_photo">
                <center><a href="#URL_AUTEUR">[(#LOGO_AUTEUR||image_reduire{100})]</a></center>
    	  </div>
    	<?php $decalage=80;?>
    	    <h3>#NOM [((#ROLE))]</h3>
            <table class="trombi_coordonnees">
    	[<tr valign="middle">
    	  <td width="100">Tél. fixe</td>
              <td>(#TEL_FIXE|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})</td>
    	</tr>]
    	[<tr valign="middle">
    	  <td>Tél. portable</td>
              <td>(#TEL_PORT|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})</td>
    	</tr>]
    	[<tr valign="middle">
    	  <td width="100">Adresse</td>
              <td>(#ADRESSE1|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})</td>
    	</tr>]
    	[<tr valign="middle">
    	  <td width="100"></td>
              <td>(#ADRESSE2|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})</td>
    	</tr>]
    	[<tr valign="middle">
    	  <td width="100"></td>
              <td>(#CP|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''}) [(#VILLE|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})]</td>
    	</tr>]
    	[<tr valign="middle">
    	  <td width="100">E-mail</td>
              <td><a href="#URL_AUTEUR">(#EMAIL|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})</a></td>
    	</tr>]
    	</table>
    	</div>
          </BOUCLE_auteurs>
        </div>
     
      </BOUCLE_unite>
     
    <INCLURE{fond=pied}>
    • Le critère {id_auteur} ne prend pas de S à la fin.

      C’est certainement juste cela.

    • En modifiant cela je n’ai plus de message d’erreur mais cela n’affiche toujours pas les auteurs

      J’ai un dout sur la définition SQL de mon champ extra “responsables” j’ai laissé : text NOT NULL DEFAULT ’’ et je ne sais pas si c’est cela qu’il faut mettre.

    • La définition SQL est correcte. Il faudrait vérifier que #RESPONSABLES retourne quelque chose, et que #RESPONSABLES|explode{,} retourne bien un tableau.

      Par exemple avec ceci pour tester (avant la boucle Auteurs) :

      [<pre>(#RESPONSABLES|print_r{1})</pre>]
      [<pre>(#RESPONSABLES|explode{,}|print_r{1})</pre>]
    • Ah, et la boucle ne renvoie par défaut que les auteurs ayant déjà publié des articles. Il faut ajouter le critère {tout} pour lister tous les auteurs, même ceux n’ayant pas d’articles publiés :)

    • La page maffiche comme résultat :

      Groupe
      2
      2

      Louveteaux / Jeanettes
      (Filles et garçons de 8 à 11 ans)

      8,4
      8,4

      Scouts / Guides
      Pionniers / Caravelles
      Compagnons / JEM
      11
      11

      Par contre j’ai également le méssage d’érreur suivant :

      Numéro message squelette boucle Ligne 
      1  Filtre ,}|print_r{1})
       
      non défini squelettes/trombi.html _unite 18 
    • Dans l’élan, je signale une dernière chose.

      1. [(#EMAIL|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})]

      Lorsque des fonctions reviennent souvent comme ça (qui plus est dans plusieurs squelettes), il vaut mieux créer un filtre spécialisé, c’est plus simple si on jour on veut modifier (on ne modifie qu’à un endroit), par exemple en créant dans un plugin ou dans le répertoire squelettes, un mes_fonctions.php en mettant quelque chose comme :

      <?php
      function filtre_mon_image_typo($texte) {
      	include_spip('inc/filtres_images');
      	$texte = filtrer('image_typo', $texte, "police=arial.ttf,taille=9");
      	$texte = filtrer('image_graver', $texte); // sauver le tout dernier traitement d'image
      	$texte = inserer_attribut($texte, 'alt', '');
      	return $texte;
      }
      ?>

      On l’applique ensuite comme ça :

      1. [(#EMAIL|mon_image_typo)]
    • il faut peut être écrire |explode{','} alors.

    • Merci beaucoup avec ta dèrnière info ca marche nickel

    • Pour ceux que ca interesse ca donne ceci a l’arrivée :

      <INCLURE{fond=tete}{titre_page=Trombinoscope des responsables}>
       
       
          <h1><center>Voici l'ensemble des responsables du Groupe d'Altkirch.</center></h1>
       
       
        <BOUCLE_sommaire_unite(RUBRIQUES){par ordre_rubriques, titre}{titre_mot="menu haut"}{racine}>
          <br /><img src="dist/puce.gif" alt="-" width="8" height="11">&nbsp;<a href="#trombi_#ID_RUBRIQUE">[(#TITRE|supprimer_numero)][(#DESCRIPTIF)]</a>
        </BOUCLE_sommaire_unite>
       
        <br /><br />
       
       
        <BOUCLE_unite(RUBRIQUES){par ordre_rubriques, titre}{titre_mot="menu haut"}{racine}>
          <a name="trombi_#ID_RUBRIQUE">
          <h2>[(#TITRE|supprimer_numero)][(#DESCRIPTIF)]</h2>
          </a>
          <div class="col_trombi">
       
            <BOUCLE_auteurs(AUTEURS){id_auteur IN (#RESPONSABLES|explode{","})}{tout}>
              <div class="auteur_trombi">
      	  <div class="trombi_nom_photo">
                  <center><a href="#URL_AUTEUR">[(#LOGO_AUTEUR||image_reduire{100})]</a></center>
      	  </div>
      	<?php $decalage=80;?>
      	    <h3>#NOM [((#ROLE))]</h3>
              <table class="trombi_coordonnees">
      	[<tr valign="middle">
      	  <td width="100">Tél. fixe</td>
                <td>(#TEL_FIXE|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})</td>
      	</tr>]
      	[<tr valign="middle">
      	  <td>Tél. portable</td>
                <td>(#TEL_PORT|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})</td>
      	</tr>]
      	[<tr valign="middle">
      	  <td width="100">Adresse</td>
                <td>(#ADRESSE1|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})</td>
      	</tr>]
      	[<tr valign="middle">
      	  <td width="100"></td>
                <td>(#ADRESSE2|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})</td>
      	</tr>]
      	[<tr valign="middle">
      	  <td width="100"></td>
                <td>(#CP|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''}) [(#VILLE|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})]</td>
      	</tr>]
      	[<tr valign="middle">
      	  <td width="100">E-mail</td>
                <td><a href="#URL_AUTEUR">(#EMAIL|image_typo{police=arial.ttf,taille=9}|inserer_attribut{alt,''})</a></td>
      	</tr>]
      	</table>
      	</div>
            </BOUCLE_auteurs>
          </div>
       
        </BOUCLE_unite>
    • petite question completement hors sujet
      Est il possible de mettre ceci :
      [ (#DATE|strtotime|>#VAL-15days|strtotime|?, ’’)]
      dans le fichier mes_fonctions.php pour pouvoir l’utiliser plusieurs fois si oui avec quel code

      merci d’avance

    • Je réécrit dsl on voir rien sur le message du dessus
      petite question completement hors sujet
      Est il possible de mettre ceci :

      1. [ (#DATE|strtotime|>{#VAL{-15days}|strtotime}|?{<img src="design/new.gif" width="22" height="9">, ''})]

      dans le fichier

      mes_fonctions.php

      pour pouvoir l’utiliser plusieurs fois si oui avec quel code

      merci d’avance

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom