Changeset 57053 in spip-zone


Ignore:
Timestamp:
Jan 13, 2012, 3:53:00 PM (8 years ago)
Author:
marcimat@…
Message:

Boucle (PMB:COLLECTIONS) et permettre la selection de notice par collection (PMB:NOTICES){id_collection}

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

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-pmb/trunk/content/auteur.html

    r55164 r57053  
    11#CACHE{0}
    2   <BOUCLE_contenu_auteur(AUTEURS){id_auteur}{tous}>
    3    
     2<BOUCLE_contenu_auteur(AUTEURS){id_auteur}{tous}>
     3
    44        [(#REM) Fil d'Ariane ]
    55        <p id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a> &gt; <:info_auteurs:>[ &gt; <strong class="on">(#NOM|couper{80})</strong>]</p>
  • _plugins_/spip-pmb/trunk/content/pmb_auteur.html

    r56963 r57053  
    11<BOUCLE_auteur(PMB:AUTEURS){id_auteur}>
    2 
    32
    43[(#REM) Fil d'Ariane ]
  • _plugins_/spip-pmb/trunk/content/pmb_collection.html

    r56889 r57053  
    1 [(#SET{tab_resultat,[(#ENV{id}|pmb_collection_extraire{#ENV{debut,0},#ENV{fin,5}})]})]
     1<BOUCLE_collection(PMB:COLLECTIONS){id_collection}>
    22
    33[(#REM) Fil d'Ariane ]
    44<p id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a>
    55&gt; <:pmb:collections:>
    6 &gt; <strong class="on">[(#GET{tab_resultat/collection_name}|couper{80})]</strong></p>
     6&gt; <strong class="on">[(#TITRE|couper{80})]</strong></p>
    77
    88
    99<div class="cartouche">
    10         <h1 class="h1">#GET{tab_resultat/collection_name}</h1>
     10        <h1 class="h1">#TITRE</h1>
    1111</div>
    1212
    13 <INCLURE{fond=inclure/inc-pmb_collection}{env}{tab_resultat=#GET{tab_resultat}}>
     13<INCLURE{fond=inclure/inc-pmb_collection}{env}{id_collection}>
     14</BOUCLE_collection>
  • _plugins_/spip-pmb/trunk/head/pmb_collection.html

    r56895 r57053  
    1 <title>[(#ENV{tab_resultat/collection_name}|textebrut) - ][(#NOM_SITE_SPIP|textebrut)][ - (#SLOGAN_SITE_SPIP|typo|textebrut)]</title>
     1<BOUCLE_collection(PMB:COLLECTIONS){id_collection}>
     2<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)][ - (#SLOGAN_SITE_SPIP|typo|textebrut)]</title>
     3</BOUCLE_collection>
  • _plugins_/spip-pmb/trunk/inclure/inc-pmb-collection.html

    r56889 r57053  
     1<BOUCLE_collection(PMB:COLLECTIONS){id_collection}>
     2
    13<div class="corps-conteneur surlignable">
    24        <div class="pmb-ouvrage-infos">
    35                <table class="spip pmb-tableau">
    4                           <tbody>
    5                           [<tr><td><:pmb:collection_issn:></td><td>(#ENV{tab_resultat/collection_issn})</td></tr>]
    6                                 [<tr><td><:pmb:publisher_web:></td><td><a href="[(#ENV{tab_resultat/collection_web})]">(#ENV{tab_resultat/collection_web})</a></td></tr>]
     6                        <tbody>
     7                                [<tr><td><:pmb:collection_issn:></td><td>(#ISSN)</td></tr>]
     8                                [<tr><td><:pmb:publisher_web:></td><td><a href="#WEB">(#WEB)</a></td></tr>]
    79                        </tbody>
    810                </table>
     
    1012</div>
    1113
    12 [(#INCLURE{fond=inclure/inc-recherche-ouvrage,env})]
     14[(#INCLURE{fond=inclure/inc-recherche-notices,env,id_collection})]
     15</BOUCLE_collection>
  • _plugins_/spip-pmb/trunk/inclure/inc-recherche-notices.html

    r56963 r57053  
    1010       
    1111        <ul class="liste-items items">
    12                 <BOUCLE_liste_notices(PMB:NOTICES){id ?}{id_auteur ?}{pagination 5}>
    13                         <INCLURE{fond=inclure/inc-notice-resume}{id}{surlignable=1}{compteur=#COMPTEUR_BOUCLE}>
     12                <BOUCLE_liste_notices(PMB:NOTICES)
     13                        {id ?}{id_auteur ?}{id_collection ?}
     14                        {pagination 5}>
     15                                <INCLURE{fond=inclure/inc-notice-resume}{id}{surlignable=1}{compteur=#COMPTEUR_BOUCLE}>
    1416                </BOUCLE_liste_notices>
    1517        </ul>
  • _plugins_/spip-pmb/trunk/paquet.xml

    r57003 r57053  
    22        prefix="pmb"
    33        categorie="divers"
    4         version="1.112.0"
     4        version="1.113.0"
    55        etat="dev"
    66        compatibilite="[3.0.0-beta2;3.0.*]"
  • _plugins_/spip-pmb/trunk/pmb_fonctions.php

    r57003 r57053  
    275275        );
    276276        return $s;
     277}
     278
     279
     280
     281
     282/**
     283 * Recupere les informations des collections
     284 * dont les identifiants sont fournis par
     285 * le tableau $ids_collection.
     286 *
     287 * Chaque identifiant calcule est mis en cache
     288 * pour eviter des requetes intempestives
     289 * sur un hit de page et permettre d'utiliser plusieurs
     290 * fois une boucle telle que (PMB:COLLECTIONS){id_collection}
     291 * sans avoir besoin de tout recalculer.
     292 *
     293 * @param array $ids_collection
     294 *              Tableau d'id de collections a recupereer
     295 * @return array
     296 *              Tableau contenant pour chaque collection la liste des champs
     297 *              que l'on a pu recuperer.
     298**/
     299function pmb_extraire_collections_ids($ids_collection) {
     300        if (!is_array($ids_collection)) {
     301                return array();
     302        }
     303       
     304        // retrouver les infos en cache
     305        list($res, $wanted) = pmb_cacher('collections', $ids_collection);
     306
     307        // si on a tout trouve, on s'en va...
     308        if (!count($wanted)) {
     309                return $res;
     310        }
     311
     312        try {
     313                $ws = pmb_webservice();
     314                foreach ($wanted as $id_collection) {
     315                        // second parametre $id_session n'etait pas utilise... kesako ?
     316                        $r = $ws->pmbesCollections_get_collection_information_and_notices($id_collection);
     317                        if ($r) {
     318                                //infos de la collection
     319                                $c = array();
     320                                $c['id_collection']  = $r->information->collection_id;
     321                                $c['titre']          = $r->information->collection_name;
     322                                $c['id_parent']      = $r->information->collection_parent;
     323                                $c['issn']           = $r->information->collection_issn;
     324                                $c['web']            = $r->information->collection_web;
     325                                $c['ids_notice']     = $r->notice_ids;
     326                               
     327                                $key = array_search($id_collection, $ids_collection);
     328                                if ($key !== false) {
     329                                        $res[$key] = $c;
     330                                        pmb_cacher('collections', $id_collection, $c, true);
     331                                }
     332                        }
     333                }
     334
     335        } catch (Exception $e) {
     336                 echo 'Exception reçue (7) : ',  $e->getMessage(), "\n";
     337        }
     338
     339        return $res;
    277340}
    278341
  • _plugins_/spip-pmb/trunk/public/pmb.php

    r57041 r57053  
    310310                unset($auteurs);
    311311        }
     312
     313
     314        // id_collection : trouver les notices d'une collection
     315        if ($ids_collection = pmb_critere_valeur($criteres, 'id_collection')) {
     316                $collections = pmb_extraire_collections_ids($ids_collection);
     317                if ($collections) {
     318                        $n = array();
     319                        foreach ($collections as $c) {
     320                                $n = array_unique(array_merge($n, $c['ids_notice']));
     321                        }
     322                        $ids = pmb_intersect_ids($ids, $n);
     323                }
     324                unset($collections);
     325        }
     326
     327
    312328
    313329        // recherche de notices
     
    425441
    426442
     443/**
     444 *
     445 * Selectionne une ou plusieurs collections PMB
     446 * et retourne un tableau des elements parsees
     447 *
     448 * Une collection
     449 * (PMB:COLLECTIONS) {id_collection}
     450 *
     451 * Des collections
     452 * (PMB:COLLECTIONS) {liste #TABLEAU_IDS_COLLECTION}
     453 *
     454 */
     455function inc_pmb_collections_select_dist(&$command, $iterateur) {
     456        $criteres = $command['where'];
     457       
     458        // on peut fournir une liste l'id
     459        // ou egalement un critere id=x
     460        $ids = array();
     461       
     462
     463        // depuis une liste
     464        if (is_array($command['liste']) and count($command['liste'])) {
     465                $ids = $command['liste'];
     466        }
     467
     468        // depuis un critere id_collection=x ou {id_collection?}
     469        if ($id = pmb_critere_valeur($criteres, 'id_collection')) {
     470                $ids = pmb_intersect_ids($ids, $id);
     471        }
     472
     473        // retourner les collections selectionnees
     474        $res = pmb_extraire_collections_ids($ids);
     475
     476        return $res;
     477}
     478
     479
     480
    427481
    428482
Note: See TracChangeset for help on using the changeset viewer.