PluginsClassiques("paginationRubrique"); } /* * Boucle page par defaut de Thelia modifiée pour l'utilisation sur des rubriques */ function bouclePaginationRubrique($texte, $args){ global $page, $id_rubrique; // récupération des arguments $num = lireTag($args, "num", "int"); $courante = lireTag($args, "courante", "int"); $pagecourante = lireTag($args, "pagecourante", "int"); $typeaff = lireTag($args, "typeaff", "int"); $max = lireTag($args, "max", "int"); $affmin = lireTag($args, "affmin", "int"); $avance = lireTag($args, "avance", "string"); $i=""; if( $page<=0) $page=1; $bpage=$page; $res=""; $cnx = new Cnx(); $query = $this->boucleRubrique($texte, str_replace("rubrique", "parent", $args), 1); if($query != ""){ $pos = strpos($query, "limit"); if($pos>0) $query = substr($query, 0, $pos); $resul = $cnx->query($query); $nbres = $cnx->num_rows($resul); } else $nbres = 0; $page = $bpage; $nbpage = $num ? ceil($nbres/$num) : 0; if($page+1>$nbpage) $pagesuiv=$page; else $pagesuiv=$page+1; if($page-1<=0) $pageprec=1; else $pageprec=$page-1; if($nbpage<$affmin) return; if($nbpage == 1) return; if($typeaff == 1){ if(!$max) $max=$nbpage+1; if($page && $max && $page>$max) $i=ceil(($page)/$max)*$max-$max+1; if($i == 0 ) $i=1; $fin = $i+$max; for( ; $i<$nbpage+1 && $i<$fin; $i++ ){ $temp = str_replace("#PAGE_NUM", "$i", $texte); $temp = str_replace("#PAGE_SUIV", "$pagesuiv", $temp); $temp = str_replace("#PAGE_PREC", "$pageprec", $temp); $temp = str_replace("#RUBRIQUE", "$id_rubrique", $temp); if($pagecourante && $pagecourante == $i){ if($courante =="1" && $page == $i ) $res .= $temp; else if($courante == "0" && $page != $i ) $res .= $temp; else if($courante == "") $res .= $temp; } else if(!$pagecourante) $res .= $temp; } } else if($typeaff == "0" && ($avance == "precedente" && $pageprec != $page)){ $temp = str_replace("#PAGE_NUM", "$page", $texte); $temp = str_replace("#PAGE_PREC", "$pageprec", $temp); $temp = str_replace("#RUBRIQUE", "$id_rubrique", $temp); $res .= $temp; } else if($typeaff == "0" && ($avance == "suivante" && $pagesuiv != $page)){ $temp = str_replace("#PAGE_NUM", "$page", $texte); $temp = str_replace("#PAGE_SUIV", "$pagesuiv", $temp); $temp = str_replace("#RUBRIQUE", "$id_rubrique", $temp); $res .= $temp; } else if($typeaff == "0" && $avance == ""){ $temp = str_replace("#PAGE_NUM", "$page", $texte); $temp = str_replace("#PAGE_SUIV", "$pagesuiv", $temp); $temp = str_replace("#PAGE_PREC", "$pageprec", $temp); $temp = str_replace("#RUBRIQUE", "$id_rubrique", $temp); $res .= $temp; } else if($typeaff == "2"){ if(!$deb) $deb=0; if($page) $_SESSION['navig']->page = $page; if(!$page || $page==1 ) $page=0; if(!$totbloc) $totbloc=1; if($page) $deb = ($page-1)*$totbloc*$num+$deb; $fin = $deb + $num; $query = str_replace("*","count(*) as max",$query); $resul = $cnx->query($query); $max = $cnx->get_result($resul,0,"max"); if($fin > $max) $fin=$max; $temp = str_replace("#DEBUT",$deb,$texte); $temp = str_replace("#FIN",$fin,$temp); $temp = str_replace("#MAX",$max,$temp); $res .= $temp; } return $res; } /* * Boucle rubrique par defaut de Thelia modifiée afin qu'elle prenne en compte la substitution de pagination */ function boucleRubrique($texte, $args, $type = 0){ global $id_rubrique; // récupération des arguments $id = lireTag($args, "id", "int_liste"); $parent = lireTag($args, "parent", "int_liste"); $courante = lireTag($args, "courante", "int"); $pasvide = lireTag($args, "pasvide", "int"); $ligne = lireTag($args, "ligne", "int"); $lien = lireTag($args, "lien", "string+\/-\s\.\,;"); $classement = lireTag($args, "classement", "string"); $aleatoire = lireTag($args, "aleatoire", "int"); $exclusion = lireTag($args, "exclusion", "int_liste"); $deb = lireTag($args, "deb", "int"); $num = lireTag($args, "num", "int"); $_SESSION['debut_pagination_rubrique'] = $num; $niveau = lireTag($args, "niveau", "int"); $res=""; $search=""; $limit=""; if(!$deb) $deb=0; $rubrique = new Rubrique(); $rubriquedesc = new Rubriquedesc(); // preparation de la requete if($ligne == "") $ligne="1"; $search.=" and $rubrique->table.ligne=\"$ligne\""; if($id!="") $search.=" and $rubrique->table.id in ($id)"; if($parent!="") $search.=" and $rubrique->table.parent in ($parent)"; if($type == 0){ if($courante == "1") $search .=" and $rubrique->table.id='$id_rubrique'"; else if($courante == "0") $search .=" and $rubrique->table.id!='$id_rubrique'"; } if($num!="") $limit .= " limit $deb,$num"; if($exclusion!="") $search .= " and $rubrique->table.id not in($exclusion)"; if($lien!="") $search.=" and $rubrique->table.lien in ($lien)"; if($niveau != "" && $parent != ""){ if($id_rubrique == "") return ""; $tab = chemin_rub($id_rubrique); $trouve = 0; for($i=0; $i < count($tab); $i ++) if($parent == $tab[$i]->rubrique) $trouve = 1; if(! $trouve) return ""; } if (ActionsLang::instance()->get_action_si_trad_absente() == ActionsLang::UTILISER_LANGUE_INDIQUEE) { // On retourne uniquement les rubriques traduites $search .= " and $rubriquedesc->table.id is not null"; } if($aleatoire) $order = "order by " . " RAND()"; else if($classement == "alpha") $order = "order by $rubriquedesc->table.titre"; else if($classement == "alphainv") $order = "order by $rubriquedesc->table.titre desc"; else if($classement == "inverse") $order = "order by $rubrique->table.classement desc"; else $order = "order by $rubrique->table.classement"; $query = " select $rubrique->table.id from $rubrique->table left join $rubriquedesc->table on ($rubrique->table.id=$rubriquedesc->table.rubrique and $rubriquedesc->table.lang=".ActionsLang::instance()->get_id_langue_courante().") where 1 $search $order $limit"; // substitutions if($type) return $query; $resul = CacheBase::getCache()->query($query); $compt = 1; if(empty($resul)) return ""; else $nbres = count($resul); foreach($resul as $row){ $rubrique = new Rubrique(); $rubrique->charger($row->id); $nbenfant = 0; if($pasvide != ""){ $rec = arbreBoucle($rubrique->id); $rec=rtrim($rec, ","); if($rec) $virg=","; else $virg=""; $tmprod = new Produit(); $query4 = "select count(id) as nbres from $tmprod->table where rubrique in('" . $rubrique->id . "'$virg$rec) and ligne='1'"; $resul4 = CacheBase::getCache()->query($query4); if(!$resul4[0]->nbres) continue; } $rubriquedesc = new Rubriquedesc(); $rubriquedesc->charger($rubrique->id); $query3 = "select count(id) as nbres from $rubrique->table where 1 and parent=\"$rubrique->id\""; $resul3 = CacheBase::getCache()->query($query3); if($resul3[0]->nbres) $nbenfant = $resul3[0]->nbres; else $nbenfant = 0; $temp = str_replace("#TITRE", "$rubriquedesc->titre", $texte); $temp = str_replace("#STRIPTITRE", strip_tags($rubriquedesc->titre), $temp); $temp = str_replace("#CHAPO", "$rubriquedesc->chapo", $temp); $temp = str_replace("#STRIPCHAPO", strip_tags($rubriquedesc->chapo), $temp); $temp = str_replace("#DESCRIPTION", "$rubriquedesc->description", $temp); $temp = str_replace("#POSTSCRIPTUM", "$rubriquedesc->postscriptum", $temp); $temp = str_replace("#PARENT", "$rubrique->parent", $temp); $temp = str_replace("#ID", "$rubrique->id", $temp); $temp = str_replace("#URL", $rubriquedesc->getUrl(), $temp); $temp = str_replace("#REWRITEURL", $rubriquedesc->getUrl(), $temp); $temp = str_replace("#LIEN", "$rubrique->lien", $temp); $temp = str_replace("#COMPT", "$compt", $temp); $temp = str_replace("#NBRES", "$nbres", $temp); $temp = str_replace("#NBENFANT", "$nbenfant", $temp); $compt ++; if(trim($temp) !="") $res .= $temp; } return $res; } /* * Boucle du plugin * Si le type de la boucle est paginationrubrique, on utilise bouclePaginationRubrique * Si le type de la boucle est rubrique, on utilise boucleRubrique */ function boucle($texte, $args){ $boucle = lireTag($args, 'boucle', 'string'); switch ($boucle) { case 'paginationrubrique': return $this->bouclePaginationRubrique($texte, $args); break; case 'rubrique': return $this->boucleRubrique($texte, $args); break; } } /* * Création de la substitution #DEBUT_PAGINATION_RUBRIQUE * Cette substitution permet de passer la pagination à la boucle de listing */ function action(){ global $res; $res = str_replace('#DEBUT_PAGINATION_RUBRIQUE', isset($_REQUEST['page']) ? (($_REQUEST['page'] * $_SESSION['debut_pagination_rubrique']) - $_SESSION['debut_pagination_rubrique']) : '', $res); } }