source: trunk/workflow/inc/smarty/wf_plugins/function.wf_autocomplete_input.php @ 1935

Revision 1935, 3.3 KB checked in by asaikawa, 14 years ago (diff)

Ticket #442 - Inserido atributo name nos elementos e ajustada a atribuicao do valor a ser carregado

Line 
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 */
21function 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>
87EOF;
88        return $output;
89}
90?>
Note: See TracBrowser for help on using the repository browser.