Na verdade eu fiz num foi nem um helper. Foi uma library (je tem um tempo).
Segue o code pra pedrada.

No caso, meu model tem algumas convenções criadas, tais como definir
variavel com a chave primaria da tabela.
Assim uso um dos dois:
$this->combo->meuCombo("Usuariomodel");
$this->combo->comboQuery('idusuario', 'Usuariomodel');


<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Biblioteca responsável pela montagem dos combos
 *
 * @author Vinicius Cruz ([email protected])
 * @copyright
 * @version v 1.1
 * @package _app/libraries
 * @access public
 */
class Combo {
    /**
     * @var $query Recebe query da consulta para montagem dos combos
     * @access private
     */
    private $query;
    /**
     * @var $chavePrimaria Recebe nome do campo com chave primária
     * @access private
     */
    private $chavePrimaria;

    /**
     * Construtor da classe
     * @param void
     */
    function __construct()
    {

    }
    /**
     * Meu Combo
     *
     * @access public
     * @param string $model Model a consultar
     * @param string $field Nome do campo a ser ordenado na consulta.
     * @return array
     */
    public function meuCombo($model, $field='nome')
    {
        return $this->montaComboGeneric($model, $field);
    }
    /**
     * Combo via Query
     *
     * @access public
     * @param string $idChave Define chave primária, que será índice
     * @param string $query Consulta query a gerar Combo
     * @return array
     */
    public function comboQuery($idChave, $query, $field='nome')
    {
        $this->configCombo($idChave, $query);
        return $this->combo($field);
    }
    /**
     * Monta Combo
     *
     * Metodo generico para montar combo.
     * @access private
     * @param string $model Nome do model
     * @param string $field Nome do campo a ser ordenado na consulta
     * @return array
     */
    private function montaComboGeneric($tmp, $field='nome')
    {
        $CI =& get_instance();
        $CI->load->model($tmp);
        $model = $CI->$tmp;
        $this->configCombo( $model->chavePrimaria,
                            $model->lista($field)
                           );
        return $this->combo($field);
    }
    /**
     * Configura montagem de Combo
     *
     * Recebe valores necessários para montagem do combo.
     * @access private
     * @param string $chave Nome do campo indicado como chave primária da
tabela
     * @param string $query Query da consulta a ser montado no combo
     * @return void
     */
    private function configCombo($chave, $query)
    {
        $this->chavePrimaria = $chave;
        $this->query = $query;
    }
    /**
     * Monta combo
     *
     * Monta array de combo. O combo propriamente dito é montado no view da
aplicação.
     * @access private
     * @param string $campo Recebe nome do campo a ser exibido no html do
combo
     * @return array
     */
    private function combo($campo='nome')
    {
        $arrAux = array();
        $chavePrimaria = $this->chavePrimaria;
        foreach($this->query->result() as $row)
        {
            $arrAux[$row->$chavePrimaria] = $row->$campo;
        }
        return $arrAux;
    }
}
?>

2009/2/2 Edinho Almeida <[email protected]>

> Eu também prefiro no Model a chamada ao banco de dados.
> // model
>
> class Usuario_model extends Model{
> function getEstados(){
> $this->db->get('estados')->result_array();
> }
> function getDadosUsuario($id=null){
> $this->db->getwhere('usuarios',array('id'=>$id))->result_array();
> }
> }
>
> // controller
>
> class Usuario_controller extends Controller{
> function edit($id){
>  $data['usuario'] = $this->usuario_model->getDadosUsuario($id);
>  $data['estados'] = $this->usuario_model->getEstados();
>  $this->load->view('usuario_edit', $data);
> }
> }
>
> Aí na view usuario_edit eu tenho o array de estados e os dados do usuario.
>
> Abs
> Edinho Almeida
> 11 8018-8019
>
>
> 2009/2/2 Ricardo Valfreixo <[email protected]>
>
> Concordo com o Marcus. Essa função deveria estar num model. Que passava o
>> array para o controller e por sua vez para a view. Na view só tem de chamar
>> o form_dropdown. Acesso a base de dados fora do model é sempre má prática.
>>
>>
>> Vx
>>
>>
>> 2009/2/2 Marcus Cavalcanti <[email protected]>
>>
>> Bem, se vc do seu helper precisa acessar alguma função que faz acesso a
>>> dados, então há alguma coisa de errado.
>>>
>>> Sugiro que você reveja isso, pois essa solução não é a ideal.
>>>
>>> Abs
>>>
>>> 2009/2/2 Vinicius Cruz <[email protected]>
>>>
>>> Bom, eu desenvolvi um helper proprio de combo, mas somente para tratar a
>>>> consulta do banco, retornando um array. O array retornado passo para o view
>>>> e chamo a função form_dropdown().
>>>>
>>>> Posso disponibilizar depois, caso deseje. Só não sei se está perfeito
>>>> (em termo de programação), mas me atende tranquilamente.
>>>>
>>>> Vinicius
>>>>
>>>>
>>>> 2009/2/1 Julio Cesar <[email protected]>
>>>>
>>>>> Olá, opa é uma ótima dica essa, o único defeito deste dropdown para
>>>>> mim, é que eu precisaria, fazer o SELECT do banco de dados de qualquer 
>>>>> forma
>>>>> e depois jogar em uma array, e fazer isto na view de jeito nenhum né :D
>>>>> Então a própria função do helper já faz todo o trabalho, bastando na
>>>>> view chamar a função com os parâmetros e pronto :D  A questão do: "*fazer
>>>>> echo "<select>" ... bla bla bla.*"  só se faz necessário no helper ou
>>>>> seja, a função é implementada e pronto depois é só chamar * <?php
>>>>> combo_cria('tabela','campo');?>*  na view e a função se encarrega de
>>>>> todo o trabalho.
>>>>> Quanto a este helper, até já implementei a questão da array para
>>>>> mostrar no combo mais de um campo da tabela, e agora com este dropdown, vi
>>>>> mais uma questão interessante de ser implementado que seria de "dizer" 
>>>>> qual
>>>>> opção deveria vir selecionada :D
>>>>> Mas é isso ae, fazendo e aprendendo.... :D
>>>>> Vlw
>>>>>
>>>>>
>>>>> 2009/2/2 Beto <[email protected]>
>>>>>
>>>>> nao sei se ajudaria ainda , mas  o helper Form cria os select de form
>>>>>> facil, entao vc nao precisaria fazer echo "<select>" ... bla bla bla.
>>>>>>
>>>>>> na documentacao do helper form procura por:form_dropdown()
>>>>>> []'s
>>>>>>
>>>>>> - - - - - - - - - - - - - - - - - - - - -
>>>>>> Luiz Alberto S. Ribeiro [ Beto ]
>>>>>> http://beto.euqueroserummacaco.com
>>>>>>
>>>>>>
>>>>>> 2009/2/1 Julio Cesar <[email protected]>
>>>>>>
>>>>>> Douglas! Perfeito era isso mesmo que eu estava precisando. Deu certo o
>>>>>>> helper :D
>>>>>>>
>>>>>>> Vou compartilhar aqui como que ficou a função:
>>>>>>>
>>>>>>>    * function combo_cria($tcTabela,$tcCampo){
>>>>>>>
>>>>>>>         $ci = & get_instance();
>>>>>>>
>>>>>>>         $rQuery = $ci->db->get($tcTabela);
>>>>>>>         echo "<select>";
>>>>>>>         foreach ($rQuery->result() as $row){
>>>>>>>             echo "<option>". $row->$tcCampo ."</option>";
>>>>>>>         }
>>>>>>>         echo "</select>";
>>>>>>>     }*
>>>>>>>
>>>>>>> Basta criar o helper no caso  o arquivo *combo_helper.php*  (Claro
>>>>>>> que crie o arquivo decente não só com a função :D)
>>>>>>> Depois para carregar o helper chamar assim: *
>>>>>>> $this->load->helper('combo');*
>>>>>>> E então para usar ele no seu view faça assim: * <?php
>>>>>>> combo_cria('tabela','campo');?> *
>>>>>>>
>>>>>>> Está ae a dica.
>>>>>>> Algumas coisas que poderiam ser melhoradas:
>>>>>>> 1. Fazer o combo ter uma opção em branco.
>>>>>>> 2. No parâmetro tcCampo tornar possível passar uma array para
>>>>>>> múltiplos campos....
>>>>>>> 3. Criar um parâmetro para uma condição WHERE, algo assim.
>>>>>>>
>>>>>>> Bem mas essas dicas estão ae só para quem quiser implementar algo
>>>>>>> mais prático :D
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 2009/2/1 Douglas G. Souza <[email protected]>
>>>>>>>
>>>>>>>  Júlio,
>>>>>>>>
>>>>>>>> Você pode usar da seguinte maneira:
>>>>>>>>
>>>>>>>> $ci = & get_instance();
>>>>>>>> $ci->db->get('tabela');
>>>>>>>>
>>>>>>>> E isso pode ser usado para qualquer outra classe dentro da instância
>>>>>>>> do CI.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Julio Cesar escreveu:
>>>>>>>>
>>>>>>>> Olá, pessoal, estou fazendo um helper que cria um combo dos
>>>>>>>> registros de uma tabela, só que estou como um problemão.
>>>>>>>> Pois como que uso a classe db em um helper?
>>>>>>>> Porque eu não posso usar assim:  $this->db->get('tabela');
>>>>>>>> Porque na verdade o $this aqui não existe. Então a pergunta
>>>>>>>> seria, como que eu posso usar as classes do CI como a db em um
>>>>>>>> Helper?  Dei uma olhada nos outros helpers, nenhum usa classe db
>>>>>>>> Como poderia fazer?
>>>>>>>>
>>>>>>>> Obrigado pela atenção.
>>>>>>>>
>>>>>>>> ------------------------------
>>>>>>>> _______________________________________________
>>>>>>>> Lista mailing 
>>>>>>>> [email protected]http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Lista mailing list
>>>>>>>> [email protected]
>>>>>>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Lista mailing list
>>>>>>> [email protected]
>>>>>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Lista mailing list
>>>>>> [email protected]
>>>>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Lista mailing list
>>>>> [email protected]
>>>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Lista mailing list
>>>> [email protected]
>>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>>
>>>>
>>>
>>>
>>> --
>>> Marcus Cavalcanti
>>> 21 9144-5068
>>> www.marcuscavalcanti.net/blog
>>>
>>> _______________________________________________
>>> Lista mailing list
>>> [email protected]
>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>
>>>
>>
>> _______________________________________________
>> Lista mailing list
>> [email protected]
>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>
>>
>
> _______________________________________________
> Lista mailing list
> [email protected]
> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
>
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

Responder a