1 | <?php |
---|
2 | /** |
---|
3 | * Este plugin insere um input que mostra os valores que podem ser selecionados enquanto o usuário digita. |
---|
4 | * Os valores são preenchidos previamente através de uma requisição ajax: a classe e método que será invocado é passado por parêmetro no momento em que o desenvolvedor utiliza o componente. |
---|
5 | * |
---|
6 | * @package Smarty |
---|
7 | * @subpackage wf_plugins |
---|
8 | * @param array $params Array de parametros |
---|
9 | * - name: o nome que o componente irá receber. |
---|
10 | * - ajaxClass: classe ajax que será utilizada para fazer a consulta. |
---|
11 | * - ajaxMethod: método da classe que será invocado para preencher a lista de opções. |
---|
12 | * - methodParam: Parâmetro para o método que será invocado para preencher a lista de opções. |
---|
13 | * - idValue: (opcional) o id de um item previamente selecionado (não é visível para o usuário). |
---|
14 | * - textValue: (opcional) o texto de um item inicialmente selecionado (é visível para o usuário). |
---|
15 | * - minLength: (opcional) número mínimo de caracteres necessários para que as opções apareçam na lista. |
---|
16 | * - style: (opcional) estilo para o campo input |
---|
17 | * @param object &$smarty Instância do objeto smarty em uso |
---|
18 | * @return string $output codigo que insere os select boxes. |
---|
19 | * @access public |
---|
20 | */ |
---|
21 | function smarty_function_wf_autocomplete_input($params, &$smarty) |
---|
22 | { |
---|
23 | $requiredParams = array( |
---|
24 | 'name', |
---|
25 | 'ajaxClass', |
---|
26 | 'ajaxMethod' |
---|
27 | ); |
---|
28 | $defaultValues = array( |
---|
29 | 'minLength' => 1, |
---|
30 | 'style' => "width: 200px" |
---|
31 | ); |
---|
32 | $extractParams = array( |
---|
33 | 'name', |
---|
34 | 'ajaxClass', |
---|
35 | 'ajaxMethod', |
---|
36 | 'methodParam', |
---|
37 | 'minLength', |
---|
38 | 'idValue', |
---|
39 | 'textValue', |
---|
40 | 'style' |
---|
41 | ); |
---|
42 | |
---|
43 | /* verifica se todos os parâmetros obrigatórios foram passados */ |
---|
44 | foreach ($requiredParams as $required) |
---|
45 | if (!array_key_exists($required, $params) || (empty($params[$required]))) |
---|
46 | $smarty->trigger_error("[wf_autocomplete_input] missing required parameter(s): $required", E_USER_ERROR); |
---|
47 | |
---|
48 | /* atribui valores default para os parâmetros não passados */ |
---|
49 | foreach ($defaultValues as $key => $value) |
---|
50 | if (!isset($params[$key])) |
---|
51 | $params[$key] = $value; |
---|
52 | |
---|
53 | /* extrai alguns parâmetros da matriz de parâmetros */ |
---|
54 | foreach ($extractParams as $extract) |
---|
55 | $$extract = $params[$extract]; |
---|
56 | |
---|
57 | /* parâmetros extras são "acumulados" em uma única variável */ |
---|
58 | $extraParams = array(); |
---|
59 | foreach ($params as $key => $value_params) |
---|
60 | if (!in_array($key, $extractParams)) |
---|
61 | $extraParams[$key] = $value_params; |
---|
62 | |
---|
63 | $name_input = 'input' . $name; |
---|
64 | $name_list = 'list' . $name; |
---|
65 | $name_response = 'response' . $name; |
---|
66 | |
---|
67 | /* se parâmetro for um array "joga" para o javascript como um objeto JSON */ |
---|
68 | if (is_array($methodParam)){ |
---|
69 | $methodParam = json_encode($methodParam); |
---|
70 | } else { |
---|
71 | $sep = "'"; // se não for um objeto passa parâmetro entre aspas |
---|
72 | } |
---|
73 | |
---|
74 | /* Cria um objeto JSON com os parâmetros opcionais utilizados pelo javascript */ |
---|
75 | $extraParams = array ('idValue' => $idValue |
---|
76 | , 'textValue' => $textValue |
---|
77 | , 'minLength' => $minLength |
---|
78 | ); |
---|
79 | $extraParams = json_encode($extraParams); |
---|
80 | |
---|
81 | $output = <<<EOF |
---|
82 | <input id="$name" name="$name" type="hidden"/> |
---|
83 | <input id="$name_input" name="$name_input" type="text" value="$textValue" style="$style" onfocus="checkDataLoaded('$name');" onblur="setTimeout('selectAutocompleteElement(\'$name\')', 500);"/> |
---|
84 | <span id="$name_response"></span> |
---|
85 | <div id="$name_list" class="autocomplete" style="display: none;"></div> |
---|
86 | <script>autocompleteSelect('$name', '$ajaxClass', '$ajaxMethod', $sep$methodParam$sep, $extraParams);</script> |
---|
87 | EOF; |
---|
88 | return $output; |
---|
89 | } |
---|
90 | ?> |
---|