SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Administration > Personnaliser l’espace privé > Personnaliser les champs privés

Personnaliser les champs de l’espace privé

mercredi 7 février 2007, par Sébastien Zamith. Dernier ajout mercredi 2 mai 2007


Comment choisir le type de champ et le texte des champs dans l’espace privé en fonction des rubriques.


Le besoin

J’ai récemment mis en ligne un site sous SPIP 1.9.1 avec les contraintes suivantes :
- nombreux rédacteurs à priori
- plusieurs types d’articles traités différemment dans les squelettes par des choix de mots clés.

Il est apparu très vite que les champs par défaut de l’espace privé (Sur-titre, Titre, Chapeau, etc.) ne seraient pas assez explicites, surtout lorsque l’on commence à detourner les champs Surtitre et Titre pour entrer Prénom et Nom par exemple.

D’autre part, suivant les rubriques les types et le nombre des données à entrer sont différents : pour une rubrique annuaire, on désirera par exemple créer des articles avec des champs Nom, Prénom, Tel, email, etc. Par contre pour une autre rubrique on ne désirera peut être pour les articles que deux champs seulement, et pour d’autres les champs classiques de SPIP.

Dans mon exemple particulier je désirais en particulier avoir une rubrique Annuaire, dans laquelle chaque personne est entrée sous la forme d’un article, une rubrique Publications, une rubrique Séminaires, etc. Lorsque un utilisateur lambda arrive sur l’interface privée du site, s’il désire entrer une nouvelle Publication par exemple, il faut qu’il puisse entrer sans avoir à se poser de questions les différents champs clairement identifiés.

La seule chose que j’ai pu trouver sur le sujet est présenté dans cet article Personnaliser son espace privé en fonction de la rubrique [1]. Elle présente cependant quelques désavantages, notamment sur l’utilisation d’un seul et même fichier de langue pour espace privé et public (on ne peut pas avoir la double fonctionnalité)

Une solution

La solution que j’ai utilisé pour répondre à ces différents impératifs est largement basée sur l’article suscité :
- Détournement des fichiers langues
- Un peu de bidouille...

Avec deux améliorations majeures :
- On garde la possibilité d’utiliser local_fr.php pour la définition des balises multilingues de l’espace public
- On peut de plus choisir quels champs afficher

Dans le dossier squelettes je crée un premier fichier local_fr.php avec mes définitions habituelles des balises cf multilinguisme et un deuxième, local_prive_fr.php dans lequel je vais définir mes champs.

La première chose à faire est de surcharger le fichier de langue en faisant trouver à spip le fichier local_prive_fr.php. Pour cela il faut ajouter à la fin de local_fr.php les lignes suivantes :

Ensuite dans le fichier local_prive_fr.php il faut redéfinir les titres des champs en fonction des rubriques (ou des articles, des brèves, etc.). Ce sera par exemple :

Evolutions possibles

Tout cela est bien sur personnalisable pour une rubrique donnée plutôt qu’un secteur, pour les brèves, etc.

Je suis sûr que tout ça devrait pouvoir se mettre sous forme de plugin, mais je sèche un peu. J’ai déjà eu du mal à aller récupérer les différentes infos dans les fichiers de spip ... Pour le texte des champs, il faut fouiller dans /ecrire/lang/ecrire_fr.php et /ecrire/lang/prive_fr.php. J’ai découvert quels champs afficher dans /ecrire/inc_articles_edit.php

À faire :
- Récupérer l’ensemble des variables qui permettent l’affichage dans l’espace privé.
- Faire un plugin ?

P.-S.

Cette contrib marche toujours aussi bien en SPIP 1.9.2a.

Notes

[1] Nota SPIP-Contrib : pour la documentation officielle concernant la définition de fichiers de langue personnels (pour redéfinir les noms des champs), voir les articles concernant le multilinguisme et particulièrement Internationaliser les squelettes > Méthode des fichiers de langue


Répondre à cet article

  • Bonjour merci pour ces infos. Est-il possible de créer une liste de choix pour le titre par exemple, avec trois valeurs possible ( maths, physique, chimie par exemple) ? merci d’avance

    Répondre à ce message

    Retour au début des forums

  • pour la version 1.9.2.d

    14 mars 2008 22:33

    Bonsoir j’ai spip 1.9.2.d et je ne trouve pas le fichier lang_privé. Est-il nommé autrement ? d’avance merci

    Répondre à ce message

    Retour au début des forums

  • Très utile

    5 février 2008 13:17, par Charles

    Ce serait vraiment bien qu’il y est un plugin. Ne connaissant pas le php j’ai un peu peur de faire des erreurs. Merci pour ta contrib en tous cas. Elle est très utile et complète.

    Répondre à ce message

    Retour au début des forums

  • Personnaliser les champs de l’espace privé

    5 août 2007 20:17, par Dominique W

    Merci pour cette contrib, elle fonctionne toujours en 192b.

    je l’ai adapté pour la personnalisation par mots clefs attachés aux rubriques.

    <?php
    // On commence par récupérer l'id article ou rubrique ou autre:
    include_spip('base/db_mysql');

    $id_art = $GLOBALS['id_article'];
    $id_rub = $GLOBALS['id_rubrique'];


    if (($id_art != '') and ($id_rub == '')) {
            $row = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_articles WHERE id_article=$id_art"));
            $id_rub  = $row['id_rubrique'];
    }
    // id du groupe de mots clefs dans lequel on veut les sélectionner
    $id_groupe_mot_cles = 2;

    if ($id_rub != '') {
            $row = spip_fetch_array(spip_query("SELECT titre FROM spip_mots join spip_mots_rubriques on spip_mots.id_mot=spip_mots_rubriques.id_mot WHERE id_rubrique=$id_rub and id_groupe=$id_groupe_mot_cles"));
            $titre  = $row['titre'];
    }

    // On peut maintenant personnaliser l'affichage de l'article à modifier
    // en fonction des mots clefs de la rubrique à laquelle il appartient

    if ($titre == 'actualites') {
            // On choisit quels champs afficher:
            $GLOBALS['meta']["articles_chapeau"] = 'oui';
    }
    ?>

    Il suffit de modifier la valeur de l’id du groupe de mots clés et ensuite de gérer comme dans les autres exemples ci-dessus la personnalisation.

    Remarque : il suffit en fait pour la personnalisation de ne redéfinir que ce qui doit être en plus ou en moins pas rapport aux réglages définis dans la configuration du site. Il n’est pas nécessaire de tout redéfinir. dans mon exemple, je veux juste le chapeau pour les articles des rubriques qui ont le mot clé "actualites".

    Répondre à ce message

    • Personnaliser les champs de l’espace privé 6 janvier 2008 15:32, par Renyon Paris

      Bonjour,

      Merci beaucoup pour ta contrib ! C’est exactement ce dont j’ai besoin. Mais j’ai testé chez moi et ça ne marche pas. Mes mot-clés sont composés et un comporte un accent.
      Peux-tu me dire si les accents, les majuscules, et mots composés d’un mot clés sont à écrire d’une façon spécifique dans le fichier local_prive_fr.php stp ?

      Merci d’avance pour ta réponse !

      Répondre à ce message

    Retour au début des forums

  • Personnaliser les champs de l’espace privé

    15 septembre 2007 09:14, par luc

    Je vins de passer à une SVN 1.9.3 et cette contrib ne semble plus marcher complètement. La personnalisation des textes est ok par contre, le choix des champs à afficher ou pas n’est plus active ?

    C’est donc dans ce bout de code que ça coince

    Quelqu’un aurait une idée, pour rétablir la situation ?

    Répondre à ce message

    • Problème 1.9.3 , je suis sur une piste 17 septembre 2007 11:37, par luc

      En regardant les fichiers spip.log et mysql.log, je constate une foison de

      Voilà, derrière cette erreur se cache à coup sûr mon problème. Si quelqu’un trouve avant moi, qu’il n’hésite pas à laisser un message ici.

      Répondre à ce message

      • Problème 1.9.3 , Fausse piste 17 septembre 2007 13:54, par luc

        Fausse piste, mais correction nécéssaire de cette contrib’ comme indiqué un peu plus bas dans le forum : http://www.spip-contrib.net/Personnaliser-les-champs-de-l#forum391158

        si on ne fait pas cette modif’, pour chaque page de l’espace privé ou public qui ne possède ni id_article, ni id_rubrique, spip fait une (ou plusieurs) requêtes inutiles et erronées (voir votre spip.log ou mysql.log pour vous en rendre compte).

        Bref, je ne sais toujours pas comment reconditionner l’affichage des champs :-(

        Répondre à ce message

        • Problème 1.9.3 , Fausse piste 20 septembre 2007 17:26, par luc

          Le conditionnement d’affichage des champs me manquait trop. Et comme je ne trouvais pas de solution au problème, j’ai bricolé une solution de dépannage, en attendant de savoir faire/prendre le temps d’un plugin pour gérer ça.

          Pour info, j’ai modifier le ecrire/inc/editer_article (et placer en surcharge dans le dossier squelettes) en passant $id_secteur à toutes les fonctions du genre editer_articles_surtitre (....) et dans ces fonctions je conditionne l’affichage dans le test :

          if (($config[’articles_surtitre_.$id_secteur] == ’non’) AND !$surtitre)

          il m’a ensuite fallu ajouter à la table spip_metas des enregistrements articles_surtitre_5 par exemple pour le secteur 5 avec une valeur à non.

          ça me dépanne en partie en attendant. Peut-être un jour je reviendrai sur quelque chose de plus propre.

          Répondre à ce message

    Retour au début des forums

  • Personnaliser les champs de l’espace privé

    11 septembre 2007 12:45, par zerax

    petit ajout de code pour dire que l’on peut aussi avoir la modification des champs de spip a l’intérieur d’une rubrique et de ses sous-rubriques.

    il suffit d’avoir un truc comme ca : par exemple pour une rubrique de type annuaire, on aurait

    $rubriques_annuaire=array(95);



    if (!defined("_ECRIRE_INC_VERSION")) return;
    include_spip('base/db_mysql');

    function get_ss_rubriques($rubriques_parent){
            if(is_array($rubriques_parent))
            foreach ($rubriques_parent as $r) {
                    $tab_ss_rubriques[]=$r;

                    $temp=spip_mysql_array(spip_query("select id_rubrique from spip_rubriques where id_parent=".$r));
                    if($temp)
                            foreach ($temp as $t)
                            {
                                    $tab_ss_rubriques[]=$t['id_rubrique'];
                                    $tab_ss_rubriques=array_merge($tab_ss_rubriques,get_ss_rubriques(array($t['id_rubrique'])));
                            }
            }

    return array_merge($rubriques_parent,$tab_ss_rubriques);
    }


    $rubriques_marches=array_unique(get_ss_rubriques($rubriques_marches));
    $rubriques_agenda=array_unique(get_ss_rubriques($rubriques_agenda));


    //récupération de l'id_rubrique sur l'édition de l'article
    if(!$id_rubrique)
    {        if($id_parent) $id_rubrique=$id_parent;
            elseif($id_article){
            $temp=spip_mysql_array(spip_query("select id_rubrique from spip_articles where id_article=".$id_article));
            if($temp[0]['id_rubrique']) $id_rubrique=$temp[0]['id_rubrique'];}
    }



    //et ici on fait vraiment le test de l'id_rubrique:
    if(in_array($id_rubrique,$rubriques_annuaire){


    //la modif des textes et noms de champs

    }

    Répondre à ce message

    Retour au début des forums

  • Bonjour, J’ai quelques soucis , il faut dans mon CMS que pour une rubrique(ici recette) que les articles contenu dans cette rubrique possede des champs pré-rempli du genre : Entrée / Plat / Dessert : permettant au rédacteur de tapé simplement le menu sans besoin de retapé Entrée / Plat / Dessert à chaque rédaction de nouvel article. Je pense que cette contrib est la solution mais je comprend pas tout vus que je débute en spip. Les deux fichiers doivent se mettre dans le répertoire squelettes ou /ecrire/lang ou /squelettes/lang ?? Et comment moditons ces deux fichiers ? ma rubrique recette est 34 et l’article 103, je dois mettre les champs :
    ->Entrée :
    ->Plat :
    ->Dessert :
    ->Intitulée :
    ->Ingrédients :
    ->Explication :
    ->Commentaires :

    ça fé plusieurs semaines que je galere à trouver la solution si vous pouviez m’aider , merci d’avance.

    Répondre à ce message

    Retour au début des forums

  • Personnaliser les champs de l’espace privé

    5 mai 2007 22:08, par Tropicaloo

    Bonjour,

    Voici un retour sur le fonctionnement que j’ai sur 1.9.2a [8878] avec des secteurs ET des rubriques :

    Secteurs (rubriques racines) :
    - page 1 édition de l’article (surtitre-titre-soustitre-descriptif-etc...) > OK
    - page 2 édition de l’article (dates-auteurs-mots-clé) > OK
    - page édition du secteur (rubrique racine) > OK

    Rubriques (sous-rubriques) :
    - page 1 édition de l’article (surtitre-titre-soustitre-descriptif-etc...) > OK
    - page 2 édition de l’article (dates-auteurs-mots-clé) > KO
    - page édition de la rubrique (sous-rubrique) > OK

    Pour la page d’édition 2 d’un article appartenant à une rubrique (sous-rubrique), c’est le contexte du secteur qui s’affiche en lieu et place de celui de la rubrique. La variable "secteur" est récupérée mais pas celle de la "rubrique".

    Si quelqu’un a une proposition sur ce point, je suis preneur !

    Répondre à ce message

    Retour au début des forums

  • Personnaliser les champs de l’espace privé

    29 avril 2007 23:21, par Tropicaloo

    Bonjour,

    Sur 1.9.2a [8878] En faisant un simple copier-coller du local_prive_fr.php (en modifiant bien sur les numéros des id des rubriques), j’ai un message d’erreur :

    Parse error : parse error in c :\program files\easyphp1-8\www\monsite\squelettes\local_prive_fr.php on line 5

    Quelqu’un a-t-il une idée ?

    Répondre à ce message

    Retour au début des forums

  • Personnaliser les champs de l’espace privé

    25 avril 2007 18:52, par Alex

    Bonjour Bravo pour ces lignes de codes qui me sont bien ytiles. Cependant je bloque un peu car dans certains cas, avec les sous rubriques, je me retrouve bloqué car le fonctionnement des sous rubriques n’est pas forcément identique pour tout un secteur. Sauriez vous comment je pourrais faire la même chose mais en renseignant les URL des rubriques plutôt que les secteurs. Je souhaiterais en fait faire comme le système de squelette cad que si on a un fichier de langue renseigné pour la rubrique mère et pas pour les sous rub = même fichier langue pour tout. Sinon le fichier de chaque rubrique et sous rub passe en premier / celui de la rubrique mère.

    Je serais très reconnaissant si quelques bonnes âmes pouvaient m’aider ... Merci

    Répondre à ce message

    • Bonjour,

      Il suffit en fait après la definition du secteur de faire un test sur $id_rubrique :

      if ($id_sect=='21'){
      //definition des champs pour le secteur 21
      }

      if ($id_rub=='210'){
      //definition des champs pour la rubrique 210 appartenant au secteur 21
      }

      et de redéfinir les champs pour cette rubrique.

      En principe ça devrait marcher.

      Répondre à ce message

      • Personnaliser les champs de l’espace privé 26 avril 2007 13:58, par Alex

        Merci de ta réponse, mais j’ai beau essayer, Je n’y arrive pas de la sorte !! J’ai essayé de faire quelque chose en fonction des id-parent mais je ne m’en sort pas non plus. La seule chose que j’ai réussi mais ça ne m’arrange pas du tout c’est de personnaliser en fonction de l’article en faisant :

        if ($id_sect==’21’ AND $id_art==’210’) // les variables

        Mais pas moyen pour les rubriques !!!! Je m’y recolle et vous tiens au courant ! mais quelle galère et j’ai si peu de temps devant moi ...

        Répondre à ce message

        • Personnaliser les champs de l’espace privé 26 avril 2007 14:22, par Alex

          Bon je pense avoir trouvé une solution du moindre mal. Pas la solution idéal qui permettrait comme je le disais au début de faire ça en fonction des rubriques mères ou sous rub. Enfin !! quoi qu’à force d’essayer plein de trucs , ça se trouve ça fonctionnerais mais je crois pas. Donc ma solution pour le faire en fonction des rubriques et ne pas avoir à le faire pour CHAQUE rub :

          // On commence par récupérer l'id article ou rubrique ou autre:

          include_spip('base/db_mysql');

          $id_art = $GLOBALS['id_article'];
          $id_rub = $GLOBALS['id_rubrique'];

          // On détermine ensuite à quel secteur appartient le rubrique ou l'article:

          if ($id_art == ''){
          $row = spip_fetch_array(spip_query("SELECT id_parent FROM spip_rubriques WHERE id_rubrique=$id_rub"));
          $id_sect  = $row['id_parent'];
          }
          if ($id_rub == ''){
          $row = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_articles WHERE id_article=$id_art"));
          $id_sect  = $row['id_rubrique'];
          }

          // On peut maintenant personnaliser l'affichage
          //de l'article à modifier
          // en fonction de la rubrique à laquelle il appartient:

          // Plusieurs rubriques avec champs similaires

          if ($id_sect=='61' || $id_sect=='62' || $id_sect=='64' || $id_sect=='65') {
          // On choisit quels champs afficher:
          $GLOBALS['meta']["articles_surtitre"] = "oui";
          $GLOBALS['meta']["articles_titre"] = "oui";
          $GLOBALS['meta']["articles_soustitre"] = "non";
          $GLOBALS['meta']["articles_descriptif"] = "oui";
          $GLOBALS['meta']["articles_chapeau"] = "non";
          $GLOBALS['meta']["articles_ps"] = "non";
          $GLOBALS['meta']["articles_redac"] = "oui";
          $GLOBALS['meta']["articles_urlref"] = "oui";

          // ... et le texte de ces champs
          $GLOBALS[$GLOBALS['idx_lang']] = array(
          'texte_sur_titre' => '<B>66666666 Titre de la page</B> (dans la barre bleue du navigateur - facultatif)',
          'info_nouvel_article' => 'Titre',
          'texte_titre_obligatoire' => '<B>Titre de l\'article</B> (obligatoire)',
          'texte_descriptif_rapide' => 'Email et/ou Site Web du prestataire',
          'texte_sous_titre' => '<B>Pr&eacute;nom</B>',
          'entree_liens_sites' => '<B>Nom du site</B> (facultatif)',
          'info_titre' => ' ',
          'info_url' => '<B>Lien vers le site du Parc (adresse)</B>',
          'texte_introductif_article' => 'Description de l\'article',

          ); }

          Voir en ligne : Pilat tourisme

          Répondre à ce message

          • Personnaliser les champs de l’espace privé 26 avril 2007 14:42, par Sébastien Zamith

            Bonjour,

            Je ne comprends pas trop le pb.

            J’ai fait chez moi le test suivant :

            - Rubrique à la racine : Test (id_rubrique = 280)

            Sous-rubrique : Test1 (id_rubrique=281)

            Sous-rubrique : Test2 (id_rubrique=282)

            Sous-rubrique de Test1 : Test11 (id_rubrique=283)

            Ensuite j’ai mis les conditions suivantes :

            // Espace privé test

            if ($id_sect=='280') {
            $GLOBALS['meta']["articles_surtitre"] = "non";

            $GLOBALS[$GLOBALS['idx_lang']] = array(

            'info_nouvel_article' => 'Test sur secteur',
            'icone_modifier_article' => 'Modifier ce test sur secteur',
            'icone_ecrire_article' => 'Cr&eacute;er un nouveau test sur secteur'

            );
            }

            if ($id_rub=='281') {
            $GLOBALS['meta']["articles_surtitre"] = "non";

            $GLOBALS[$GLOBALS['idx_lang']] = array(

            'info_nouvel_article' => 'Test sur rub',
            'icone_modifier_article' => 'Modifier ce test sur rub',
            'icone_ecrire_article' => 'Cr&eacute;er un nouveau test sur rub'
            );
            }

            Avec ça, lorsque je vais dans la rubrique Test1, j’ai bien le texte "test sur rub" qui apparait pour les articles, tandis que sous n’importe quelle autre sous rubrique de Test (y compris dans Test11), j’ai bien le texte "test sur secteur" qui apparait pour les articles.

            Bien sûr il faut tester l’id_rubrique après l’id_secteur si on désire personnaliser seulement une rubrique d’un secteur donné.

            Sébastien

            Répondre à ce message

            • Personnaliser les champs de l’espace privé 26 avril 2007 15:32, par Alex

              J’ai retenté de la sorte et ça ne fonctionne pas chez moi !!! Je ne sais pas du tout comment ça se fait !! c’est très étrange ... En tous cas merci de t’être penché sur mon cas ;)

              Je vais faire comme je l’ai écris plus haut et je retesterais plus tard sur un autre site.

              Répondre à ce message

    Retour au début des forums

  • L’espace privé en plugins obligatoire

    13 avril 2007 22:11, par westo

    bonjour !

    J’ai une suggestion, mais je ne sais pas ou le poster !! excusez moi donc si je ne suis pas à la bonne page ! Je viens du monde Drupal et j’aimerais faire profiter mon experience en tant que developpeur web confirmé.

    Ma proposition concerne l’espace privé de SPIP. Est ce qu’il ne serait pas préférable de deplacer une partie du repertoire "ecrire" pour en faire un plugin ?

    Avantages : - plus de lisibilité du fonctionnement de SPIP - plus de modularité (le systeme de plugin est une très bonne chose. merci!) - le developpement de chaque partie devient independant : la partie edition peut evoluer de maniere different que la partie statistiques par exemple

    Vos points de vue la dessus seraient la bienvenue !

    Tous pour que SPIP devienne toujours plus fort!!!!

    Répondre à ce message

    Retour au début des forums

  • Ajouter la colonne type ds spip_rubriques

    12 avril 2007 11:02, par westo

    Très bo contrib !!! Je vais me baser sur ca pour faire autre chose. Un grd merci !

    Une autre proposition : je crois qu’il serait préférable dans les versions futures de spip d’ajouter la colonne "type" dans la table "spip_rubriques".

    Je trouve que cela aura un avantage considerable, vu que bon nombre de personnes utilisent d’autres types de contenus autre que article et brève (c’est mon cas!).

    Cela va te permettre de ne pas utiliser les id des rubriques directement dans le code php, donc plus propre et plus portable (meme si les id change ca va toujours fonctionner!).

    Répondre à ce message

    Retour au début des forums

  • Personnaliser les champs de l’espace privé

    21 février 2007 09:34, par indie

    Très bien cette contrib’, bravo.

    Quelques coquilles à rectifier si possible

    1. dans le local_prive_fr, ne pas oublier de débuter par un <?php

    2. il manque l’accolade fermante dans ce passage là

    J’y retourne, merci sebastien.

    Répondre à ce message

    • Personnaliser les champs de l’espace privé 21 février 2007 10:10, par Sébastien Zamith

      Voilà, c’est corrigé !

      Merci de me l’avoir signalé.

      Répondre à ce message

      • Personnaliser les champs de l’espace privé 21 février 2007 10:51, par indie

        Le seul truc que je n’arrive pas à faire puisque spip ne semble pas proposer de meta pour ça, c’est de ne pas afficher le formulaire texte. En effet, j’ai quelques rubriques ou l’on ne renseigne que les champs titre, descriptif, ... et quelques mots-clés mais jamais de texte.

        Un $GLOBALS[’meta’]["articles_texte"] aurait été le bienvenu. Hélas pas prévu dans spip.

        Si jamais quelqu’un trouvait une astuce à intégrer dans cette contrib’, je suis preneur.

        Répondre à ce message

        • Personnaliser les champs de l’espace privé 22 février 2007 09:57, par indie

          Finalement, j’ai trouvé la solution, mais j’ai tout de même déposer un ticket sur le trac spip, pour une éventuelle intégration dans le core.

          Donc pour ceux que ça intéresse : Dans le local_prive_fr.php, $GLOBALS['meta']["articles_texte"] = "non";

          Et le plus "gênant" dans un dossier /squelettes/inc , il faut copier le fichier /ecrire/inc/editer_article_texte et ajouter à la fonction editer_article_texte la condition comme suit :

          Je n’ai pas encore trouvé comment surcharger uniquement la fonction.

          Répondre à ce message

    Retour au début des forums

0 | 25



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net