Changeset 9852 in spip-zone


Ignore:
Timestamp:
Feb 23, 2007, 4:42:24 PM (13 years ago)
Author:
cedric@…
Message:

gerer la pagination sur les donnees liees (cas typique des grosses listes d'abonnés)

Location:
_plugins_/_stable_/forms/forms_et_tables_1_9_1
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/action/forms_lier_donnees.php

    r9751 r9852  
    2222        $redirect = urldecode(_request('redirect'));
    2323        $cherche_donnee = _request('cherche_donnee');
    24         $id_donnee_liee = intval(_request('id_donnee_liee'));
     24        $id_donnee_liee = _request('id_donnee_liee'); // peut etre un tableau du fait d'un select multiple
    2525        if (!$id_donnee_liee) $id_donnee_liee = intval(_request('_id_donnee_liee'));
    2626        if ($redirect==NULL) $redirect="";
     
    3939                                if ($type=='donnee')
    4040                                        $champ_donnee = 'id_donnee_liee';
    41                                 $res = spip_query("SELECT * FROM spip_forms_donnees_{$type}s WHERE id_$type="._q($id)." AND $champ_donnee="._q($id_donnee_liee));
    42                                 if (!$row = spip_fetch_array($res))
    43                                         spip_query("INSERT INTO spip_forms_donnees_{$type}s (id_$type,$champ_donnee) VALUES ("._q($id).","._q($id_donnee_liee).")");
     41                                if (!is_array($id_donnee_liee)) $id_donnee_liee = array($id_donnee_liee);
     42                                foreach($id_donnee_liee as $id_liee) {
     43                                        if ($id_liee = intval($id_liee)) {
     44                                                $res = spip_query("SELECT * FROM spip_forms_donnees_{$type}s WHERE id_$type="._q($id)." AND $champ_donnee="._q($id_liee));
     45                                                if (!$row = spip_fetch_array($res))
     46                                                        spip_query("INSERT INTO spip_forms_donnees_{$type}s (id_$type,$champ_donnee) VALUES ("._q($id).","._q($id_liee).")");
     47                                        }
     48                                }
    4449                                $redirect = parametre_url($redirect,'cherche_donnee','');
    4550                        }
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/exec/recherche_donnees.php

    r9751 r9852  
    2424        $id = intval($id);
    2525        // recuperer les donnees deja liees
    26         list($s,$les_donnees) = Forms_formulaire_objet_afficher_donnees($type,$id,"",$type_table);
     26        list($s,$les_donnees,$nombre_donnees) = Forms_formulaire_objet_afficher_donnees($type,$id,"",$type_table);
    2727       
    2828        if ($type == 'donnee')
    2929                $les_donnees .= (strlen($les_donnees)?",":"").$id;
    3030        // recuperer les donnees que l'on peut lier
    31         $liste = Forms_liste_recherche_donnees($recherche,$les_donnees,$type_table);
     31        $liste = Forms_liste_recherche_donnees($recherche,$les_donnees,$type_table,30);
    3232       
    3333        $out = "<ajaxresponse>";
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/exec/template/donnees_tous.html

    r9845 r9852  
    11#CACHE{0}
    2 <BOUCLE_test(FORMS_DONNEES){id_form}{statut!=poubelle}{0,1}>
     2<B_donnees>
    33<div class='verdana2'><p><div id="sorting"><div>Tri en cours, un instant...</div></div><div id="filter"></div></p></div><div style="clear:both">&nbsp;</div>
    44#SET{colonnes_sans_tri,'0,1'}<BOUCLE_form(FORMS){id_form}>#SET{documents,#DOCUMENTS|=={oui}|?{' '}}</BOUCLE_form>
    55        <link rel="stylesheet" type="text/css" href="#EVAL{_DIR_PLUGIN_FORMS}img_pack/donnees_tous.css" />
    66        <script type="text/javascript" src="#EVAL{_DIR_PLUGIN_FORMS}javascript/jquery.tablesorter.dev.js"></script>
    7 <B_head>
    87<div class='liste'>
    98<div style='position: relative;'>
    109        <div style='position: absolute; top: -12px; left: 3px;'><img src='#CHEMIN{img_pack/#TYPE_FORM-24.png}' alt="" /></div>
    1110        <div style='background-color: #ENV{couleur_claire}; color: black; padding: 3px; padding-left: 30px; border-bottom: 1px solid #444444;' class='verdana2'>
     11        <div class='pagination' style='float:right;'>#PAGINATION</div>
    1212        <b>#ENV*{titre_liste}</b>
    1313        </div>
     
    1919                <th class='neutre'>id</th>
    2020                <th>Rang</th>
    21                 <th>Date</th>
    2221                <th>De</th>
    23                 <th>Page</th>
    2422                <BOUCLE_head(FORMS_CHAMPS){id_form}{type !IN (separateur,textestatique)}{tout}{par rang}>
    25                 <th [(#SPECIFIANT|=={oui}|?{'','class="neutre"'})#SET{colonnes_sans_tri,#GET{colonnes_sans_tri}|concat{','}|concat{#COMPTEUR_BOUCLE|plus{5}}]>#TITRE</th>
     23                <th [(#SPECIFIANT|=={oui}|?{'','class="neutre"'})#SET{colonnes_sans_tri,#GET{colonnes_sans_tri}|concat{','}|concat{#COMPTEUR_BOUCLE|plus{3}}]>#TITRE</th>
    2624                </BOUCLE_head>
    27                 #SET{colonnes_sans_tri,#GET{colonnes_sans_tri}|concat{','}|concat{#TOTAL_BOUCLE|plus{6}}}
     25                #SET{colonnes_sans_tri,#GET{colonnes_sans_tri}|concat{','}|concat{#TOTAL_BOUCLE|plus{4}}}
    2826                [(#GET{documents})<th class='neutre'>&nbsp;</th>]
    2927        </tr>
    3028</thead>
    3129<tbody>
    32 <BOUCLE_donnees(FORMS_DONNEES){id_form}{statut!=poubelle}{par rang}>
     30<BOUCLE_donnees(FORMS_DONNEES){id_form}{statut!=poubelle}{par rang}{pagination 200}>
    3331#SET{lien_supp,#URL_ACTION_AUTEUR{forms_donnee_supprime,#ID_FORM:#ID_DONNEE,#EVAL{_DIR_RESTREINT_ABS}|concat{#SELF}|urlencode}}
    3432#SET{lien_edit,#URL_ECRIRE{donnees_edit,id_form=#ID_FORM}|parametre_url{id_donnee,#ID_DONNEE}|parametre_url{retour,#SELF} }
     
    3735                <td><a href='#GET{lien_edit}'>#ID_DONNEE</a></td>
    3836                <td>#RANG</td>
    39                 <td>#DATE</td>
    4037                <td><BOUCLE_auteur(AUTEURS){id_auteur}>#NOM</BOUCLE_auteur>#IP<//B_auteur></th>
    41                 <td>#URL</td>
    4238                <BOUCLE_body(FORMS_CHAMPS){id_form}{tout}{type !IN (separateur,textestatique)}{par rang}>
    4339                <td>
     
    5753</table>
    5854</div>
    59 </B_head>
    6055        <script type="text/javascript"><!--
    6156        var search_string='<:bouton_chercher:>';
     
    8176        // -->
    8277        </script>       
    83 </BOUCLE_test>
     78</B_donnees>
     79<div class='verdana2' style='text-align:center;'>
    8480#ENV*{aucune_reponse}
    85 <//B_test>
     81</div>
     82<//B_donnees>
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/inc/forms_lier_donnees.php

    r9803 r9852  
    2727        // Afficher les donnees liees, rangees par tables
    2828        //
    29         list($s,$les_donnees) = Forms_formulaire_objet_afficher_donnees($type,$id,$script,$type_table);
     29        list($s,$les_donnees, $nombre_donnees) = Forms_formulaire_objet_afficher_donnees($type,$id,$script,$type_table);
    3030        $form .= Forms_formulaire_objet_chercher_donnee($type,$id,$les_donnees, $script, $type_table);
    3131       
     
    4646        if (!$icone)
    4747                $icone = find_in_path("img_pack/table-24.gif");
    48         $out .= debut_cadre_enfonce($icone, true, "", $bouton._T("$prefixi18n:type_des_tables"));
     48        $out .= debut_cadre_enfonce($icone, true, "", $bouton._T("$prefixi18n:type_des_tables")."($nombre_donnees)");
    4949
    5050        $out .= $s;
     
    124124
    125125        $les_donnees = array();
     126        $nombre_donnees = 0;
    126127        $liste = array();
    127128        $forms = array();
     
    132133                $champ_donnee = 'id_donnee_liee';
    133134        $res = spip_query("SELECT $champ_donnee FROM spip_forms_donnees_{$type}s AS d WHERE d.id_$type="._q($iid));
     135        $nombre_donnees = $cpt = spip_num_rows($res);
     136        while ($row = spip_fetch_array($res))   $les_donnees[] = $row[$champ_donnee];
     137
     138        $tmp_var = "forms_lier_donnees-$id";
     139        $nb_aff = floor(1.5 * _TRANCHES);
     140        if ($cpt > $nb_aff) {
     141                $nb_aff = _TRANCHES;
     142                $tranches = afficher_tranches_requete($cpt, $tmp_var, generer_url_ecrire('forms_lier_donnees',"type=$type&id_$type=$id"), $nb_aff);
     143        } else $tranches = '';
     144       
     145        $deb_aff = _request($tmp_var);
     146        $deb_aff = ($deb_aff !== NULL ? intval($deb_aff) : 0);
     147       
     148        $limit = (($deb_aff < 0) ? '' : " LIMIT $deb_aff, $nb_aff");   
     149       
     150        $res = spip_query(
     151        "SELECT dl.$champ_donnee
     152        FROM spip_forms_donnees_{$type}s AS dl
     153        JOIN spip_forms_donnees AS d ON d.id_donnee=dl.$champ_donnee
     154        WHERE dl.id_$type="._q($iid)."
     155        ORDER BY d.id_form $limit");
    134156        while ($row = spip_fetch_array($res)){
    135157                list($id_form,$titreform,$t) = Forms_liste_decrit_donnee($row[$champ_donnee]);
     
    142164        }
    143165       
    144         if (count($liste)) {
     166        if (count($liste) OR $tranches) {
    145167                $out .= "<div class='liste liste-donnees'>";
     168                $out .= $tranches;
    146169                $out .= "<table width='100%' cellpadding='3' cellspacing='0' border='0' background=''>";
    147170                $table = array();
     
    153176                        $table[] = $vals;
    154177                        foreach($donnees as $id_donnee=>$champs){
    155                                 $les_donnees[] = $id_donnee;
    156178                                $vals = array();
    157179                                $vals[] = $id_donnee;
     
    175197        }
    176198        $les_donnees = implode (',',$les_donnees);
    177         return array($out,$les_donnees) ;
     199        return array($out,$les_donnees,$nombre_donnees) ;
    178200}
    179201
     
    182204        $liste_res = Forms_liste_recherche_donnees($recherche,$les_donnees,$type_table);
    183205        if (count($liste_res)){
    184                 $out .= "<select name='id_donnee_liee' class='fondl' style='width:100%' size='10'>";
     206                $out .= "<select name='id_donnee_liee[]' multiple='multiple' class='fondl' style='width:100%' size='10'>";
    185207                foreach($liste_res as $titre=>$donnees){
    186208                        $out .= "<option value=''>$titre</option>";
     
    197219}
    198220
    199 function Forms_liste_recherche_donnees($recherche,$les_donnees,$type_table){
     221function Forms_liste_recherche_donnees($recherche,$les_donnees,$type_table,$max_items=-1){
    200222        $table = array();
     223        if ($recherche===NULL && $max_items==-1)
     224                $max_items = 200;
    201225        //if ($recherche!==NULL){
    202226                include_spip('base/abstract_sql');
    203227                $in = calcul_mysql_in('d.id_donnee',$les_donnees,'NOT');
     228                $limit = "";
     229                if ($max_items>0)
     230                        $limit = "LIMIT 0,".intval($max_items);
    204231                if (!strlen($recherche)){
    205232                        $res = spip_query("SELECT d.id_donnee FROM spip_forms_donnees AS d
    206233                          JOIN spip_forms AS f ON f.id_form=d.id_form
    207                           WHERE f.type_form="._q($type_table)." AND $in GROUP BY d.id_donnee");
     234                          WHERE f.type_form="._q($type_table)." AND $in GROUP BY d.id_donnee $limit");
    208235                }
    209236                else {
     
    211238                        JOIN spip_forms_donnees AS d ON d.id_donnee = c.id_donnee
    212239                        JOIN spip_forms AS f ON d.id_form = f.id_form
    213                         WHERE f.type_form="._q($type_table)." AND $in AND valeur LIKE "._q("$recherche%")." GROUP BY c.id_donnee");
     240                        WHERE f.type_form="._q($type_table)." AND $in AND valeur LIKE "._q("$recherche%")." GROUP BY c.id_donnee $limit");
    214241                        if (spip_num_rows($res)<10){
    215242                                $res = spip_query("SELECT c.id_donnee FROM spip_forms_donnees_champs AS c
    216243                                JOIN spip_forms_donnees AS d ON d.id_donnee = c.id_donnee
    217244                                JOIN spip_forms AS f ON d.id_form = f.id_form
    218                                 WHERE f.type_form="._q($type_table)." AND $in AND valeur LIKE "._q("%$recherche%")." GROUP BY c.id_donnee");
     245                                WHERE f.type_form="._q($type_table)." AND $in AND valeur LIKE "._q("%$recherche%")." GROUP BY c.id_donnee $limit");
    219246                        }
    220247                }
Note: See TracChangeset for help on using the changeset viewer.