* $ric=new MyRicercaAjax( new myCognome('Prova',$Prova) ); * $ric->set_opzioni('dati.php',3); * //Esempio di utilizzo di un metodo non esistente in questa classe ma esistente nell'oggetto (myCognome) utilizzato nell'istanza * $ric->set_tooltip("Metodo non appartenente a MyRicercaAjax ma ereditiato da myCognome "); * echo $ric->get_html(); * * //Lo script che viene richiamato per ottenere i dati deve ritornarli sotto forma di un elenco non ordinato * $lista=""; * echo $lista; * */ class MyRicercaAjax { /** @ignore*/ protected $myAutocompleter, $campo_output,$showonly,$id,$myText,$function=''; /** * Costruttore di classe * * @param MyText $myText E' il campo su cui applicare la ricerca Ajax (può anche essere un campo esteso da MyText) */ function MyRicercaAjax(&$myText){ if (is_object($myText)) $this->myText=&$myText; else $this->myText=new MyText($myText,func_get_arg(1),func_get_arg(2)); $this->id=$this->myText->get_id_istanza(); $this->myAutocompleter=new myJQAutocomplete(); } function set_campo_input($nome,&$campo){ if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete(); $this->myAutocompleter->set_campo_input($nome, $campo); return $this; } function set_campo_output(&$campo){ if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete(); $this->campo_output=$campo; $this->myAutocompleter->set_campo_output($campo); return $this; } /** * * Imposta i n. di caratteri dopo cui la scelta si attiva * @param int $caratteri */ public function set_tiping($caratteri=2){ if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete(); $this->myAutocompleter->set_tiping($caratteri); return $this; } function get_titolo(){ return $this->myText->get_value(); } /** * Imposta il testo della riga di chiusura della pagina, * se omesso non verrà mostrato quindi sarà impossibile chiudere la finistra senza effettuare una scelta * * @deprecated Non funziona più */ function set_messaggio_chiusura() { } /** * Funzione obbligatoria, va utilizzata dopo l'istanza della classe * * @param string $script E' lo script da cui devo andare a recuperare i dati da visualizzare all'utente * @param integer $car Indica dopo quanti caratteri devo visualizzare l'aiuto (ignorato se script è nullo) * @param string $campoId (Opzionale) Da utilizzare se si ha la necessità di utilizzare una eventuale scelta dell'id * @param string $parametri Parametri da inviare in post in aggiunta * @param string $parametri Eventuali altri parametri da valorizzare tramite js es $parametriJS=array('pippo'=>'documento.getElementById('ciccio').value'); * */ function set_opzioni($script,$car=3,$campoId="",$parametri=array(),$parametrijs=array()){ if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete(); if (!$script) return; $this->myAutocompleter->set_tiping($car); $this->set_campo_output($campoId); $this->myAutocompleter->set_source($script,$campoId,$parametri,$parametrijs); } function set_onselect_function($function) { if(!$this->myAutocompleter) {echo "usare set_onselect_function() solo prima di set_opzioni()";exit;} $this->myAutocompleter->set_onselect_function($function); } /** @ignore */ protected function js_update($campoId){ if ($this->function) $f="{$this->function}(text,li);"; if ($this->chiudi[0]) { if (!$this->chiudi[1]) $messaggio=($this->trasl($this->chiudi[0])); else $messaggio=($this->chiudi[0]); $extra="if(text.value==\"$messaggio\") { document.getElementById('{$this->get_id()}').value=li.id; return; }"; } return "function onSelectedMyAjax_{$this->id}(text, li) { document.getElementById('$campoId').value=li.id; $extra $f } "; } function set_showonly() { $this->myText->set_showonly(); $this->showonly=true; } /** * Funzione che mi permette di costruire l'HTML del campo * @return l'HTML */ function &get_Html(){ if ($this->showonly) return $this->myText->get_html(); $this->myText->add_myjquery($this->myAutocompleter); return $this->myText->get_html(); } /** * Impone altezza massima alla finestra di scroll * @param int $px pixels */ function set_altezza_scroll($px){ if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete(); $this->myAutocompleter->set_altezza_scroll($px); return $this; } /** * Cosa deve comparire durante l'attesa di aggiornamento * @param string $tag è la urla dell'icona da visualizzare o semplocemente l'html da visualizzare */ function set_indicatore_attesa($html){ if(!$this->myAutocompleter) $this->myAutocompleter=new myJQAutocomplete(); $this->myAutocompleter->set_indicatore_attesa($html); return $this; } /** * Imposta la facoltatività del tag, se facoltativo @see get_xml non restituirà nulla * altrimenti si visualizza il tag vuoto * * @param abilita $boolean se true l'xml si vede se false non viene mostrato */ function set_xml_facoltativo($facoltativo=true){ $this->myText->set_xml_facoltativo($facoltativo); return $this; } /* Funzione privata che permette di utilizzare metodi non esistenti in questa classe, ma esistenti nell'oggetto istanziato (es. potrei, invece di istanziare questa classe su un generico oggetto myText su uno più specifico myCognome ed utilizzare metodi specifici di questo oggetto) */ /** @ignore*/ function __call($metodo, $attributi){ return @call_user_func_array( array($this->myText,$metodo) , $attributi ); } /** @ignore*/ function __get($var) { return $this->myText->$var; } /** @ignore*/ function __clone() { $this->myText=clone($this->myText); return $this; } /** @ignore*/ function clonami() { if (PHP_VERSION >= 5) return clone($this); else return $this; } } abstract class RisultatoMyRicercaAjax { protected $valore,$parametri,$campo,$utf8=false,$json=false; /** * * @ignore **/ function __construct() { $this->parametri=$_POST; $parametri = each($_POST); $this->campo=$parametri['key']; $this->valore=$parametri['value']; if (is_array($this->valore)) $this->valore=array_pop(array_values($this->valore)); foreach ($this->parametri as &$info) {$info['desc']=stripslashes($info['desc']); $info['val']=stripslashes($info['val']); } } /** * * Imposta la codifica json dell'output * @param boolean $sino */ function usaJSON($sino=true){ $this->json=$sino; } /** * * Imposta la codifica utf8 dell'output * @param unknown_type $sino */ function usaUTF8($sino=true) { $this->utf8=$sino; } abstract function &Calcolo(); /** * * @ignore */ final function __destruct(){ $hash=sha1(serialize($_GET).serialize($_POST)); if($_SESSION && $_SESSION[$hash]) return $opzioni=$_SESSION[$hash]; else $opzioni=$_SESSION[$hash]=$this->Calcolo(); if ($opzioni) {if ($_GET['chiudi']) $corpo="
  • valore)."\" style='text-align:center' >$_GET[chiudi]
  • "; if($this->utf8) { $new=array(); foreach ($opzioni as $testo=>&$valore) $new[utf8_encode($testo)]=utf8_encode($valore); $opzioni=&$new; } if($this->utf8) $charset='UTF-8'; else $charset='ISO-8859-1'; if($this->json) $type="application/json"; else $type="text/html"; if($this->utf8) header ("Content-Type: $type;charset=$charset"); if($this->json) $corpo=json_encode($opzioni); else { foreach ($opzioni as $testo=>$valore) $corpo.="
  • $testo
  • "; $corpo=""; } header("Content-Length: ".strlen($corpo)); echo $corpo; exit; } } } /** * Classe per gestire liste ordinabili tramite jquery * * Questa classe permette di costruire delle liste ordinabili tramite trascinamento degli elementi. * * .. includo le myAjax * * $miaListaOrdinabile=new myListeOrdinabili('Nome',array('Primo','Secondo','Terzo','Quarto','Quinto')); * * echo $miaListaOrdinabile->get_html(); * * * E' possibile salvare la posizione attuale delle liste passando alla variabile $scriptUpdate uno script esterno * Esempio: * * * * Lo script richiamato può leggere le liste ordinate: * $item) { * * //puoi salvare la posizione della chiave in una $_SESSION o direttamente sulla tabella di un d.b. * * } * ?> * * * Si può utilizzare un css diverso da quello di default, ma si deve avere l'accortenza che le classi che compongono il css * abbiano lo stesso nome del oggetto istanziato * * Esempio: * $miaListaOrdinabile=new myListeOrdinabili('Nome',array('Primo','Secondo','Terzo','Quarto','Quinto'),'','mio.css'); * * File mio.css * #Nome { * list-style: none; * } * * #Nome li { * display: block; * padding: 10px 5px; margin-bottom: 3px; * background-color: #efefef; * } * * #Nome li img.handle { * margin-right: 10px; * cursor: move; * } */ class myJQListeOrdinabili { private $myLista; private $scriptSalvataggio; private $stile; private $immagine; private $percorso; private $id,$div; private $css; /** * @param array $valori (array contenenti le voci da ordinare nel formato chiave=>testo * @param string $div id del div in cui è contenuta la lista * @param string $scriptUpdate (l'eventuale script da utilizzare per salvare le modifiche) */ public function __construct($valori,$div,$scriptUpdate=''){ if (is_array($valori)) $this->myLista=$valori; if ($scriptUpdate) $this->scriptSalvataggio=$scriptUpdate; $this->id="ul_$div"; $this->div=$div; $this->percorso="/".MyField::get_MyFormsPath(); $this->immagine=$this->percorso."img/imm_list.png"; //if ($style) $this->stile=$style;else } /** * Metodo che ritorna l'html delle liste ordinabili * */ public function get_html(){ $out.=""; return $out.$this->jquery().$this->css(); } /** * Metodo per settare l'immagine da visualizzare a fianco delle liste * * @param string $percorso */ public function set_immagine($percorso){ $this->immagine=$percorso; } /** * Metodo privato che importa jquery ed inizializza la funzione * @ignore * @return html */ protected function jquery(){ /* $js.=' ';*/ //if ($this->stile) $js.=""; //else myJQuery::add_src("jquery/ui/jquery.ui.core.js"); myJQuery::add_src("jquery/ui/jquery.ui.widget.js"); myJQuery::add_src("jquery/ui/jquery.ui.mouse.js"); myJQuery::add_src("jquery/ui/jquery.ui.sortable.js"); $jq=new myJQuery("#{$this->id}"); $sortable=array('handle'=>'.handle'); if ($this->scriptSalvataggio){ $div=new myJQuery("#{$this->div}"); if(strpos($this->scriptSalvataggio,'?')===false) $this->scriptSalvataggio.='?'; else $this->scriptSalvataggio.='&'; $sortable['update']="function() { var order = {$jq->sortable('serialize')}; {$div->JQid()}.load(\"{$this->scriptSalvataggio}\"+order+\"&tt=\"+Math.random()); } "; } $jq->add_code($jq->sortable($sortable)); return $jq; } /** * ignore */ protected function css(){ return ""; } } ?>