function order_cadres($cadres, &$cache_cadre_object) { //on retente de mettre de l'ordre dans tout ca... //init $ordered_cadres = array(); $cadres_dom = array(); $zone = ""; //on élimine ce qui n'est pas dans le dom (ou ne va pas l'être) for ($i = 0; $i < count($cadres); $i++) { if (!$zone) { $zone = $cadres[$i]->build_parent; } if (substr($cadres[$i]->build_obj, 0, strlen("cms_module_")) == "cms_module_") { $id_cadre = substr($cadres[$i]->build_obj, strrpos($cadres[$i]->build_obj, "_") + 1); $res = $this->manage_cache_cadres("select", $cadres[$i]->build_obj, "object"); if ($res["select"] == true) { if ($res["value"]) { $cadres_dom[] = $res["value"]; } } else { if ($cache_cadre_object[$cadres[$i]->build_obj]) { $obj = $cache_cadre_object[$cadres[$i]->build_obj]; } else { $obj = cms_modules_parser::get_module_class_by_id($id_cadre); $cache_cadre_object[$cadres[$i]->build_obj] = $obj; } if ($obj && $obj->check_conditions()) { $cadres_dom[] = $cadres[$i]; if ($obj->check_for_cache()) { $this->manage_cache_cadres("insert", $cadres[$i]->build_obj, "object", $cadres[$i]); } } elseif ($obj && $obj->check_for_cache()) { $this->manage_cache_cadres("insert", $cadres[$i]->build_obj, "object", ""); } } } else { if ($cadres[$i]->build_fixed || $this->dom->getElementById($cadres[$i]->build_obj)) { $cadres_dom[] = $cadres[$i]; } } } $cadres = $cadres_dom; //après ce petit tour de passe passe, il nous reste ques les éléments présent sur la page... $ordered_cadres[] = $this->get_next_cadre($cadres, $zone); $i = 0; $nb = count($cadres); while (count($cadres)) { $ordered_cadres[] = $this->get_next_cadre($cadres, $zone, $ordered_cadres[count($ordered_cadres) - 1]->build_obj); if ($i == $nb) { break; } $i++; } //le reste, c'est que l'on à jamais pu placer (perte de chainage via supression de cadres)... foreach ($cadres as $cadre) { $ordered_cadres[] = $cadre; } return $ordered_cadres; }