Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jefferson NF

Abrir janela modal (atalho), dar insert no bd e atualizar o select

Recommended Posts

Pessoal,

 

Preciso fazer algo mais ou menos assim:

 

O usuario vai cadastrar um produto e escolhe a unidade desse produto (uma lista em um combobox). Porém, pode acontecer, em determinado momento, de não ter uma unidade cadastrada, para não perder tempo nem o que já foi digitado, terá um link (atalho), do lado do combobox de unidades, para incluir uma nova unidade. Abrirá uma janela modal, o usuário inclui a unidade nova que deseja, fecha essa janela e automaticamente o que foi cadastrado deve ser listado no combobox para que o usuario possa selecionar.

 

Alguém tem alguma ideia de como fazer isso com CakePHP e Js Helper ou JQuery.

 

Achei esse tutorial:

http://www.webbedit.co.uk/blog_posts/view/tutorial-cakephp-modalbox-crud

Mas infelizmente está desatualizado, pois utilizo a versão 2.2.5 do Cake e os arquivo JS que ele utiliza não encontro mais para download.

Alguém pode me ajudar?

 

 

Pessoal,

 

 

 

Preciso muito resolver isso. Por favor.

 

 

Pessoal,

 

Consigo abrir a janela modal e salvar no BD, o problema é que não consigo atualizar meu combobox após fechar a janela modal.

 

Fiz isso:

 

VIEW

  echo $this->Form->input('unidade_id', array(            'label' => 'Unidade: ',            'empty' => 'Selecione...',            'id' => 'unidade_id',            'after' => ' ' . $this->Html->link('+ Unidade', '#', array('class' => 'addNewUnidade'))));<!-- Modal Dialog for Adding New Category (THIS IS HIDDEN UNTIL GET CALLED AS MODAL DIALOG)--><div class="dialog-form" title='Inserir uma nova unidade.'>    <?php         echo $this->Form->create('Unidade');        echo $this->Form->input('nome');        echo $this->Form->input('sigla');        echo $this->Form->input('ativo');                echo $this->Form->end(__('Submit'));    ?>    </div><script type="text/javascript">           $('.dialog-form').dialog({           autoOpen: false,           title: 'Inserir uma nova unidade.',           modal: true,           height: 300,           width: 350,           close: function() {           }        });        $('.addNewUnidade').click(function() {            $('.dialog-form').dialog('open');        });    $('.dialog-form .submit').click(function(e) {        var value1 = document.getElementById('UnidadeNome').value;        var value2 = document.getElementById('UnidadeSigla').value;        var value3 = document.getElementById('UnidadeAtivo').value;        var data = {            'data[Unidade][nome]':value1,            'data[Unidade][sigla]':value2,            'data[Unidade][ativo]':value3        };        e.preventDefault();        $.ajax({            type:"POST",            url: "<?php echo $this->Html->url(array('controller' => 'unidades', 'action' => 'add')); ?>",            data: data,            success: function(html/*echoedResponseFromPHPController*/) {                $('.dialog-form').dialog('close');                $("#unidade_id").replaceWith(html);                //$("#unidade_id").replaceWith(echoedResponseFromPHPController);                           }        })    });  </script>

 

 

CONTROLLER (unidadesController)

public function add() {        if ($this->request->is('post')) {            $this->Unidade->create();            if ($this->Unidade->save($this->request->data)) {                $this->Session->setFlash(__('The unidade has been saved'));                $this->redirect(array('action' => 'index'));            } else {                $this->Session->setFlash(__('The unidade could not be saved. Please, try again.'));            }        }    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu add vc tbm tem que testar se o request vem por ajax

if ($this->request->is('ajax'))

 

neste caso vc não pode usar um redirect .. e no

 

success: function(html)

 

vc pode fazer um .load em uma action que refaz a pesquisa dos dados do combo

 

$("#unidade_id").load(caminho);

por exemplo

success: function(){$('#id_do_combo_box').load('<?= $this->request->webroot; ?>unidades/list');

}

 

ai eh soh criar uma acion com a view ajax e fazer um find com todos os dados que há estarao atualizados ... espero que ajude em algo .. abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.