Changeset 56961 in spip-zone


Ignore:
Timestamp:
Jan 12, 2012, 9:55:54 AM (8 years ago)
Author:
marcimat@…
Message:

On prépare une boucle auteurs

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

Legend:

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

    r56934 r56961  
    201201                $liste_notices = array_slice($result->notice_ids, $debut, $nbresult);
    202202        }
    203         $tableau_resultat['notice_ids'] = pmb_ws_recuperer_tab_notices($liste_notices);
     203        $tableau_resultat['notice_ids'] = pmb_extraire_notices_ids($liste_notices);
    204204        array_unshift($tableau_resultat['notice_ids'], array('nb_resultats' => $cpt));
    205205        #pmb_remettre_id_dans_resultats($tableau_resultat, $liste_notices);
     
    245245        return $tableau_resultat;
    246246
     247}
     248
     249function pmb_extraire_auteurs_ids($ids_auteur) {
     250        if (!is_array($ids_auteur)) {
     251                return array();
     252        }
     253       
     254        return array();
    247255}
    248256
     
    670678
    671679
    672 // récuperer une notice en xml via les webservices
    673 // les parser, et stocker en cache statique car cette fonction
    674 // est utilisee par toutes les boucles (PMB:NOTICES)
    675 function pmb_ws_recuperer_tab_notices($listenotices) {
    676 
    677         if (!is_array($listenotices)) {
     680
     681/**
     682 * Recupere les informations de notices
     683 * dont les identifiants sont fournis par
     684 * le tableau $ids_notices.
     685 *
     686 * Chaque identifiant calcule est mis en cache
     687 * pour eviter des requetes intempestives
     688 * sur un hit de page et permettre d'utiliser plusieurs
     689 * fois une boucle telle que (PMB:NOTICES){id}
     690 * sans avoir besoin de tout recalculer.
     691 *
     692 * Notons que l'on ne peut recuperer que les champs "exportables"
     693 * dans PMB.
     694 *
     695 * @param array $ids_notices
     696 *              Tableau d'id de notices a recupereer
     697 * @return array
     698 *              Tableau contenant pour chaque notice la liste des champs
     699 *              que l'on a pa recuperer.
     700**/
     701function pmb_extraire_notices_ids($ids_notices) {
     702        if (!is_array($ids_notices)) {
    678703                return array();
    679704        }
    680        
    681         // on met en cache le resultat et on utilise le cache.
     705
     706        // On met en cache le resultat et on utilise le cache.
    682707        // afin d'optimiser si plusieurs boucles sont utilisees.
    683         // par ailleurs, l'id 0, s'il se produit est incongru est
     708       
     709        // Par ailleurs, l'id 0, s'il se produit est incongru est
    684710        // provient du hack pour la pagination de ce plugin.
    685711        static $notices = array(0 => array());
    686712       
    687         $wanted = $listenotices;
     713        $wanted = $ids_notices;
    688714        // ce qu'on a trouve...
    689715        $res = array();
    690716       
    691         foreach ($listenotices as $c=>$l) {
     717        foreach ($ids_notices as $c=>$l) {
    692718                if (isset($notices[$l])) {
    693719                        $res[$c] = $notices[$l];
     
    711737                        // avec nos trouvailles
    712738                        foreach ($r as $notice) {
    713                                 $key = array_search($notice['id'], $listenotices);
     739                                $key = array_search($notice['id'], $ids_notices);
    714740                                if ($key !== false) {
    715741                                        $notices[ $notice['id'] ] = $res[$key] = $notice;
     
    793819
    794820
    795 // retourne un tableau associatif contenant tous les champs d'un tableau d'id de notices
    796 function pmb_extraire_notices_ids($ids_notices) {
    797         if (!is_array($ids_notices)) {
    798                 $ids_notices = array();
    799         }
    800 
    801         return pmb_ws_recuperer_tab_notices($ids_notices);
    802 }
    803 
    804 
    805821// retourne un tableau associatif contenant les prêts en cours
    806822function pmb_prets_extraire ($session_id, $type_pret=0) {
     
    833849                }
    834850                if ($cpt>0) {
    835                         $tableau_resultat['notice_ids'] = pmb_ws_recuperer_tab_notices($liste_notices); 
     851                        $tableau_resultat['notice_ids'] = pmb_extraire_notices_ids($liste_notices); 
    836852                }
    837853                #pmb_remettre_id_dans_resultats(&$tabreau_resultat, $liste_notices);
     
    869885        }
    870886        if ($cpt>0) {
    871                 $tableau_resultat['notice_ids'] = pmb_ws_recuperer_tab_notices($liste_notices); 
     887                $tableau_resultat['notice_ids'] = pmb_extraire_notices_ids($liste_notices); 
    872888        }
    873889        #pmb_remettre_id_dans_resultats(&$tabreau_resultat, $liste_notices)
  • _plugins_/spip-pmb/trunk/public/pmb.php

    r56928 r56961  
    244244 * Notices issues des recherches
    245245 * (PMB:NOTICES) {rechercher}
    246  * (PMB:NOTICES) {rechercher}{look ?}
     246 * (PMB:NOTICES) {rechercher}{look ?}{id_section ?}{id_location ?}{id_location_memo ?}
    247247 *
    248248 */
     
    347347
    348348
     349
     350
     351/**
     352 *
     353 * Selectionne un ou plusieurs auteurs PMB
     354 * et retourne un tableau des elements parsees
     355 *
     356 * Un auteur
     357 * (PMB:AUTEURS) {id_auteur}
     358 *
     359 * Des auteurs
     360 * (PMB:AUTEURS) {liste #TABLEAU_IDS_AUTEUR}
     361 *
     362 */
     363function inc_pmb_auteurs_select_dist(&$command, $iterateur) {
     364        $criteres = $command['where'];
     365       
     366        // on peut fournir une liste l'id
     367        // ou egalement un critere id=x
     368        $ids = array();
     369       
     370
     371        // depuis une liste
     372        if (is_array($command['liste']) and count($command['liste'])) {
     373                $ids = $command['liste'];
     374        }
     375
     376        // depuis un critere id_auteur=x ou {id_auteur?}
     377        if ($id = pmb_critere_valeur($criteres, 'id_auteur')) {
     378                $ids = pmb_intersect_ids($ids, $id);
     379        }
     380
     381        // retourner les auteurs selectionnees
     382        $res = pmb_extraire_auteurs_ids($ids);
     383
     384        return $res;
     385}
     386
     387
     388
     389
     390
     391
    349392// retourne l'intersection des ids trouves
    350393// equivalent {...} AND {...}
Note: See TracChangeset for help on using the changeset viewer.