SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

290 Plugins, 198 contribs sur SPIP-Zone, 117 visiteurs en ce moment

Accueil > Améliorations de l’espace privé > Champs extra > Champs Extras 3 - API et créations

Champs Extras 3 - API et créations

22 mars 2012 – par Matthieu Marcillaud – 64 commentaires

27 votes

Dans ce document vous trouverez expliquées les API disponibles dans le plugin « Champs Extras 3 » 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 un interface graphique pour gérer ces champs.

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 :

  1. <?php
  2. include_spip('inc/cextras_autoriser');
  3.  
  4. // restreindre le champ 'gamma' des articles, sur la rubrique 2
  5. restreindre_extras('article', 'gamma', 2);
  6. // restreindre le champ 'alpha' et 'beta' des articles, sur les rubriques 2 et 3
  7. restreindre_extras('article', array('alpha', 'beta'), array(2, 3));
  8. // restreindre le champ 'iota' des rubriques, sur la rubrique 37
  9. restreindre_extras('rubrique', 'iota', 37);
  10. // restreindre le champ 'iota' des rubriques, sur la rubrique 37 et ses sous rubriques
  11. restreindre_extras('rubrique', 'iota', 37, 'rubrique', true);
  12. // restreindre les champs 'alpha' et 'beta' des articles, sur les rubriques 37 et 38 et leurs enfants
  13. restreindre_extras('article', array('alpha', 'beta'), array(37, 38), 'rubrique', true);
  14. // lorsqu'on veut appliquer sur un secteur, préférer 'secteur' plutôt que rubriques récursives. Pour restreindre au secteur 2 :
  15.  restreindre_extras('article', 'beta', 2, 'secteur');
  16.  
  17. ?>

Télécharger

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 :

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

Télécharger

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

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

Télécharger

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 :

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

Télécharger

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.
    1. // impossible (seul le 1er est pris en compte) :
    2. restreindre_extras('article', 'c1', 1);
    3. restreindre_extras('article', 'c1', 2);
    4. // Utiliser :
    5. restreindre_extras('article', 'c1', array(1, 2));
    6.  
    7. // Mais grouper les champs dés que c'est possible (mêmes identifiants d'application). Si :
    8. restreindre_extras('article', 'c1', array(1, 2));
    9. restreindre_extras('article', 'c2', array(1, 2));
    10. // Préférer :
    11. restreindre_extras('article', array('c1', 'c2'), array(1, 2));

    Télécharger

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 :

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

Télécharger

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 :

  1. /* AUTORISATIONS */
  2. function grainepc_objet_est_carto($objet, $id) {
  3.         $compo = compositions_determiner($objet, $id);
  4.         return ($compo == 'carte');
  5. }
  6.  
  7. // autorisations des champs extras de carte ...
  8. foreach (array(
  9.         'declinaison',
  10.         'structure',
  11.         'affichage',
  12.         'date_creation',
  13.         'coordonnees',
  14.         'presentation',
  15.         'infos') as $nom)
  16. {
  17.         $m = "autoriser_article_modifierextra_" . $nom . "_dist";
  18.         $v = "autoriser_article_voirextra_" . $nom . "_dist";
  19.  
  20.         $code = "
  21.                 if (!function_exists('$m')) {
  22.                         function $m(\$faire, \$type, \$id, \$qui, \$opt) {
  23.                                 return grainepc_objet_est_carto(\$type, \$id);
  24.                         }
  25.                 }
  26.                 if (!function_exists('$v')) {
  27.                         function $v(\$faire, \$type, \$id, \$qui, \$opt) {
  28.                                 return grainepc_objet_est_carto(\$type, \$id);
  29.                         }
  30.                 }
  31.         ";
  32.  
  33.         # var_dump($code);
  34.         eval($code);
  35. }

Télécharger

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 :

  1. <paquet
  2.                 prefix="titrecourt"
  3.                 categorie="outil"
  4.                 version="1.1.0"
  5.                 etat="stable"
  6.                 compatibilite="[3.0.0-beta;["
  7.                 logo=""
  8.                 schema="0.0.1"
  9. >
  10.         <nom>Titre Court pour Rubriques</nom>
  11.  
  12.         <auteur>Matthieu Marcillaud [->magraine.net]</auteur>
  13.         <licence>GNU/GPL</licence>
  14.  
  15.         <necessite nom="cextras" compatibilite="[3.0.5;[" />
  16.  
  17.         <pipeline nom="declarer_champs_extras" inclure="base/titrecourt.php" />
  18. </paquet>

Télécharger

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 :

  1. <?php
  2. if (!defined("_ECRIRE_INC_VERSION")) return;
  3.  
  4. function titrecourt_declarer_champs_extras($champs = array()) {
  5.   $champs['spip_rubriques']['titre_court'] = array(
  6.       'saisie' => 'input',//Type du champ (voir plugin Saisies)
  7.       'options' => array(
  8.             'nom' => 'titre_court',
  9.             'label' => _T('titrecourt:titre_court'),
  10.             'sql' => "varchar(30) NOT NULL DEFAULT ''",
  11.             'defaut' => '',// Valeur par défaut
  12.             'restrictions'=>array('voir' => array('auteur' => ''),//Tout le monde peut voir
  13.                         'modifier' => array('auteur' => 'webmestre')),//Seuls les webmestres peuvent modifier
  14.       ),
  15.   );
  16.   return $champs;      
  17. }
  18. ?>

Télécharger

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 5 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 !)
    • ’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’.

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 :

  1. <?php
  2. if (!defined("_ECRIRE_INC_VERSION")) return;
  3.  
  4. include_spip('inc/cextras');
  5. include_spip('base/titrecourt');
  6.        
  7. function titrecourt_upgrade($nom_meta_base_version,$version_cible) {
  8.  
  9.   $maj = array();
  10.   cextras_api_upgrade(titrecourt_declarer_champs_extras(), $maj['create']);    
  11.  
  12.   include_spip('base/upgrade');
  13.   maj_plugin($nom_meta_base_version, $version_cible, $maj);
  14.  
  15. }
  16.  
  17. function titrecourt_vider_tables($nom_meta_base_version) {
  18.   cextras_api_vider_tables(titrecourt_declarer_champs_extras());
  19.   effacer_meta($nom_meta_base_version);
  20. }
  21. ?>

Télécharger

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

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

Télécharger

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

  1. <?php
  2.  
  3. if (!defined("_ECRIRE_INC_VERSION")) return;
  4.  
  5. function grainepc_declarer_champs_extras($champs = array()){
  6.     $champs['spip_auteurs']['telephone'] = array(
  7.         'saisie' => 'input', // Type du champs (voir plugin Saisies)
  8.         'options' => array(
  9.             'nom' => 'telephone',
  10.             'label' => _T('grainepc:info_telephone'),
  11.             'sql' => "varchar(30) NOT NULL DEFAULT ''",
  12.             'defaut' => '',// Valeur par défaut
  13.         ));
  14.  
  15.     $champs['spip_articles']['declinaison'] = array(
  16.         'saisie' => 'input', // Type du champs (voir plugin Saisies)
  17.         'options' => array(
  18.             'nom' => 'declinaison',
  19.             'label' => _T('grainepc:info_declinaison'),
  20.             'sql' => "text DEFAULT '' NOT NULL",
  21.             'defaut' => '',// Valeur par défaut
  22.             'traitements' => '_TRAITEMENT_TYPO',
  23.         ));
  24.  
  25.     $champs['spip_articles']['structure'] = array(
  26.         'saisie' => 'radio', // Type du champs (voir plugin Saisies)
  27.         'options' => array(
  28.             'nom' => 'structure',
  29.             'label' => _T('grainepc:info_type_structure'),
  30.             'sql' => "varchar(30) NOT NULL DEFAULT ''",
  31.             'defaut' => '',// Valeur par défaut
  32.             'datas' => array(
  33.                 '' =>  _T('grainepc:info_rien'),
  34.                 'structure' =>  _T('grainepc:info_structure'),
  35.                 'structure_adherente' =>  _T('grainepc:info_structure_adherente'),
  36.             ),
  37.         ));
  38.  
  39.  
  40.     $champs['spip_articles']['affichage'] = array(
  41.         'saisie' => 'radio', // Type du champs (voir plugin Saisies)
  42.         'options' => array(
  43.             'nom' => 'affichage',
  44.             'label' => _T('grainepc:info_affichage'),
  45.             'sql' => "varchar(30) NOT NULL DEFAULT 'complet'",
  46.             'defaut' => 'complet',// Valeur par défaut
  47.             'datas' => array(
  48.                 'complet' =>  _T('grainepc:info_complet'),
  49.                 'reduit' =>  _T('grainepc:info_reduit'),
  50.             ),
  51.         ));
  52.        
  53.     $champs['spip_articles']['date_creation'] = array(
  54.         'saisie' => 'date', // Type du champs (voir plugin Saisies)
  55.         'options' => array(
  56.             'nom' => 'date_creation',
  57.             'label' => _T('grainepc:info_date_creation'),
  58.             'sql' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
  59.             'defaut' => '',// Valeur par défaut
  60.         ),
  61.         'verifier' => array(
  62.             'type' => 'date',
  63.             'options' => array(
  64.                 'normaliser' => 'datetime',
  65.             )
  66.         ));
  67.  
  68.     $champs['spip_articles']['coordonnees'] = array(
  69.         'saisie' => 'textarea', // Type du champs (voir plugin Saisies)
  70.         'options' => array(
  71.             'nom' => 'coordonnees',
  72.             'label' => _T('grainepc:info_coordonnees'),
  73.             'sql' => "text DEFAULT '' NOT NULL",
  74.             'defaut' => '',// Valeur par défaut
  75.             'rows' => 4,
  76.             'traitements' => '_TRAITEMENT_RACCOURCIS',
  77.         ));
  78.  
  79.     $champs['spip_articles']['presentation'] = array(
  80.         'saisie' => 'textarea', // Type du champs (voir plugin Saisies)
  81.         'options' => array(
  82.             'nom' => 'presentation',
  83.             'label' => _T('grainepc:info_presentation'),
  84.             'sql' => "text DEFAULT '' NOT NULL",
  85.             'defaut' => '',// Valeur par défaut
  86.             'rows' => 6,
  87.             'traitements' => '_TRAITEMENT_RACCOURCIS',
  88.         ));
  89.  
  90.     $champs['spip_articles']['infos'] = array(
  91.         'saisie' => 'textarea', // Type du champs (voir plugin Saisies)
  92.         'options' => array(
  93.             'nom' => 'infos',
  94.             'label' => _T('grainepc:info_infos'),
  95.             'sql' => "text DEFAULT '' NOT NULL",
  96.             'defaut' => '',// Valeur par défaut
  97.             'rows' => 5,
  98.             'traitements' => '_TRAITEMENT_RACCOURCIS',
  99.         ));
  100.        
  101.     return $champs;    
  102. }
  103.  
  104. ?>

Télécharger

Installation

  1. <?php
  2.  
  3. include_spip('inc/cextras');
  4. include_spip('base/grainepc');
  5.  
  6. function grainepc_upgrade($nom_meta_base_version,$version_cible){
  7.         $maj = array();
  8.  
  9.         cextras_api_upgrade(grainepc_declarer_champs_extras(), $maj['create']);
  10.         cextras_api_upgrade(grainepc_declarer_champs_extras(), $maj['1.1.0']);
  11.         cextras_api_upgrade(grainepc_declarer_champs_extras(), $maj['1.2.0']);
  12.         $maj['1.2.0'][] = array('sql_alter',"TABLE spip_auteurs DROP type");
  13.         cextras_api_upgrade(grainepc_declarer_champs_extras(), $maj['1.3.0']);
  14.        
  15.         include_spip('base/upgrade');
  16.         maj_plugin($nom_meta_base_version, $version_cible, $maj);
  17. }
  18.  
  19. function grainepc_vider_tables($nom_meta_base_version) {
  20.         cextras_api_vider_tables(grainepc_declarer_champs_extras());
  21.         effacer_meta($nom_meta_base_version);
  22. }
  23.  
  24. ?>

Télécharger

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

  1. <?php
  2.  
  3. if (!defined("_ECRIRE_INC_VERSION")) return;
  4.  
  5. function numadresse_declarer_champs_extras($champs = array()){
  6.  
  7.     $champs['spip_auteurs']['numeros'] = array(
  8.         'saisie' => 'fieldset',//Type du champ (voir plugin Saisies)
  9.         'options' => array(
  10.             'nom' => "numeros",
  11.             'label' => _T('numadresse:legend_numeros')
  12.         ),
  13.         'saisies' => array(
  14.             'telephone' = array(
  15.                 'saisie' => 'input', // Type du champs (voir plugin Saisies)
  16.                 'options' => array(
  17.                     'nom' => 'telephone',
  18.                     'label' => _T('numadresse:info_telephone'),
  19.                     'sql' => "varchar(30) NOT NULL DEFAULT ''",
  20.                     'defaut' => '',// Valeur par défaut
  21.                 )),
  22.             'fax' = array(
  23.                 'saisie' => 'input', // Type du champs (voir plugin Saisies)
  24.                 'options' => array(
  25.                     'nom' => 'fax',
  26.                     'label' => _T('numadresse:info_fax'),
  27.                     'sql' => "varchar(30) NOT NULL DEFAULT ''",
  28.                     'defaut' => '',// Valeur par défaut
  29.                 ))
  30.     );
  31.     $champs['spip_auteurs']['adresse'] = array(
  32.         'saisie' => 'fieldset',//Type du champ (voir plugin Saisies)
  33.         'options' => array(
  34.             'nom' => "adresse",
  35.             'label' => _T('numadresse:legend_adresse')        
  36.         ),
  37.         'saisies' => array(
  38.             'adresse' = array(
  39.                 'saisie' => 'input', // Type du champs (voir plugin Saisies)
  40.                 'options' => array(
  41.                     'nom' => 'adresse',
  42.                     'label' => _T('numadresse:info_adresse'),
  43.                     'sql' => "text NOT NULL DEFAULT ''",
  44.                     'defaut' => '',// Valeur par défaut
  45.                 )),
  46.             'code_postal' = array(
  47.                 'saisie' => 'input', // Type du champs (voir plugin Saisies)
  48.                 'options' => array(
  49.                     'nom' => 'code_postal',
  50.                     'label' => _T('numadresse:info_code_postal'),
  51.                     'sql' => "varchar(30) NOT NULL DEFAULT ''",
  52.                     'defaut' => '',// Valeur par défaut
  53.                 ))
  54.     );
  55.  
  56.     return $champs;
  57. }
  58.  
  59. ?>

Télécharger

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.

Voir en ligne : https://plugins.spip.net/cextras

Dernière modification de cette page le 15 juin 2018

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 14 juin à 15:59, par DD En réponse à : Champs Extras 3 - API et créations

    Je voudrais empêcher l’affichage de certains champs extras auteur sur le site public.

    J’ai donc coché dans l’interface champ extra :

    1.     Restriction
    2.     Technique
    3. Voir la saisie
    4. Par auteur
    5. Tout le monde peut
    6. Seulement les administrateurs (même restreints)

    Télécharger

    mais cela ne restreint rien.

    donc dans mes_options.html j’ai ajouté comme dit dans cet article

    1. <?php
    2. // seuls les redacteurs et admins peuvent voir
    3. function autoriser_auteur_voirextra_inscrit_tel() {
    4.     return in_array($qui['statut'], array('0minirezo', '1comite'));
    5. }
    6. ?>

    Télécharger

    idem : tout s’affiche

    est-ce que cela devrait fonctionner ou bien il faut ajouter d’autres fichiers d’autorisation quelque part ?

    Merci

    • Le 15 juin à 11:09, par Matthieu Marcillaud En réponse à : Champs Extras 3 - API et créations

      Ah oui, mais il maque les paramètres de la fonction !
      Je vais aussi les ajouter dans l’exemple !

      1. // seuls les redacteurs et admins peuvent voir
      2. function autoriser_auteur_voirextra_inscrit_tel($faire, $type, $id, $qui, $opt) {
      3.     return in_array($qui['statut'], array('0minirezo', '1comite'));
      4. }

      Télécharger

      Cela étant dit… lorsque tu dis « sur le site public »… ces autorisations ne sont pas concernées.
      Elles ne sont testées que sur l’espace privé par le plugin champs extras.

      Pour ajouter des autorisations dans l’espace public (dans tes squelettes donc), tu peux soit appeler l’autorisation toi-même, soit définir ce que tu souhaites :

      1. [(#AUTORISER{voirextra, auteur, '', '', #ARRAY{champ,inscrit_tel}}|oui)
      2.     #INSCRIT_TEL
      3. ]
      4.  
      5. ou
      6. [(#AUTORISER{ecrire}|oui)
      7.     ... je peux accéder à l’espace privé ...
      8. ]
      9.  
      10. ou faire ta propre autorisation
      11. [(#AUTORISER{voir, _champs_admins}|oui)
      12.     ... avec la fonction autoriser_champsadmins_voir_dist($faire, $type, $id, $qui, $opt)...
      13. ]

      Télécharger

    • Le 14 octobre à 01:18, par DD En réponse à : Champs Extras 3 - API et créations

      J’y reviens..

      Les modèles du plugin réservation événements ont changé et tous les champs extras sont maintenant récupérés par :

      <BOUCLE_champs_extras2(DATA){source tableau,#GET{valeurs_extras}}>
      #SET{valeurs_extras,#ARRAY}
      [(#VALEUR)]
      </BOUCLE_champs_extras2>

      donc je crois que si je veux appliquer une restriction sur un seul champ il faut « exploser » la boucle DATA

    Répondre à ce message

  • Le 28 août à 10:20, par Dmitry En réponse à : Champs Extras 3 - API et créations

    Bonjour

    Très utile et bon plug-in ! Avec l’aide de ce plugin, j’ai créé des champs externes supplémentaires dans l’en-tête des produits.
    Dans les champs supplémentaires, les données saisies sont visibles dans la partie administrative, mais le site s’affiche sous forme de texte non formaté. En outre, le plug-in Albums 3 dans la partie administrative est visible, mais le site n’est pas visible. Dis-moi, s’il te plaît, quoi et où le réparer. Merci
    Je m’excuse pour ma mauvaise langue.

    Répondre à ce message

  • Le 14 juin à 15:26, par DD En réponse à : Champs Extras 3 - API et créations

    Je voudrais restreindre l’affichage de certains champs extra auteur sur le site public.

    Dans l’interface champ extras je les ai mis comme

     Voir la saisie
    Par auteur
    Tout le monde peut
    Seulement les administrateurs (même restreints)

    mais cela ne change rien à l’affichage (tout le monde voit tout)

    Donc en farfouillant je tombe sur cette page pour l’API.

    J’ai mis dans mes_options.html comme dans l’exemple ici https://contrib.spip.net/local/cache-code/a8d12f430d8b77f0ee35717f5ca1dc6c.txt :

    1. <?php
    2. // seuls les redacteurs et admins peuvent voir
    3. function autoriser_auteur_voirextra_inscrit_tel() {
    4.     return in_array($qui['statut'], array('0minirezo', '1comite'));
    5. }
    6. ?>

    Télécharger

    idem : aucune restriction n’est appliquée.

    Est-ce que cela devrait suffire ou bien il faut aussi créer d’autres fichiers d’autorisations ?

    Merci

    Répondre à ce message

  • Le 26 octobre 2017 à 18:34, par ecreatures En réponse à : Champs Extras 3 - API et créations

    Bonjour

    J’ai un problème avec un bouton radio…il reprend sa valeur par défaut à chaque fois que j’ouvre un article pour l’editer…et je dois recliquer pour mettre ma valeur a chaque fois.
    — est ce que j’ai loupé quelque chose dans la config ou est ce que ce serait un bug avec la 3.2 ?

    Répondre à ce message

  • Le 5 octobre 2017 à 19:24, par rostichep En réponse à : Champs Extras 3 - API et créations

    Bonjour

    J’ajoute un champ « Sélecteur d’article » et après dans mon squelettes je met quoi pour récupérer les titres, logo, url de mes articles sélectionnés. ?
    J’ai trouvé ce bout de code a force de chercher sur le web, mais ça m’affiche qu’un seul résultat.

    Merci de votre aide.

    1. <BOUCLE_a(ARTICLES){id_article=#SELECTEUR_ARTICLE_1|picker_selected{article}|table_valeur{0}}>
    2. #LOGO_ARTICLE #TITRE
    3. </BOUCLE_a>

    Télécharger

    Répondre à ce message

  • Le 12 septembre 2017 à 22:02, par placido En réponse à : Champs Extras 3 - API et créations

    Je poste ici 2 observations qui feront peut-être gagner du temps à certains.
    -  un champ de type date gère la définition SQL datetime 0000-00-00 00:00:00, mais pas date 0000-00-00. (Pas très grave, mais mieux vaut le savoir)
    -  un champ de type date doit obligatoirement comprendre la partie normalisation (tableau : vérifier), sinon enregistrement impossible.

    Champs extras 3.11.4

    Et toujours merci à Marcimat !

    Répondre à ce message

  • Le 10 août 2017 à 12:06, par Ramina En réponse à : Champs Extras 3 - API et créations

    Bonjour,

    J’ai un Champs Extras constitué d’un bloc de texte supplémentaire dans Articles. Ma boucle (ARTICLES) fait paraitre ce bloc de texte dans les articles de toutes les rubriques. Or, je voudrais limiter la parution à certaines rubriques (ou le supprimer dans les autres, ce qui revient au même). Les techniques traditionnelles utilisées dans les boucles pour sélectionner des rubriques ou en exclure sont inopérantes.

    Je me tourne donc vers les solutions proposées ici et je mets un fichier mes_fonctions dans le squelette… et ça ne marche pas non plus !

    Voici le code :

    <?php
    include_spip('inc/cextras_autoriser');
    // restreindre le champ 'bloc_extra_site' des articles, sur la rubrique 5
    restreindre_extras('article', 'bloc_extra_site', 5);
    ?>

    Merci de me donner une piste
    Ramina

    Répondre à ce message

  • Le 24 octobre 2016 à 18:11, par Ruminez En réponse à : Champs Extras 3 - API et créations

    Bonjour,
    J’utilise cextra, l’interface graphique et inscriptions3.
    Lorsqu’un utilisateur s’inscrit, les champs sont bien récupérés sauf les « extras ». Cependant, en modification de fiche (utilisateur ou admin), tout se passe bien.
    Bien entendu, rien dans les logs d’erreur
    Y a-t-il quelque chose que j’ai loupé ?
    Merci pour votre aide

    Répondre à ce message

  • Le 22 août 2016 à 08:18, par PRX En réponse à : Champs Extras 3 - API et créations

    bonjour,
    une remarque / erreur à l’upgrade de 3.0.19 à 3.1.1 : j’ai un message :

    « Fatal error : Call to undefined function cextras_declarer_tables_objets_sql() in /home/yanfoom/www/plugins/auto/cextras/v3.8.0/cextras_options.php on line 39 »

    j’ai fait recharger la page et ai une page de spip normale en 3.1.1.
    Je n’ai pas testé les fonctionnalités pour valider son fonctionnement.
    Peut-être une correction ?

    • Le 22 août 2016 à 13:06, par Pierre KUHN En réponse à : Champs Extras 3 - API et créations

      Bonjour,

      les plugins était à jour avant l’upgrade de spip ?

    • Le 22 août 2016 à 13:26, par PRX En réponse à : Champs Extras 3 - API et créations

      Bonjour, merci de votre réponse.
      ce plugin oui, MAIS un autre ne l’était PAS (un thème non disponible en 3.1) et a disparu du coup : est-ce cela ?

    • Le 23 août 2016 à 08:10, par Pierre KUHN En réponse à : Champs Extras 3 - API et créations

      Bonjour,

      Logiquement non.
      Cache vider de spip pour corriger le problème ?

    • Le 24 août 2016 à 08:36, par PRX En réponse à : Champs Extras 3 - API et créations

      bonjour - merci : votre plugin était mis à jour depuis fort longtemps avant la bascule - je n’avais pas vidé le cache avant la bascule en 3.1.1.
      J’ai rechargé la page (bouton du navigateur) et ai obtenu une page de spip normale en 3.1.1. Il n’y a à priori pas de conséquence ni de blocage bien que je n’aie pas utilisé les champs extra depuis.

    Répondre à ce message

  • Le 2 décembre 2015 à 09:18, par Peetdu En réponse à : Champs Extras 3 - API et créations

    J’ai un petit soucis avec la restriction par rubrique. En elle même elle marche bien. Mais il y a un effet indésirable avec les boutons du menu de raccourcis (Créer un nouvel article, etc.).

    Lorsque le rédacteur est en page d’accueil du Back office et qu’il clique sur le raccourci rapide « Écrire un nouvel article », ne sachant pas alors dans quelle rubrique il va le créer, aucun des champs extras n’apparait dans formulaire d’édition article.

    Une solution serait de faire apparaître ces champs extra ad-hoc au moment ou le rédacteur à choisi sa rubrique. Est-ce possible ?

    P
    ps : cette solution m’a été suggérée par deux rédacteurs

    • Le 2 décembre 2015 à 17:40, par Matthieu Marcillaud En réponse à : Champs Extras 3 - API et créations

      En l’état : non.
      Il faudrait recharger le formulaire à chaque changement de rubrique dans le sélecteur, et on risquerait de perdre des données déjà saisies.

      C’est un « problème » connu cependant.

      Pour info, les boutons d’actions rapide ont la rubrique indiquée si on se trouve, justement dans une rubrique. Le problème est donc plus visible lorsqu’on clique dessus depuis le sommaire par exemple.

    • Le 3 décembre 2015 à 08:22, par Peetdu En réponse à : Champs Extras 3 - API et créations

      Ok. Merci pour ces éclaircissements.

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • spiPDF : générer des contenus sur mesure en PDF

    16 février 2011 – 239 commentaires

    Le plugin spiPDF génère des fichiers au format PDF d’article ou de tout autre élément SPIP, simplement à partir d’un squelette construit au format HTML 4 et facile à modifier. Avertissement de sécurité Ce plugin a fait l’objet d’une faille de sécurité (...)

  • Hébergeurs payants

    24 janvier 2009 – 35 commentaires

    Cet article en encore à réorganiser / scinder en deux selon le type (mutualisé ou pro). À priori, SPIP fonctionnera sur tout hébergeur payant traditionnel (qui propose PHP et MySQL). Merci de ne pas mettre des remarques du genre « l’hébergeur truc (...)

  • MediaBox

    10 mai 2010 – 541 commentaires

    Avertissement Le présent plugin est installé et activé par défaut sur toute les version de SPIP > 3.0. Inutile donc de l’installer manuellement sauf si vous utilisez SPIP 2.1. Aperçu La MediaBox est une Boîte multimédia polyvalente et (...)

  • Convertir un site SPIP 3 en utf-8 avec le plugin Grenier

    8 janvier 2014 – 24 commentaires

    SPIP 3 fonctionne nativement avec l’encodage universel unicode utf-8. Sur certains sites (par exemple sur une mise à jour), on peut avoir un site qui est resté en iso-latin ce qui n’est pas conseillé (source de bugs, d’incompatibilité, ...) . (...)

  • DocumentationFormsTables

    9 décembre 2006 – commentaires

    Article publié : ces notes et d’autres sont désormais publiées sur SPIP-Contrib ici Forms & tables - carnet de notes, donc il faut mieux y aller pour tout complément Différence entre un formulaire et une table un formulaire est dédié a la saisie (...)