1: <?php
2: /**
3: * Pry Framework
4: *
5: * LICENSE
6: *
7: * This source file is subject to the new BSD license that is bundled
8: * with this package in the file LICENSE.txt.
9: *
10: * @version $Revision: 276 $
11: */
12:
13: /**
14: * Element Autocompleter. Permet de définir un champs texte avec une auto complétion.
15: * @category Pry
16: * @package Form
17: * @subpackage Form_Element
18: * @version 1.5.1
19: * @author Olivier ROGER <oroger.fr>
20: *
21: *
22: */
23: class Form_Element_AutoCompleter extends Form_Element_Text
24: {
25:
26: /**
27: * Class css du div d'autocompletion
28: *
29: * @var string
30: * @access private
31: */
32: private $autoCompleteCss;
33:
34: /**
35: * Url du fichier fournissant les données
36: *
37: * @var string
38: * @access private
39: */
40: private $url;
41:
42: /**
43: * Nom du paramèter envoyé en post
44: *
45: * @var string
46: * @access private
47: */
48: private $paramName;
49:
50: /**
51: * Nombre de caractère mini avant déclenchement de l'autocompletion
52: *
53: * @var int
54: * @access private
55: */
56: private $minChar;
57:
58: /**
59: * Nombre de résultat maximum retourné
60: *
61: * @var int
62: * @access private
63: */
64: private $max;
65:
66: /**
67: * Fréquence de rafraichissement de l'input en ms
68: *
69: * @var float
70: * @access private
71: */
72: private $frequency;
73:
74: /**
75: * Paramètres additionnels
76: *
77: * @var array
78: */
79: private $params;
80:
81: /**
82: * Constructeur.
83: *
84: * @param string $nom
85: * @param Form_Form $form
86: */
87: public function __construct($nom,$form)
88: {
89: parent::__construct($nom,$form);
90: $this->autoCompleteCss = 'autocomplete';
91: $this->minChar = 2;
92: $this->max = 25;
93: $this->frequency = 400;
94: $this->params ='{';
95: }
96:
97: /**
98: * Défini la class css pour le div autocompletion
99: *
100: * @param string $css
101: * @return Form_Element_AutoCompleter
102: */
103: public function setAutoCompleteClass($css)
104: {
105: $this->autoCompleteCss = $css;
106: return $this;
107: }
108:
109: /**
110: * Défini l'adresse du fichier
111: *
112: * @param string $url
113: * @return Form_Element_AutoCompleter
114: */
115: public function setUrl($url)
116: {
117: $this->url = $url;
118: return $this;
119: }
120:
121: /**
122: * Défini le nom du paramètre envoyé
123: *
124: * @param string $name
125: * @return Form_Element_AutoCompleter
126: */
127: public function setParamName($name)
128: {
129: $this->paramName = $name;
130: return $this;
131: }
132:
133: /**
134: * Défini le nombre de caractère nécessaire
135: *
136: * @param int $char
137: * @return Form_Element_AutoCompleter
138: */
139: public function minCharNeeded($char)
140: {
141: $this->minChar = $char;
142: return $this;
143: }
144:
145: /**
146: * Taux de rafraichissement de l'input en sec
147: *
148: * @param float $frq
149: * @return Form_Element_AutoCompleter
150: */
151: public function refreshFrequency($frq)
152: {
153: $this->frequency = $frq;
154: return $this;
155: }
156:
157:
158: public function setMaxResult($max)
159: {
160: $this->max = intval($max);
161: }
162: /**
163: * Ajoute des paramètres
164: *
165: * @param array $tab
166: * @return Form_Element_AutoCompleter
167: */
168: public function addParams($tab)
169: {
170: foreach($tab as $key => $value)
171: {
172: $this->params .=$key.':'.$value.',';
173: }
174: $this->params = substr($this->params,0,strlen($this->params)-1);
175: return $this;
176: }
177:
178: /**
179: * Ecrit l'objet
180: *
181: * @return string
182: */
183: public function __toString()
184: {
185: $this->params.='}';
186: $field.=parent::__toString();
187: //$field.="\t".'</p><div id="'.$this->attrs['id'].'_autocomplete" class="'.$this->autoCompleteCss.'"></div><p>'."\n";
188: $this->form->javascript.='$("#'.$this->attrs['id'].'").autocomplete("{source:'.$this->url.'",delay:'.$this->frequency.',minLength:'.$this->minChar.'});';
189: return $field;
190: }
191:
192: }
193: ?>