[1428] | 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" type="hidden"/> |
---|
| 83 | <input id="$name_input" type="text" 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 | ?> |
---|