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 :
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// ESPACE PUBLIC
$GLOBALS[$GLOBALS['idx_lang']] = array(
'balise1' => 'Ma première balise',
'balise2' => 'Ma deuxième balise'
);
if ($f = chercher_module_lang('local_prive_fr'))
surcharger_langue($f);
?>
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 :
<?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'];
// On détermine ensuite à quel secteur appartient le rubrique ou l'article:
if ($id_art == ''){
$row = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_rubriques WHERE id_rubrique=$id_rub"));
$id_sect = $row['id_secteur'];
}
if ($id_rub == ''){
$row = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_articles WHERE id_article=$id_art"));
$id_sect = $row['id_secteur'];
}
// On peut maintenant personnaliser l'affichage
//de l'article à modifier
// en fonction du secteur auquel il appartient:
// Espace privé: Annuaire
if ($id_sect=='21') {
// On choisit quels champs afficher:
$GLOBALS['meta']["articles_surtitre"] = "oui";
$GLOBALS['meta']["articles_titre"] = "oui";
$GLOBALS['meta']["articles_soustitre"] = "oui";
$GLOBALS['meta']["articles_descriptif"] = "non";
$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>Numéro de téléphone</B>',
'info_nouvel_article' => 'Nouveau membre',
'texte_titre_obligatoire' => '<B>Nom (pas tout en majuscule!)</B>',
'texte_sous_titre' => '<B>Prénom</B>',
'entree_liens_sites' => '<B>Adresse email</B>',
'info_titre' => ' ',
'info_url' => '<B>URL site personnel</B>',
'texte_introductif_article' => ' ',
'icone_ecrire_article' => 'Créer un nouveau membre',
'icone_modifier_article' => 'Modifier ce membre'
);
}
// Espace privé : Publications du labo
if ($id_sect=='13') {
$GLOBALS['meta']["articles_surtitre"] = "non";
$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";
$GLOBALS[$GLOBALS['idx_lang']] = array(
'info_nouvel_article' => 'Nouvelle Publication',
'texte_titre_obligatoire' => '<B>Titre de la publi</B>',
'texte_descriptif_rapide' => 'Liste d\'auteurs:',
'texte_contenu_article' => ' ',
'entree_liens_sites' => '<B>Référence bibliographique</B> (Par ex: Phys. Rev. A, 68, 012712/1-8, (2003))',
'info_titre' => ' ',
'info_url' => '<B>Lien vers l\'article en ligne:</B>',
'info_texte' => 'Abstract de l\'article',
'icone_ecrire_article' => 'Créer une nouvelle publi',
'icone_modifier_article' => 'Modifier cette publi',
'titre_mots_cles' => 'Mots-clés<p><b>Attention! Pensez à rajouter les mots clé Equipe, Année de publication et revue à comité de lecture!</b></p>'
);
}
?>
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 ?
Pour Spip 2.0
La philosophie de la contrib reste essentiellement la même.
Il y a juste quelques petites modifications à prendre en compte :
- Tout d’abord, il faut mettre les fichiers local_fr.php et local_prive_fr.php dans le dossier squelettes/lang (à créer s’il n’existe pas). En effet la fonction chercher_module_lang ne recherche que dans les dossiers nommés lang/.
- Ensuite pour récupérer les variables $id_rubrique et $id_article, il faut passer par un $_GET. Le début du fichier local_prive_fr.php devient :
<?php
$id_art = $_GET['id_article'];
$id_rub = $_GET['id_rubrique'];
if ($id_art == '')
{ $row = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_rubriques WHERE id_rubrique=$id_rub"));
$id_sect = $row['id_secteur'];
}
if ($id_rub == ''){
$row = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_articles WHERE id_article=$id_art")); $id_sect = $row['id_secteur'];
}
Noter qu’il n’y plus le include_spip(’base/db_mysql’) ;.
On peut ensuite faire les tests sur $id_rub et $id_art pour afficher les champs souhaités et/ou changer leur intitulé.
Discussions par date d’activité
35 discussions
Je me réponds à moi même, j’ai trouvé :
’info_post_scriptum’
Répondre à ce message
Bonjour et merci pour cette contrib !!
Je suis sur spip 205 et je n’arrive pas à personnaliser le champs ’PS’.
Dans local_prive_fr.php j’ai bien fait choisir le champs ps a faire apparaitre :
$GLOBALS[’meta’][« articles_ps »] = « oui » ;
donc là pas de souci, il apparait bien mais, n’étant pas une experte du php, je n’arrive pas à le renommer... J’ai essayé plusieurs écriture sans succès du style :
’texte_post-scriptum’ => ’tarifs, contact’,
Quelle est la bonne écriture ? Merci pour votre aide !!
Répondre à ce message
Bon, le mieux que j’ai pu faire pour spip 2.0, c’est la modif suivante
ça élimine tout les problèmes de logs intempestif évoqués par ailleurs, et ça fonctionne à merveille.
Seul truc que je n’ai pas réussi à adapter à partir de la tentative de matthieu marcillaud, c’est la mise au norme des spip_fetch_array/spip_query à la sauce 2.0. Page blanche quoi qu’il arrive. En attendant un connaisseur, c’est tout de même parfaitement fonctionnel en l’état.
Luc.
Répondre à ce message
Juste une note pour la V2 (je n’ai absolument pas testé) : en voyant le code proposé, je vois que les requetes SQL ne sont pas adaptées à SPIP 2 et n’utilisent pas les fonctions sql_*(). Voici (sans vérifier) les modifications à apporter :
Original
Pour SPIP 2.0 :
Hello,
Les lignes 2 et 3 marchent. En activant les autres lignes, on arrive sur une page blanche.
Désolé, je n’ai pas pu mener le debuggage plus loin.
Cordialement
P
en spip 2.03 la modif de mathieu donne une page blanche, non ?
Répondre à ce message
Je l’ai déjà dit, mais contrib’ ultra pratique. D’autant plus qu’elle marche impeccablement en version 2.0
Elle marche impeccablement oui, mais regardez vos fichier /tmp/spip.log, en l’état ça génère de nombreuses requêtes erronées, comme par exemple pour la compilation des squelettes mots ou plutôt des squelettes sans contexte de rubriques et/ou d’articles. C’est sans conséquence visible, mais que de log et de requête générée pour rien.
ça ne demande qu’à s’arranger, si quelqu’un a une piste propre, il faudra mettre à jour cette contrib’.
Répondre à ce message
N’ayant pas d’ id_rubrique, la reconnaissance du secteur ne fonctionne pas,
j’ai ajouté après la ligne 3
et ça roule
Répondre à ce message
Bonjour,
Quelqu’un a-t-il trouvé un moyen de personnaliser la version SPIP 2.0 ?
J’ai essayé d’adapter le code à la v2 mais sans succès... :-(
Merci Sébastien pour les précisions sur la V2. Vraiment super ta contrib !
Répondre à ce message
Bonjour, aprés avoir lu les posts, et n’ayant pas trouvé mon info, j’aurai voulu savoir s’il existe une maniére pour interdire aux admins restreint l’accés aux plugins ?
Du genre qu’il ne puisse modifier des tables ou formulaires, des abonnés aux lettres etc ....
Qu’ils ne puissent se contenter que d’écrire des articles dans des rubriques bien à eux.
Merci
Cordialement
Répondre à ce message
j’ai trouvé une parade qui marche avec la version SPIP 1.9.2d, pour le choix des champs à afficher.
il suffit de mettre les deux lignes :
dans ecrire/ecrire_fr.php, plutôt que dans local_fr.php.
pas très propre, mais ça marche.
Après coup, la modif pour Spip 1.9.2d est bien plus simple.
les fichiers de langue personnalisées sont à mettre dans un sous répertoire /lang du dossier squelettes.
là c’est propre.
Répondre à ce message
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
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |