'#0A246A', '$sfondo_selezione_sottomenu'=>'#0A246A', '$sfondo_menu'=>'#D4D0C8', '$sfondo_sottomenu'=>'#D4D0C8', '$colore_selezione_menu'=>'white', '$colore_selezione_sottomenu'=>'white', '$colore_menu'=>'#000000', '$colore_sottomenu'=>'#000000', '$colore_bordo'=>'#808080', '$h'=>'h2', '$una_riga'=>''//white-space: nowrap; ); protected $id_menu,$larghezza=array(); static private $inclusoJs=false; protected $cssFile,$cssAdd,$cssPred; protected $intestazione='h3'; /** * @ignore **/ protected function Load_CSS(){ $this->sostituzioni['$h']=$this->intestazione; $testo=strtr($this->cssPred.file_get_contents($this->cssFile).$this->cssAdd,array("\r"=>'',"\t"=>'',"\n"=>'','"'=>"'")+$this->sostituzioni); $testo=preg_replace('#/\*.+\*/#U','',$testo); //return ""; preg_match_all('/[^{]+{[^}]+}/U',$testo,$matches); foreach ($matches[0] as &$m) {$m=trim($m); $out1.="document.styleSheets[0].cssText+=\"$m\";\n"; $out2.="document.styleSheets[0].insertRule(\"$m\",i++);\n"; } $out1.="document.styleSheets[0].cssText+=\"#{$this->id_menu}{float:none;} body{behavior:url(/".MyField::get_MyFormsPath()."css/mymenu.htc);font-size:100%; }#{$this->id_menu} ul li{float:left;width:100%;}#{$this->id_menu} {$this->intestazione}, #{$this->id_menu} a{height:1%;}\";"; return ""; } /** * Costruttore riceve un array bidymensionale in cui: * la prima chiave è una chiave univoca della voce * la seconda è la chiave del menu padre (eventualmente null) * il valore è il contenuto del menu, è un testo html o un oggetto con il metodo get_html * * * $v=array(); * $v[1]['']='primo'; * $v[2]['']='secondo'; * $v[3][1]='terzo'; * $v[4][2]='altrosotto'; * $v[5][2]=new MyLink("#4",null,'quarto'); //anche un oggetto che possiede il metodo get_html * $v[6][4]='quinto'; * $v[7][4]='sesto'; * $v[8][4]='settimo'; * $menu=new mymenu($v); * echo $menu->get_html(); * * * @param array $opzioni */ function __construct(array $opzioni=array()){ $this->id_menu="my_menu_".md5(microtime(true)); //$this->id_menu="menu"; if (is_array($opzioni)) foreach ($opzioni as $chiave=>&$tmp) if (is_array($tmp)) foreach ($tmp as $padre=>&$contenuto) if (is_array($contenuto)) $this->add_opzione($chiave,$padre,$contenuto[0],$contenuto[1]); else $this->add_opzione($chiave,$padre,$contenuto); $this->cssFile=MyField::get_PathSito().MyField::get_MyFormsPath().'css/mymenu.css'; $this->sostituzioni['#menu']='#'.$this->id_menu; } /** * Aggiunge del css in forma testuale * * @param string $testoCss testo css da aggiungere * @param boolean $fine se true alla fine del css proprio del menu se false all'inizio */ function add_css_text($testoCss,$fine=true) { if ($fine) $this->cssAdd.=$testoCss; else $this->cssPred=$testoCss.$this->cssPred; } /** * Aggiunge un'opzione al menu * * @param string $chiave della voce di menu * @param string $padre chiave del padre (eventualmente null) * @param string/oggetto $contenuto Contenuto del menu, è un testo html o un oggetto con il metodo get_html */ function add_opzione($chiave,$padre,$contenuto,myTag $tag=null) { $this->padri[$padre][$chiave]=$contenuto; if ($tag!==null) $this->extrahtml[$chiave]=$tag->get_attributi(); } /** * Indica un eventuale css personalizzato da usare * * @param string $file percorso del css da caricare */ function set_css($file) { $this->cssFile=$file; } /** * Imposta una larghezza minima in em, funziona bene da +ie7 * * @param float $em * @param string $id è l'id del nodo a cui applicarla, se omesso si applica a tutti */ function set_larghezza_voce($em,$id='') { $this->larghezza[$id]=$em; } /** * Imposta i colori degli sfondi * * @param string $sfondomenu * @param string $sfondosottomenu * @param string $sfondoselezione */ function set_colori_sfondo($sfondomenu='',$sfondosottomenu='',$sfondoselezione='') { if ($sfondomenu) $this->sostituzioni['$sfondo_menu']=$sfondomenu; if ($sfondoselezione) $this->sostituzioni['$sfondo_selezione']=$sfondoselezione; if ($sfondosottomenu) $this->sostituzioni['$sfondo_sottomenu']=$sfondosottomenu; } /** * Imposta i colori dei testi * * @param string $menu * @param string $sottomenu * @param string $selezione * @param string $bordo */ function set_colori_testo($menu='',$sottomenu='',$selezione='',$bordo='') { if ($menu) $this->sostituzioni['$colore_menu']=$menu; if ($selezione) $this->sostituzioni['$colore_selezione']=$selezione; if ($sottomenu) $this->sostituzioni['$colore_sottomenu']=$sottomenu; if ($bordo) $this->sostituzioni['$colore_bordo']=$bordo; } /** * Se usato si puo attivare/disattivare la visualizzazion delle voci su una riga * di default attiva * * @param boolean $modalita */ function set_suunariga($modalita=true) { if ($modalita) $this->sostituzioni['$una_riga']='white-space: nowrap;'; else $this->sostituzioni['$una_riga']=''; } /** * @ignore */ protected function maxlen($padre,$max=0){ if (is_array($this->padri[$padre])) foreach ($this->padri[$padre] as $chiave=>$valore) { if (is_object($valore) && method_exists ($valore, 'get_html')) $valore=$valore->get_html(); $valore=strip_tags($valore); for ($i=0;$ilarghezza[$padre]),1); } return $max; } /** * Restutuisce l'html del menu * * @return string */ function get_html($padre='',$max=0) { $max=$this->maxlen($padre,$max); $stile="style='width:{$max}em'"; if (is_array($this->padri[$padre])) foreach ($this->padri[$padre] as $chiave=>$valore) { if (is_object($valore) && method_exists ($valore, 'get_html')) $valore=$valore->get_html(); $aggiungere_div=strip_tags($valore)==$valore; if (!$padre) $valore= "<{$this->intestazione}>$valoreintestazione}>"; if($aggiungere_div) $valore="
$valore
"; $htmlTemp.= "
  • extrahtml[$chiave]} $stile>$valore\n".$this->get_html($chiave,$max)."
  • \n"; if (!$padre) {$html.="";$htmlTemp='';} else {$html=$htmlTemp;} } if($html) { if (!$padre) return $this->Load_CSS()."
    $html
    "; else return ""; } } /** * @ignore */ function __toString(){ return $this->get_html(); } } ?>