// Renvoie le chemin pour aller à une hierarchie d'objets, avec protection contre les // références circulaires dans la hiérarchie d'objets. function _chemin_thelia($id, $nomobj, $lang=1){ $ids = array(); $tab = array(); $tobj = new $nomobj(); $tobj->parent = $id; $objdesc = $nomobj."desc"; // On doit toujours retourner au moins un element, sinon bouclage dans l'admin... $tab[] = new $objdesc(); $idx = 0; while(intval($tobj->parent) != 0) { $ids[] = $tobj->parent; $tobjdesc = new $objdesc(); if (intval($tobj->parent) > 0 && $tobj->charger($tobj->parent) && $tobjdesc->charger($tobj->id, $lang)) { if (in_array($tobj->parent, $ids)) { die("Référence circulaire détectée dans la hiérarchie des ${nomobj}s à partir de l'ID=$tobj->id. Chemin: ".implode(" -> ", $ids)); } $tab[$idx++] = $tobjdesc; } else { // Chargement impossible -> arrêt break; } } return $tab; } // renvoie le chemin pour aller à une rubrique donnée function chemin($id, $lang=1){ return _chemin_thelia($id, 'Rubrique', $lang); } // renvoie le chemin vers un dossier function chemin_dos($id, $lang=1){ return _chemin_thelia($id, 'Dossier', $lang); }