321 lines
8.9 KiB
PHP
321 lines
8.9 KiB
PHP
<?php
|
|
class PaginationRubrique extends PluginsClassiques{
|
|
|
|
function PaginationRubrique(){
|
|
$this->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);
|
|
}
|
|
|
|
} |