Changeset 56865 in spip-zone


Ignore:
Timestamp:
Jan 10, 2012, 11:43:39 AM (8 years ago)
Author:
marcimat@…
Message:

Ajout de nouveaux éléments unimarc, et affichage de ceux ci
+ gestion des champs extras de PMB
+ permettre d'étendre ou de modifier la correspondance unimarc / balises SPIP
+ permettre d'étendre l'affichage du tableau d'une notice en créant un squelette : inclure/inc-notice_display-local.html qui peut avoir comme contenu, par exemple ce code, qui affiche certains champs extras d'un PMB :

<BOUCLE_notice(PMB:NOTICES){id}>

[<tr><td><strong>#LABEL_MATERIEL</strong></td><td>(#MATERIEL)</td></tr>]
[<tr><td><strong>#LABEL_DROITS_VIDEO</strong></td><td>(#DROITS_VIDEO)</td></tr>]
[<tr><td><strong>#LABEL_AUTEURPRECISIONS</strong></td><td>(#AUTEURPRECISIONS)</td></tr>]

[<tr><td><strong>#LABEL_DIFFUSION</strong></td><td>(#DIFFUSION)</td></tr>]
[<tr><td><strong>#LABEL_JOUEURS</strong></td><td>(#JOUEURS)</td></tr>]
[<tr><td><strong>#LABEL_NIVEAU_LIBRE</strong></td><td>(#NIVEAU_LIBRE)</td></tr>]

[<tr><td><strong>#LABEL_DUREE</strong></td><td>(#DUREE)</td></tr>]
[<tr><td><strong>#LABEL_GENRE</strong></td><td>(#GENRE)</td></tr>]
[<tr><td><strong>#LABEL_NIVEAU_LISTE</strong></td><td>(#NIVEAU_LISTE)</td></tr>]

[<tr><td><strong>#LABEL_RESUME_EDITEUR</strong></td><td>(#RESUME_EDITEUR)</td></tr>]
</BOUCLE_notice>

Location:
_plugins_/spip-pmb/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-pmb/trunk/inc/unimarc.php

    r56856 r56865  
    2424        $zone = $unimarc->c;
    2525        $id = $unimarc->id; // souvent vide
    26 
     26        $res = array();
    2727        // Le champ $s contient la liste des informations
    2828        if (isset($unimarc->s) && is_array($unimarc->s)) {
    29                 foreach($unimarc->s as $element) {
     29                $groupe = $unimarc->s;
     30               
     31                // si une fonction specifique existe, on la retourne
     32                if (function_exists($parse = 'pmb_parse_unimarc_data_' . $zone)) {
     33                        return $parse($groupe);
     34                }
     35
     36                // sinon, on utilise le parsage prevu...
     37                foreach($groupe as $element) {
    3038                        $sous_zone = $element->c;
    3139                        $valeur = $element->value;
     
    3442                        // car certains caracteres sont faux...
    3543                        $valeur = pmb_nettoyer_caracteres($valeur);
    36                         return pmb_parse_unimarc_defaut($valeur, $zone, $sous_zone, $id, $element);
     44                        $new = pmb_parse_unimarc_defaut($valeur, $zone, $sous_zone, $id, $element, $groupe);
     45                        if ($new) {
     46                                $res = array_merge($res, $new);
     47                        } else {
     48                                // impossible de parser ce code.
     49                                # echo "<br />** ELEMENT NON TRAITE : $zone / $sous_zone";
     50                                # echo "\n<pre>"; print_r($element); echo "</pre>";
     51                        }
    3752                }
    3853        }
     54        return $res;
    3955}
    4056
     
    4561 * et retourne la ou les couples cle/valeurs
    4662 * correspondantes.
     63 *
     64 * [100]
    4765 *
    4866 *              Tableau des cles autorisees
     
    6886 *                      )
    6987 *              ),
     88 *
     89 * Ou encore
     90 *
     91 * [100] => 'fonction()' // fonction a evaluer...
    7092 *
    7193 * @return array
    7294 *              Tableau de tableau ('cle' => cle, 'valeur' => valeur)
    7395**/
    74 function pmb_parse_unimarc_defaut($valeur, $zone, $sous_zone, $id, $element) {
     96function pmb_parse_unimarc_defaut($valeur, $zone, $sous_zone, $id, $element, $groupe) {
    7597        static $tab = false;
    7698        if (!$tab) {
     
    78100        }
    79101
    80         if (!isset($tab[$zone]) or !is_array($tab[$zone])) {
     102        if (!isset($tab[$zone]) or !$tab[$zone]) {
    81103                return false;
    82104        }
    83105
     106        // si c'est une chaine, c'est certainement une fonction a evaluer
     107        // c'est le cas des 900 assez particuliers.
     108        if (is_string($tab[$zone])) {
     109                $res = eval("return $tab[$zone];");
     110                if (is_array($res)) {
     111                        return $res;
     112                }
     113        }
     114
     115        if (!is_array($tab[$zone])) {
     116                return false;
     117        }
    84118
    85119        // si l'element est dedans, c'est bon signe !
     
    165199**/
    166200function pmb_parse_unimarc_data() {
    167         return array(
     201        $t = array(
    168202
    169203
     
    198232
    199233
     234                // Mention d’édition
     235                '205' => array(
     236                        'a' => 'edition' // Mention d’édition
     237                ),
     238               
    200239                // Publication, production, diffusion, etc.
    201240                '210' => array(
     
    252291                ),
    253292
     293                // Unité matérielle
     294                '463' => array(
     295                        // y a aussi plusieurs 9 decrivant un lien... ?
     296                        't' => 'unite_materielle', // Titre
     297                ),
    254298
    255299                // Indexation en vocabulaire libre
    256300                // (mots cles)
    257                 '461' => array(
     301                '610' => array(
    258302                        'a' => 'mots_cles', // Descripteur
    259303                ),
     304               
    260305
    261306
     
    275320                // Nom de personne - Responsabilité secondaire
    276321                '701' => pmb_parse_unimarc_data_70x(3),
    277                
     322
     323
     324
     325                // Collectivité - Responsabilité principale
     326                '710' => array(
     327                        'a' => array(
     328                                'collectivite' => '$valeur',
     329                                'id_collectivite' => '$id',
     330                        ),
     331                        //'4' => '' // Code de fonction
     332                ),
     333
     334
     335                // Collectivité - Autre responsabilité principale
     336                '711' => array(
     337                        'a' => array(
     338                                'collectivite_autre' => '$valeur',
     339                                'id_collectivite_autre' => '$id',
     340                        ),
     341                        //'4' => '' // Code de fonction
     342                ),
     343
     344
    278345                // Image associee
    279346                '896' => array(
     
    281348                ),
    282349
     350                // les 900 sont des donnees locales...
     351                // et traitees separements...
     352
    283353        );
    284 }
     354
     355
     356        // on propose une surcharge de notre tableau dans une fonction
     357        // pmb_parse_unimarc_data_locales() qui permet egalement
     358        // de modifier le tableau au besoin.
     359        if (function_exists('pmb_parse_unimarc_data_locales')) {
     360                $t = pmb_parse_unimarc_data_locales($t);
     361        }
     362       
     363        return $t;
     364}
     365
     366/*
     367// exemple de fonction locale, a placer dans un fichier de fonctions SPIP.
     368function pmb_parse_unimarc_data_locales($tab) {
     369        $tab['900'] = array(
     370                'a' => 'toto'
     371        );
     372        return $tab;
     373}
     374*/
    285375
    286376
     
    317407}
    318408
     409
     410/**
     411 * les 900 sont des donnees locales...
     412 * et traitees separements...
     413 * il ne semble pas possible de savoir toujours ce que c'est...
     414 * cependant, PMB pour ses champs extras exportables envoie :
     415 * [900]
     416 *              [a] Valeur du champ
     417 *              [l] Label du champ
     418 *              [n] Colonne SQL du champ.
     419 *
     420 * Il envoie plusieurs 900 aussi.
     421 * On en fait autant de champ #N avec #LABEL_N
     422 * fonction pour traiter les champs extras
     423 * declares en 900
     424 *              n = champ sql
     425 *              a = valeur
     426 *              l = label humain
     427 */
     428function pmb_parse_unimarc_data_900($groupe) {
     429        $cle = $label = $valeur = '';
     430        foreach ($groupe as $element) {
     431                switch($element->c) {
     432                        case 'n':
     433                                $cle = strtolower($element->value);
     434                                break;
     435                        case 'l':
     436                                $label = pmb_nettoyer_caracteres($element->value);
     437                                break;
     438                        case 'a':
     439                                $valeur = pmb_nettoyer_caracteres($element->value);
     440                                break;
     441                }
     442        }
     443        if ($cle and $valeur and $label) {
     444                return array(
     445                        array(
     446                                'cle'    => $cle,
     447                                'valeur' => pmb_nettoyer_caracteres($valeur),
     448                        ),
     449                        array(
     450                                'cle'    => 'label_' . $cle,
     451                                'valeur' => pmb_nettoyer_caracteres($label),
     452                        ),
     453                );
     454        }
     455}
     456
    319457?>
  • _plugins_/spip-pmb/trunk/inclure/inc-notice_display.html

    r56856 r56865  
    2525                                [<tr><td><strong><:pmb:type:></strong></td><td>(#TYPE)</td></tr>]
    2626                                [<tr><td><strong><:pmb:editeur:></strong></td><td>[(#ID_EDITEUR|oui)<a href="[(#URL_PAGE{publisher_see}|parametre_url{id,#ID_EDITEUR})]">](#EDITEUR)[(#ID_EDITEUR|oui)</a>]</td></tr>]
     27                                [<tr><td><strong><:pmb:edition:></strong></td><td>(#EDITION)</td></tr>]
    2728                                [<tr><td><strong><:pmb:collection:></strong></td><td>[(#ID_COLLECTION|oui)<a href="[(#URL_PAGE{coll_see}|parametre_url{id,#ID_COLLECTION})]">](#COLLECTION)[(#ID_COLLECTION|oui)</a>]</td></tr>]
     29                                [<tr><td><strong><:pmb:unite_materielle:></strong></td><td>(#UNITE_MATERIELLE)</td></tr>]
     30                                [<tr><td><strong><:pmb:collectivite:></strong></td><td>(#COLLECTIVITE)</td></tr>]
     31                                [<tr><td><strong><:pmb:collectivite_autre:></strong></td><td>(#COLLECTIVITE_AUTRE)</td></tr>]
    2832                                [<tr><td><strong><:pmb:format:></strong></td><td>(#FORMAT)</td></tr>]
    2933                                [<tr><td><strong><:pmb:annee_publication:></strong></td><td>(#ANNEE_PUBLICATION)</td></tr>]
    3034                                [<tr><td><strong><:pmb:importance:></strong></td><td>(#IMPORTANCE)</td></tr>]
     35                                [<tr><td><strong><:pmb:mots_cles:></strong></td><td>(#MOTS_CLES)</td></tr>]
    3136                                [<tr><td><strong><:pmb:presentation:></strong></td><td>(#PRESENTATION)</td></tr>]
    3237                                [<tr><td><strong><:pmb:isbn:></strong></td><td>(#ISBN)</td></tr>]
     
    3439                                [<tr><td><strong><:pmb:note_generale:></strong></td><td>(#NOTE_GENERALE)</td></tr>]
    3540                                [<tr><td><strong><:pmb:note_contenu:></strong></td><td>(#NOTE_CONTENU)</td></tr>]
     41                                [(#CHEMIN{inclure/inc-notice_display-local.html}|oui)
     42                                        [(#INCLURE{fond=inclure/inc-notice_display-local,id})]
     43                                ]
    3644                        </tbody>
    3745                </table>
  • _plugins_/spip-pmb/trunk/lang/pmb_fr.php

    r56856 r56865  
    3333'collections' => 'Collections',
    3434'collection_web' => 'Site internet',
     35'collectivite' => 'Collectivité',
     36'collectivite_autre' => 'Autre collectivité',
    3537'comment_ca_fonctionne' => 'Comment &ccedil;a fonctionne ?',
    3638'compte_lecteur' => 'Votre compte de lecteur',
     
    5052
    5153// E
    52 'ecrire_a' => '&Eacute;crire &agrave;',
    53 'editeur' => 'Editeur',
    54 'editeurs' => 'Editeurs',
     54'ecrire_a' => 'Écrire à',
     55'editeur' => 'Éditeur',
     56'editeurs' => 'Éditeurs',
     57'edition' => 'Édition',
    5558'en_savoir_plus' => 'en&nbsp;savoir&nbsp;+',
    5659'exemplaires' => 'Exemplaires',
     
    6669'message_recherche_avancee' => 'Prochainement, vous disposerez d\'une int\351gration compl\350te\nde la recherche avanc\351e sur ce site. \n\nEn attendant, vous allez \352tre redirig\351s vers l\'interface standard.',
    6770'mon_compte' => 'Mon compte',
     71'mots_cles' => 'Mots clés',
    6872
    6973// N
     
    116120'rpc_type' => 'Type de serveur',
    117121'rubriques' => 'Qui sommes-nous ?',
     122
     123// S
    118124'section' => 'Section',
    119125'se_deconnecter' => 'Se d&eacute;connecter',
     
    123129'support' => 'Support',
    124130'sur' => 'sur',
     131
     132// T
    125133'titre_lien_pmb' => 'PMB, un SIGB enti&egrave;rement libre',
    126134'titre' => 'Titre',
     
    129137'toutes_nouveautes' => 'toutes les nouveaut&eacute;s',
    130138'type' => 'Type',
     139
     140// U
     141'unite_materielle' => 'Unité matérielle',
    131142'url' => 'Adresse',
    132143'vous_etes_identifies' => 'Vous &ecirc;tes identifi&eacute;',
  • _plugins_/spip-pmb/trunk/pmb_fonctions.php

    r56850 r56865  
    434434
    435435        if (isset($value->f) && is_array($value->f)) {
    436 
    437436                foreach($value->f as $informations) {
    438 
    439437                        if ($res = pmb_parse_unimarc($informations)) {
    440438                                foreach ($res as $r) {
     
    470468                                        }
    471469                                }
     470                        } else {
     471                                #echo "\n<pre>"; print_r($informations); echo "</pre>";
    472472                        }
    473473                }
Note: See TracChangeset for help on using the changeset viewer.