SPIP - Contrib

SPIP - Contrib

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

94 visiteurs en ce moment

fontsizeup fontsizedown
Accueil du site > Contribs > Administration > Archives Administration > Edition des colonnes supplémentaires de la table Articles (SPIP 1.8.3 et (...)
[34 commentaires]

Edition des colonnes supplémentaires de la table Articles (SPIP 1.8.3 et 1.9B2)

mercredi 2 août 2006, par jrebillat

Toutes les versions de cet article : [français] [italiano]

0 vote

Comme il est bien indiqué dans cet article , il est possible d’ajouter des champs dans les tables Spip depuis la version 1.8. Ceci permet de remplacer les champs extras, mais pas vraiment. En effet les champs extras ont l’avantage de pouvoir être entrés directement dans la partie privée lors de l’édition de la table correspondante, ce qui n’était pas le cas des champs ajoutés.

Ayant eu besoin d’ajouter des champs dans la table articles pour un site en préparation, il m’a été nécessaire de me pencher sur ce sujet - uniquement pour la table articles. Ci-dessous sont proposées des fichiers modifiés pour gérer les champs ajoutés directement lors de l’édition des articles. Les modifications proposées essayent de respecter le mode de fonctionnement de SPIP.

Le principe est d’utiliser un fichier descriptif des champs ajoutés pour que l’affichage se fasse en relation avec ce qu’il faut y entrer.

Les modifications sont là :

Pour la V1.8.3 :

Zip - 20.8 ko
Add-ons pour /ecrire

et pour la V1.9 beta2 au 03/06/06 :

Zip - 20.4 ko
add-ons V1.9 courante (03/06/06)

Voici un exemple de fichier de configuration, que je vais décrire plus loin.

<?php
$GLOBALS['champs_site'] = Array (
       'articles' => Array (
                       'inedit' => Array(
                                 'champ'    => 'inedit',
                                 'titre'    => 'Inédit ?',
                                 'style'    => Array( 'couleur' => '#FF0000' ),
                                 'secteur'  => 1,
                                 'type'     => 'choix',
                                 'multiple' => 'non',
                                 'modele'   => 'texte',
                                 'valeurs'  => Array (
                                            'Oui' => 'Inédit',
                                            'Non' => 'Réédition'
                                 )
                       ),
                       'isbn' => Array(
                                 'champ'    => 'isbn',
                                 'titre'    => 'Num.ISBN',
                                 'style'    => Array(),
                                 'secteur'  => 1,
                                 'type'     => 'texte',
                                 'taille'   => 20,
                                 'modele'   => 'texte'
                       ),
                       'essaicheck' => Array(
                                 'champ'    => 'essaicheck',
                                 'titre'    => 'Essai check',
                                 'style'    => Array(
                                              'aligne' => 'horizontal',
                                              'couleur' => '#0088CC'
                                 ),
                                 'secteur'  => 1,
                                 'type'     => 'choix',
                                 'multiple' => 'oui',
                                 'modele'   => 'texte',
                                 'valeurs'  => Array (
                                            'Oui' => 'Oui',
                                            'Non' => 'Non',
                                            'Ptèt' => 'Bof'
                                 )
                      ),
                       'project' => Array(
                                 'champ'    => 'project',
                                 'titre'    => 'Project',
                                 'style'    => Array(),
                                 'secteur'  => 1,
                                 'type'     => 'table',
                                 'table'    => 'site_proj',
                                 'colonne'  => 'name',
                                 'valeur'   => 'prjid',
                                 'multiple' => 'non',
                                 'modele'   => 'entier'
                       ),

        )
);
?>

Chaque champ est décrit avec certains éléments communs obligatoires :
- ’champ’ pour indiquer le nom de la colonne dans la table
- ’titre’ pour donner un nom au chmp pour l’utilisateur
- ’style’ pour éventuellement modifier l’aspect typographique
- ’secteur’ pour indiquer dans quel secteur ce champ est utilisable (un seul secteur par champ pour l’instant)
- ’type’ indique le type de représentation souhaitée, qui peut être ’choix’ (un choix dans une liste figée), ’texte’ (entrée simple) ou ’table’ (choix à partir d’une table externe)

Un champ optionnel ’modele’ => ’texte’ pour indiquer que le champ est de type texte dans la base (sinon le champ est considéré comme un nombre).

Ensuite, selon le type de champ, d’autres éléments viennent le préciser.

Pour les champs de type ’texte’, la taille doit être fournie (longueur du champ)

Pour les choix, il faut indiquer s’ils sont ’multiple’ ou simple, ainsi que la liste des valeurs et de ce qui doit être affiché pour chaque valeur.

Pour les tables externes, il faut indiquer le nom de la ’table’, la ’colonne’ à afficher ainsi que la colonne contenant la ’valeur’ à mettre dans le champ. On peut aussi avoir des choix multiples.

Ceci peut donner en édition :

PNG - 16.7 ko
exemple

et en visualisation (dans l’espace privé) : exemple2

Retour en haut de la page

34 Messages de forum

Voir toute la discussion

Pages 1 | 2 | 3 | 4

  • Répondre à ce message

    27 mars 2008 20:45 , par jrebillat

    En fait, ce n’est pas comme cela que j’ai porté sur les autres versions mes modifications. Le mieux est de prendre le code des fichiers à remplacer et de l’éditer pour y intégrer les changements - ainsi on profite des ajouts de la nouvelle version de Spip. Mais pour faire cela, il faut disposer à la fois des sources de la version d’avant (1.9.1), des sources correspondant modifiés - pour voir où sont les différences - et du nouveau code pour effectuer les changements. Pour ma part, j’attends la finalisation de la 1.9.3 pour porter mes modifications. La 1.9.2 c’est trop compliqué avec toutes ces sous-versions.

    Et oui, ce serait mieux dans un plugin mais je n’ai pas vu comment insérer du code HTML au milieu de celui de Spip, seulement comment en ajouter à certains endroits (et pas où je le veux)

  • Répondre à ce message

    27 mars 2008 10:53 , par mathbouq

    Je ne sais pas si tu as trouvé une solution ? Pour ma part, j’ai réussi à résoudre ce problème (la solution est donnée ici : http://forum.spip.org/fr_197801.html), mais je tombe ensuite sur un nouveau message d’erreur : undefined function bouton_imessage()

    Une fois le code coupable mis en commentaire, nouveau message d’erreur : undefined function formulaire_mots()

    Je laisse donc tomber temporairement, le code de cette contribution est sans doute un peu obsolète du fait des nouvelles versions de SPIP (1.9.2c, pour ma part).

    Cette contribution me tente bien, mais je me demande s’il n’y a pas plus simple, en passant par un plugin ?

  • Répondre à ce message

    13 mars 2008 15:31 , par Linagora

    J’ai essayé d’installer cette contrib sur une install SPIP 1.9.2 et ça ne fonctionne pas. "call to undefined function acces_rubrique()..." dans les scripts ecrire/exec/articles.php et ecrire/exec/articles_edit.php Quelqu’un peut m’aider SVP ???

    Merci

  • Répondre à ce message

    30 septembre 2007 22:02 , par jrebillat

    Pour obtenir le résultat attendu, j’ai modifié le fichier "articles_edit.php" en remplaçant la ligne :

    if ($pluschamp[’secteur’] == $id_secteur)

    de la gestion des champs ajoutés (vers la ligne 354 - dépend de la version de l’add-on) par

    // recherche des secteurs concernés

    $concern = false ;

    $vs = split(’ ’,$pluschamp[’secteur’]) ;

    foreach ($vs as $v)

    {

    if ($v == $id_secteur)

    $concern = true ;

    }

    //if ($pluschamp[’secteur’] == $id_secteur)

    if ($concern)

    Dans mes_champs.php, il faut indiquer les secteurs multiples entre quotes :

    ’secteur’ => ’1 27’,

  • Répondre à ce message

    24 septembre 2007 17:59 , par lo

    Bonjour comment faire pour le modifier pour qu’il fonctionne avec plusieurs rubrique, voici mon code :

    function exec_articles_edit_champs_ajoutes($id_rubrique, $pchamp) //============================================================================ // gestion des champs ajout�s //Possibilité de choisir par rubrique et non plus par secteur. //MODIFER PAR LOïC (C-Stan) LE 24/09/07 $txt = "" ; foreach ($GLOBALS[’champs_site’][’articles’] as $keychamp => $pluschamp) $tableausecteurs=array() ; $tableausecteurs=explode(" ",$pluschamp[’secteur’]) ; foreach ($tableausecteurs as $valsecteur) if ($valsecteur == $id_rubrique) $pretxt = "" ; $posttxt = "" ; if ((isset($pluschamp[’style’]))&&(isset($pluschamp[’style’][’couleur’]))) $pretxt .= "" ; $posttxt = "".$posttxt ; $txt .= $pretxt ;

    //------------------------------------------------------- // champ de type texte if ( !strcmp($pluschamp[’type’],’texte’)) $txt .= "".$pluschamp[’titre’]."" ; $txt .= "

    " ;
    //------------------------------------------------------- // champ de type choix pr�d�fini elseif ( !strcmp($pluschamp[’type’],’choix’)) $brtxt = "
    " ; $pbrtxt = "
    " ; if ((isset($pluschamp[’style’]))&&(isset($pluschamp[’style’][’aligne’])) && (!strcmp($pluschamp[’style’][’aligne’],"horizontal")) ) $brtxt = " " ; $pbrtxt = "

    " ; $txt .= "".$pluschamp[’titre’]."" ; $txt .= "$brtxt" ; if ( strcmp($pluschamp[’multiple’],’non’)) $inptxt = "type=’checkbox’ name=’".$keychamp."[]’" ; $vals = split(",",$pchamp[$keychamp]) ; else $inptxt = "type=’radio’ name=’$keychamp’" ; $vals = array() ; $vals[] = $pchamp[$keychamp] ; foreach ($pluschamp[’valeurs’] as $keyval => $plusval) if (in_array($plusval,$vals)) $txt .= " $keyval"."$brtxt" ; else $txt .= " $keyval"."$brtxt" ; $txt .= $pbrtxt ;

    //------------------------------------------------------- // champ de type choix � partir d’une table externe’ elseif ( !strcmp($pluschamp[’type’],’table’)) $txt .= "".$pluschamp[’titre’]."
    " ; $query = "SELECT ".$pluschamp[’colonne’] ; if (isset($pluschamp[’valeur’])) $query .= ", ".$pluschamp[’valeur’] ; $query .= " FROM ".$pluschamp[’table’] ; $result = spip_query($query) ; if ( !strcmp($pluschamp[’multiple’],’non’)) $txt .= " else $txt .= " while ($row = spip_fetch_array($result)) $v = "" ; $edval = $row[$pluschamp[’colonne’]] ; if (isset($pluschamp[’valeur’])) $v = "value=’".$row[$pluschamp[’valeur’]]."’" ; $edval = $row[$pluschamp[’valeur’]] ; if (in_array($edval,$vals)) $txt .= "" ; else $txt .= "" ; $txt .= "
    " ;
    $txt .= $posttxt ; else $txt .= "" ; $txt .= "
    " ; return $txt ;

    Ce code fonctionne mais pas avec toute mes rubrique en locurence j’ecrit "4 5", la 5 marche mais pas la 4. c toujours la derniere qui fonctionne. pk ? Merci

  • Répondre à ce message

    28 mai 2007 13:03 , par Vinnie

    Il suffit d’utiliser le filtre "propre" avec ton champ pour n’afficher que le contenu concernant la langue concernée. Exemple : pour un champ qui vaut oui, [(#MONCHAMPS|propre)] affichera "yes" si lang=en et "oui" pour lang=fr. En revanche, si dans ton squelette tu utilises [(#MONCHAMPS)], Spip affichera "[en] yes [fr] oui".

  • Répondre à ce message

    12 avril 2007 00:57

    Bon, ok, la voila : http://www.alantea.net/downloads/ecrire-spip-1.9.1.zip Mais je n’ai pas trouvé le temps de la documenter, ce qui peut poser problème.

    J’ai ajouté :

    - le type "calendrier" pour choisir des dates

    - le type "cross2" permettant de placer des références à des tables par tables de liens à trois colonnes (dans l’exemple il s’agit pour un livre d’avoir l’auteur et sa fonction)

    - la possibilité d’ajouter des valeurs dans une table externe liée.

    A regarder : l’exemple de fichiers "mes_champs.php"

  • Répondre à ce message

    11 avril 2007 14:17 , par François

    Cela semble intéressant cette version pour 1.9.1 (ou plus...) Serait-il possible de l’avoir ? Merci d’avance

  • Répondre à ce message

    2 avril 2007 09:34

    Résultat identique avec la contrib des champs homonymes. Sur le site public mes nouveaux champs créés s’affichent entièrement avec les <multi> ! Pourtant je ne vois pas pourquoi cela ne se passe pas pareil que les autres champs ou spip n’affiche que le texte du multi restreint à la langue courante.

  • Répondre à ce message

    1er avril 2007 00:05 , par Jean-Marc

    Merci pour la réponse. Dans la BD tout est ok, l’écriture avec les balises mutli est correct. Pour les champs existants (surtitre, titre, etc...) utilisant les balises mutli, le site public me met bien uniquement le texte de la langue courante, par contre pour les nouveaux champs déclarés tout le contenu du champ s’affiche, par exemple pour #TEST j’obtiens tout son contenu cad : "Test en français" alors que le site ne devrait m’afficher uniquement "Test en français". Je testerai la contrib des champs homonymes dans laquelle on parle de l’utilisation possible des champs multi, mais le résultat devrait être identique au vu de la contrib... Je vous tiens au courant.

Pages 1 | 2 | 3 | 4

Répondre à cet article

Retour en haut de la page

Ça discute par ici