Jump to content

WagnerFilho

Members
  • Content count

    41
  • Joined

  • Last visited

Community Reputation

0 Comum

About WagnerFilho

  1. Olá, Eu escrevi um exemplo de trabalho de um problema real que estou tentando resolver Criei um objeto simulando o retorno json que recebo do banco de dados. Eu preciso: Listar contratos e lotes de contratos Ao entrar na função, marcar o último `lote` do `contrato` como selecionado no Dropdown List Ao entrar na função, exibir as faturas `lote` e `contrato` selecionado no elemento `ul-invoices` Carregar e exibir as respectivas `faturas` ao alterar o `lote` Problemas: Não consigo listar as `faturas` do último `lote` do `contrato selecionado` ao carregar a função. Não consigo listar as `faturas` ao `alterar` o `lote` do `contrato` Observação: Ao entrar na página, já tenho as informações do contrato selecionado; no caso do exemplo, deixei o contrato com o ID 1. No exemplo estou usando a classe `in-attendance` para definir o contrato selecionado Estou usando `Revealing Pattern` e quero manter este padrão Tradução contracts = contratos batches = lotes invoices = faturas Exemplo <html> <label id="contracts"></label> <ul id="ul-invoices"></ul> <pre></pre> <script> let lblContract = document.querySelector('#contracts'); let UlInvoices = document.querySelector('#ul-invoices'); let contractInAttendance = 1; const objectContract = { id: 1, nome: 'wagner', contracts: [{ id: 1, contract: '123456', batches: [ { id: 1, contract_id: 1, batch: '1', invoices: [ { value: 10, batch_id: 1, }] }, { id: 2, contract_id: 1, batch: '2', invoices: [{ value: 10, batch_id: 2, }] }] }, { id: 2, contract: '246789', batches: [ { id: 3, contract_id: 2, batch: '1', invoices: [ { value: 20, batch_id: 3, }] }] }] } const revelling = (function() { function privateInit() { const contracts = objectContract.contracts; let contractFilteredById = contracts.filter(contract => contract.id === contractInAttendance); for (const contract of contracts) { const selectedContract = contract.id === contractFilteredById[0].id ? 'in-attendance' : ''; let htmlForBatchsOptions = contract.batches.map(batch => `<option value=${batch.id}>${batch.batch}</option>`).join(''); lblContract.innerHTML += `<div class="contract-${selectedContract}" style="display: flex;"> <div id="contract-${contract.contract}" data-contract="${contract.id}" class="loren"> <span>${contract.contract}</span> </div> <div class="ipsulum" style="margin-left: 5px;"> <select class="sel-batch"> ${htmlForBatchsOptions} </select> </div> </div>`; const batchOption = lblContract.querySelector('select.sel-batch'); batchOption.addEventListener('change', getInvoices); //batchOption.value = 2; } } function getInvoices() { const batchValue = event.target.value console.log(batchValue); //console.log(this.value); } return { init: privateInit() } })(); revelling.init; </script> </html>
  2. Esse script transforma a primeira letra de cada palavra em maiúsculas, exceto algumas palavras que fazem parte das matrizes nas variáveis wordContainAt, wordsToIgnore, wordUpperCase. Estou tendo problemas para refatorar o código criado no jQuery para JavaScript Puro. Pretendo utilizar exportação ES6. Acho que não entendi muito bem esse conceito, além de não conseguir obter o objeto this dentro do escopo da função, como acontece em jQuery. Alguém pode me ajudar ? <input class="lower" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> $(window).on('load', function() { $.fn.capitalize = function() { // words to ignore let wordContainAt = '@', wordsToIgnore = ['to', 'and', 'the', 'it', 'or', 'that', 'this'], wordUpperCase = ['S.A', 'SMS', 'USA'], minLength = 2; function getWords(str) { if (str == undefined) { str = 'abc def'; } else { str = str; } return str.match(/\S+\s*/g); } this.each(function() { let words = getWords(this.value); console.log(words); $.each(words, function(i, word) { // only continues if the word is not in the ignore list or contains at '@' if (word.indexOf(wordContainAt) != -1) { words[i] = words[i].toLowerCase(); } else if (wordUpperCase.indexOf($.trim(word).toUpperCase()) != -1) { words[i] = words[i].toUpperCase(); } else if (wordsToIgnore.indexOf($.trim(word)) == -1 && $.trim(word).length > minLength) { words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1).toLowerCase(); } else { words[i] = words[i].toLowerCase(); } }); if (this.value != '') { this.value = words.join(''); } }); }; // field onblur with class .lower $(document).on('blur', '.lower', function() { $(this).capitalize(); }).capitalize(); }); </script> Como pretendo: const capitalizeTheWord = () => { console.log('hello World'); const inputWordCapitalize = document.querySelector('input.lower'); inputWordCapitalize.addEventListener('blur', (e) => { // }); }; export default capitalizeTheWord();
  3. WagnerFilho

    Module Pattern Javascript

    Não sei se estou aplicando o conceito de javascript modular corretamente, portanto preciso de ajuda! Eu separei os arquivos js por responsabilidades. Cada arquivo será encarregado para uma determinada função. Estou carregando estes arquivos da seguinte forma: <html> <head> </head> <body> <div id="app-info"> <span id="app-name">name</span> </div> <script src="controllers/controllerExample.js"></script> <script src="resources/ajaxApp.js"></script> <script src="models/modelExample.js"></script> <script src="app.js"></script> </body> </html> observação: Eu não quero ir para o requiresJS. sem que antes eu tenha entendido como realmente funciona o modular pattern Além disso, eu quero que o retorno do ajax seja atribuído à um objeto global, podemos chama-lo de ObjectApplication para que em qualquer lugar da aplicação eu possa acessa-lo ? Como posso fazer isto ? Então tenho alguns arquivos js. app.js controllers / controllerExample.js models / modelExample.js resources / ajaxApp.js app.js let ObjectApplication = {}; ;(function( window, document, undefined ) { 'use strict'; function app() { var $private = {}; var $public = {}; $private.privateVar = 'private var'; $public.publicMethod = function() { return 'Init'; }; $private.privateMethod = function() { return 'Private method'; }; return $public; } window.MyGlobalObject = window.MyGlobalObject || {}; window.MyGlobalObject.app = app(); })( window, document ); MyGlobalObject.controllerExample.publicMethod(); console.log(objectApplication.name); controllerExample.js ;(function( window, document, undefined ) { 'use strict'; function controllerExample() { var $private = {}; var $public = {}; $private.privateVar = 'private var'; $public.publicMethod = function() { return MyGlobalObject.modelExample.publicMethod(); //return 'Init'; }; $private.privateMethod = function() { return 'Private method'; }; return $public; } window.MyGlobalObject = window.MyGlobalObject || {}; window.MyGlobalObject.controllerExample = controllerExample(); })( window, document ); modelExample.js ;(function( window, document, undefined ) { 'use strict'; function modelExample() { var $private = {}; var $public = {}; $private.privateVar = 'private var'; $public.publicMethod = function() { buildAppInfo(); //return 'Init in Model'; }; $private.privateMethod = function() { return 'Private method'; }; return $public; } window.MyGlobalObject = window.MyGlobalObject || {}; window.MyGlobalObject.modelExample = modelExample(); })( window, document ); ajax let buildAppInfo = () => { let url = 'app.json'; let xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status = 200) app = JSON.parse(xhr.responseText); console.log(app); } } xhr.send(); };
  4. O problema está na demora da resposta Ajax, quando o arquivo Excel possui muitas linhas para serem inseridas no banco de dados MySql. Pois desta forma minha aplicação fica travada, aguardando a resposta desta requisição. Então gostaria de alguma sugestão para obter a resposta do upload, e em segundo plano a importação fosse realizada, sem interferir no funcionamento da aplicação. Até então, estou utilizando o POST e no servidor PHP, estou utilizando o seguinte código: $tmp = $_FILES['file']['tmp_name']; $name = $_FILES['myfile']['name']; $path = "upload/"; if (move_uploaded_file($tmp, $path . $name)) { //aqui eu chamo funcão para importar o arquivo } ou em codeigniter $file = $_FILES['file']; $config = [ 'upload_path' => FCPATH.'upload/', 'allowed_types' => 'xlsx|xls|csv' ]; $this->load->library('upload', $config); if ($this->upload->do_upload('file')) { $data = $this->upload->data(); @chmod($data['full_path'], 0777); //aqui eu chamo funcão para importar o arquivo } Ajax ajaxCall = $.ajax({ //async: true, url: 'api_upload/upload', data: formData, cache: false, processData: false, contentType: false, type: 'POST', headers: { 'authorization': 'Basic YWRtaW46MTIzNA==', 'Authorizationkeyfortoken': String(responseToken), 'cache-control': 'no-cache', 'postman-token': '51901e9b-3613-248b-621e-ffd06d92ded4' }, // this part is progress bar xhr: function () { let xhr = new window.XMLHttpRequest(); xhr.upload.addEventListener('progress', function (evt) { if (evt.lengthComputable) { let percentComplete = evt.loaded / evt.total; percentComplete = parseInt(percentComplete * 100); $('.my-progress').text(percentComplete + '%'); $('.my-progress').css('width', percentComplete + '%'); } }, false); xhr.addEventListener('load', function (evt) { if (evt.lengthComputable) { //completeSave(); } }, false); xhr.addEventListener('abort', function (evt) { if (evt.lengthComputable) { //completeSave(); } }, false); return xhr; }, //beforeSend: function() { //completeSave(); //}, success: function (data) { //completeSave(); $('.msg').text(data); //$('#import-save').removeAttr('disabled'); } });
  5. WagnerFilho

    Calcular Juros com parcela - PHP

    Consegui resolver: <?php function calculo_negociacao($valor_total, $numero_parcelas, $dt_vencimento, $valor_entrada, $taxa = 0) { $parcelado = []; $inicio = 0; $JUROS = $taxa / 100.00; if ($valor_entrada > 0) { $inicio = 1; $valor_total = $valor_total - $valor_entrada; } $numero_parcelas = $numero_parcelas - $inicio; $valor_parcela = $valor_total * $JUROS * pow((1 + $JUROS), $numero_parcelas) / (pow((1 + $JUROS), $numero_parcelas) - 1); $valor_parcela = number_format((float)$valor_parcela, 2, '.', ''); print_r($valor_total); $parcelado = array_fill($inicio, $numero_parcelas, ['valor_parcela' => $valor_parcela]); // $numero_parcelas - 1 pois será menos 1 com a entrada ou 0 se nao houver // só depois de calcularmos todos é que podemos adicionar a entrada no inicio if ($valor_entrada > 0) { array_unshift($parcelado, ['valor_parcela' => number_format((float)$valor_entrada, 2, '.', '')]); } $dt_vencimento = explode( '-', $dt_vencimento); $dia = $dt_vencimento[0]; $mes = $dt_vencimento[1]; $ano = $dt_vencimento[2]; for($x = 0; $x < $numero_parcelas; $x++){ $parcelado[$x]['parcela'] = $x + 1; $parcelado[$x]['dt_vencimento'] = date('Y-m-d', strtotime('+'.$x.' month', mktime(0, 0, 0, $mes, $dia, $ano))); } return $parcelado; } $valor_total = 150.00; $numero_parcelas = 10; $valor_entrada = 0.00; $dt_vencimento = '09-09-2019'; $taxa = 1.00; $negociacao = calculo_negociacao($valor_total, $numero_parcelas, $dt_vencimento, $valor_entrada, $taxa); echo '<pre>'; echo var_dump($negociacao);
  6. WagnerFilho

    Calcular Juros com parcela - PHP

    Olá! Estou tentando adicionar taxa de juros em cada parcela, seguindo a mesma regra do exemplo neste link: Podem me ajudar com isto ? O Código que tenho até o momento é este: <?php function calculo_negociacao($valor_total, $parcelas, $dt_vencimento, $valor_entrada, $taxa = 0) { $parcelado = []; $inicio = 0; $JUROS = $taxa / 100.00; if ($valor_entrada > 0) { $inicio = 1; $valor_total = $valor_total - $valor_entrada; } $valor = $valor_total / ($parcelas - $inicio); // reduzimos 1 parcela se houver entrada ou 0 se nao $valor = $valor + $valor_total * $JUROS * pow((1 + $JUROS), $parcelas - $inicio); print_r($valor); $valor = number_format((float)$valor, 2, '.', ''); $parcelado = array_fill($inicio, $parcelas - $inicio, ['valor' => $valor]); // $parcelas - 1 pois será menos 1 com a entrada ou 0 se nao houver // só depois de calcularmos todos é que podemos adicionar a entrada no inicio if ($valor_entrada > 0) { array_unshift($parcelado, ['valor' => number_format((float)$valor_entrada, 2, '.', '')]); } $dt_vencimento = explode( '-', $dt_vencimento); $dia = $dt_vencimento[0]; $mes = $dt_vencimento[1]; $ano = $dt_vencimento[2]; for($x = 0; $x < $parcelas; $x++){ $parcelado[$x]['parcela'] = $x + 1; $parcelado[$x]['dt_vencimento'] = date("Y-m-d",strtotime("+".$x." month",mktime(0, 0, 0, $mes, $dia, $ano))); } return $parcelado; } $valor = 150.00; $taxa = 1.00; $valor_entrada= 50.00; $parcela = 4; $dt_vencimento = '09-09-2019'; $negociacao = calculo_negociacao($valor, $parcela, $dt_vencimento, $valor_entrada, $taxa); //var_dump($negociacao); echo '<pre>'; echo var_dump($negociacao); Código em funcionamento
  7. WagnerFilho

    CSS - Position: Sticky

    Muito obrigado, resolveu mesmo!!!
  8. WagnerFilho

    CSS - Position: Sticky

    Olá, Seguindo exatamente o exemplo abaixo, alguém pode me ajudar a trabalhar o position:sticky Hoje, a próxima data está se posicionando em cima da data atual. Desta forma, a opacidade e a sombra da data está ficando em 100%, gerando uma visão grotesca, caso haja muitas datas. Eu quero que a data anterior, suba com o scroll e dê lugar para a próxima data. Se eu adicionar a data e os diálogos em um container, dá certo, porém, preciso trabalhar com o que tenho abaixo. Javascript também é aceito para este trabalho o que tenho até agora jsfiddle <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title></title> <meta name="description" content="sticky"> <meta name="viewport" content="width=device-width"> </head> <body> <div class="chat"> <div class="data">05/03/2019</div> <div class="box recebido">Olá</div> <div class="box enviado">Oi, tudo bem ?</div> <div class="data">06/03/2019</div> <div class="box recebido">Tudo bem!</div> <div class="box recebido">e voce ?</div> <div class="box enviado">Tudo bem tambem</div> <div class="box recebido">preciso de ajuda</div> <div class="box recebido">Voce pode me ajudar</div> <div class="data">07/03/2019</div> <div class="box enviado">Talvez sim</div> <div class="box enviado">O que voce precisa</div> <div class="box recebido">Como posso utilizar o position:sticky ?</div> <div class="box enviado">Deixe-me ver</div> <div class="box enviado">Acho que posso te ajudar</div> <div class="box recebido">Certo</div> </div> </body> <style> * { margin: 0px; padding: 0px; } .chat { overflow: auto; border: solid 1px black; position: fixed; left: 50%; top: 50%; background-color: #e5ddd5; z-index: 100; height: 500px; margin-top: -200px; width: 500px; margin-left: -300px; } .box { width: 300px; margin: 30px auto; padding: 20px; text-align: center; font-weight: 400; color: black; font-family: arial; position: relative; border-radius: 20px; } .box.enviado { background: #dcf8c6; } .box.recebido { background: white; } .recebido:before { content: ""; width: 0px; height: 0px; position: absolute; border-left: 10px solid white; border-right: 10px solid transparent; border-top: 10px solid white; border-bottom: 10px solid transparent; left: 19px; bottom: -19px; } .enviado:before { content: ""; width: 0px; height: 0px; position: absolute; border-left: 10px solid transparent; border-right: 10px solid #dcf8c6; border-top: 10px solid #dcf8c6; border-bottom: 10px solid transparent; right: 19px; bottom: -19px; } .data { background-color: rgba(225, 245, 254, 0.92); color: rgba(69, 90, 100, 0.95)!important; padding: 5px 12px 6px 12px!important; border-radius: 7.5px!important; box-shadow: 0 1px 0.5px rgba(0, 0, 0, 0.13)!important; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.4)!important; margin-bottom: 8px!important; margin-top: 8px!important; margin-right: auto!important; margin-left: auto!important; max-width: 75px; opacity: 0.8; z-index: 2; } .data { top: 10px; position: sticky; } </style> </html>
  9. WagnerFilho

    Importar csv para duas tabelas MYSQL - Codeigniter

    Seria isto ? Mantive a coluna telefone, mas acredito que dê pra ter uma ideia. if(count($result) > 0){ foreach ($result as $r) { $pessoa_id = $r->id; $update = [ 'name' => $line[0], 'phone' => $line[2], 'created' => $line[3], 'status' => $line[4] ]; $this->db->update('member', $update, array('email' => $line[1])); $update_phone = [ 'phone' => $line[2] ]; $this->db->update('phone', $update_phone, array('pessoa_id' => $pessoa_id)); } } else { $insert = [ 'name' => $line[0], 'email' => $line[1], 'phone' => $line[2], 'created' => $line[3], 'status' => $line[4] ]; $this->db->insert('member', $insert); $pessoa_id = $this->db->insert_id(); $insert_phone = [ 'phone' => $line[2], 'pessoa_id' => $pessoa_id ]; $this->db->insert('phone', $insert_phone); }
  10. WagnerFilho

    Importar csv para duas tabelas MYSQL - Codeigniter

    Oi, eu tentei algo do tipo, mas não consegui chegar no resultado. Tem algum exemplo ? Meu problema está em recuperar o ID de cada inserção.
  11. Olá, com a simples função abaixo, consigo importar dados para uma tabela do mysql. A questão é que a coluna telefone ficará em outra tabela e da forma que está hoje, só consigo importar para a mesma tabela. Como posso fazer para importar as colunas de um arquivo csv para uma tabela e a coluna telefone importar para outra tabela ? public function upload_file(){ $tipo = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv'); if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'],$tipo)){ if(is_uploaded_file($_FILES['file']['tmp_name'])){ // abre o arquivo csv carregado com o modo somente leitura $arquivo = fopen($_FILES['file']['tmp_name'], 'r'); // pula a primeira linha // se o arquivo csv não tiver cabeçalho, apenas comente a próxima linha fgetcsv($arquivo); // analisar dados do arquivo csv linha por linha while(($coluna = fgetcsv($arquivo)) !== FALSE){ // verifica se o membro já existe no banco de dados com o mesmo email $result = $this->db->get_where("tb_pessoa", array("email"=>$coluna[1]))->result(); if(count($result) > 0){ // atualiza os dados da pessoa $this->db->update("tb_pessoa", array("nome"=>$coluna[0], "telefone"=>$coluna[2], "dt_inclusao"=>$coluna[3], "status"=>$coluna[4]), array("email"=>$coluna[1])); }else{ // inserir dados da pessoa no banco de dados $this->db->insert("tb_pessoa", array("nome"=>$coluna[0], "email"=>$coluna[1], "telefone"=>$coluna[2], "dt_inclusao"=>$coluna[3], "status"=>$coluna[4])); } } //close opened csv file fclose($arquivo); $qstring["status"] = 'Success'; }else{ $qstring["status"] = 'Error'; } }else{ $qstring["status"] = 'Invalid file'; } $this->load->view('csvToMySQL',$qstring); } tabelas tb_pessoa nome varchar(100) NOT NULL email varchar(100) NOT NULL telefone varchar(100) NOT NULL dt_inclusao timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP status varchar(100) NOT NULL tb_telefone telefone varchar(100) NOT NULL pessoa_id int(11) NOT NULL
  12. Olá, com a simples função abaixo, consigo importar dados para uma tabela do mysql. A questão é que a coluna telefone ficará em outra tabela e da forma que está hoje, só consigo importar para a mesma tabela. Como posso fazer para importar as colunas de um arquivo csv para uma tabela e a coluna telefone importar para outra tabela ? public function upload_file(){ $tipo = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv'); if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'],$tipo)){ if(is_uploaded_file($_FILES['file']['tmp_name'])){ // abre o arquivo csv carregado com o modo somente leitura $arquivo = fopen($_FILES['file']['tmp_name'], 'r'); // pula a primeira linha // se o arquivo csv não tiver cabeçalho, apenas comente a próxima linha fgetcsv($arquivo); // analisar dados do arquivo csv linha por linha while(($coluna = fgetcsv($arquivo)) !== FALSE){ // verifica se o membro já existe no banco de dados com o mesmo email $result = $this->db->get_where("tb_pessoa", array("email"=>$coluna[1]))->result(); if(count($result) > 0){ // atualiza os dados da pessoa $this->db->update("tb_pessoa", array("nome"=>$coluna[0], "telefone"=>$coluna[2], "dt_inclusao"=>$coluna[3], "status"=>$coluna[4]), array("email"=>$coluna[1])); }else{ // inserir dados da pessoa no banco de dados $this->db->insert("tb_pessoa", array("nome"=>$coluna[0], "email"=>$coluna[1], "telefone"=>$coluna[2], "dt_inclusao"=>$coluna[3], "status"=>$coluna[4])); } } //close opened csv file fclose($arquivo); $qstring["status"] = 'Success'; }else{ $qstring["status"] = 'Error'; } }else{ $qstring["status"] = 'Invalid file'; } $this->load->view('csvToMySQL',$qstring); } tabelas tb_pessoa nome varchar(100) NOT NULL email varchar(100) NOT NULL telefone varchar(100) NOT NULL dt_inclusao timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP status varchar(100) NOT NULL tb_telefone telefone varchar(100) NOT NULL pessoa_id int(11) NOT NULL
  13. Alguém pode me dar uma ideia de como posso selecionar o menu, e a aplicação exibir as opções pertencentes ao menu selecionado. Resumo: Aparecer no menu lateral somente opção do Menu selecionado (Ver imagem no final). HTML NAVIGATION BAR <nav id="navigation-bar" class="navigation-bar navbar navbar-static-top" role="navigation"> <button id="navbox-trigger" class="navbox-trigger"><i class="fa fa-lg fa-th"></i></button> <div id="" class="bar"> <div id="navbox" class="navbox"> <div class="navbox-tiles"><a href="#" class="tile"> <div class="icon"><i class="fa fa-handshake-o"></i></div><span class="title">Cobrança</span></a><a href="#" class="tile"> <div class="icon"><i class="fa fa-users"></i></div><span class="title">Supervisão</span></a><a href="#" class="tile"> <div class="icon"><i class="fa fa-database"></i></div><span class="title">Back Office</span></a><a href="#" class="tile"> <div class="icon"><i class="fa fa-file-pdf-o"></i></div><span class="title">Relatórios</span></a><a href="#" class="tile"> <div class="icon"><i class="fa fa-tags"></i></div><span class="title">Suporte</span></a><a href="#" class="tile"> <div class="icon"><i class="fa fa-cogs"></i></div><span class="title">Configurações</span></a> </div> </div> </div> </nav> HTML-PHP SIDEBAR BARExemplo de uma opção pertencente ao menu Configurações <li class="header text-uppercase">Configuracao</li> <li class="treeview <?php if($this->uri->segment(2)=='permissao') echo "active"; ?>"> <a href="#"> <i class="fa fa-lock"></i> <span><?php echo 'Configuracao'; ?></span> <i class="fa fa-angle-left pull-right"></i> </a> <ul class="treeview-menu"> <li class="<?php echo menu_ativo('permissao') ?>"> <a href="<?php echo site_url('app/permissao'); ?>"><i class="fa fa-circle-o"></i>Permissão</a> </li> </ul> </li> Lembrando que estou utilizando o codeigniter. Preview
  14. Olá! Em um formulário de usuário, eu carrego informações, como nome de usuário, senha e permissões. Mas agora eu incluí na tabela de `permissoes` uma coluna chamada `grupo`. E incluí no formulário de `usuarios` um campo `grupo`, para que; toda vez que for escolhido a permissão do usuário, o campo grupo carregue o nome do grupo da permissão selecionada. Sei que no MYSQL, a querie utilizada seria: `SELECT `grupo` FROM `permissoes` WHERE `id` = 1` Mas não consegui fazer isto no codeigniter. Na função editar, Recupero os dados do usuário e exibo as informações na view da seguinte forma: Controller Usuário //Obtem dados do usuário $this->data['usuarios'] = $this->Usuarios_model->obter_id($this->uri->segment(4)); //Obtem Permissões Ativas $this->data['permissoes'] = $this->Permissoes_model->obter_ativo('permissoes', 'permissoes.id,permissoes.nome'); //Carrega View $this->template->admin_render('admin/usuarios/editar', $this->data); Model Usuário: //Função obter ID function obter_id($id){ $this->db->select('usuarios.*, permissoes.nome as permissao'); $this->db->select('usuarios.*, permissoes.grupo as grupo'); $this->db->join('permissoes', 'usuarios.permissoes_id = permissoes.id', 'left'); $this->db->where('usuarios.id',$id); $this->db->limit(1); return $this->db->get('usuarios')->row(); } Model Permissões: //Exibir somente permissões ativas function obter_ativo($tabela,$campos){ $this->db->select($campos); $this->db->from($tabela); $this->db->where('situacao',1); $query = $this->db->get(); return $query->result();; } View Usuário: <div class="col-sm-3"> <label for=""><?php echo lang('usuarios_permissao');?></label> <select name="permissoes_id" id="permissoes_id" class="form-control"> <?php foreach ($permissoes as $permissao) { if($permissao->id == $usuarios->permissoes_id){ $selected = 'selected';}else{$selected = '';} echo '<option value="'.$permissao->id.'"'.$selected.'>'.$permissao->nome.'</option>'; } ?> </select> </div> <div class="col-sm-3"> <label for=""><?php echo 'Grupo'?></label> <select name="grupo_id" id="" class="form-control" readonly> <?php foreach ($permissoes as $permissao) { $id = $permissao->id; $permissoes_id = $usuarios->permissoes_id; $grupo_id = $permissao->grupo; if ($grupo_id == 1) { $grupo = 'Adminstrador'; } elseif ($grupo_id == 2) { $grupo = 'Usuário'; } elseif ($grupo_id == 3) { $grupo = 'Suporte'; } elseif ($grupo_id == 4) { $grupo = 'Cliente'; } if($id == $permissoes_id){ $selected = 'selected';}else{$selected = '';} echo '<option value="'.$grupo_id.'"'.$selected.'>'.$grupo.'</option>'; } ?> </select> </div> Tabelas usuário: `id` INT(11) NOT NULL AUTO_INCREMENT, `primeiro_nome` VARCHAR(40) NOT NULL, `ultimo_nome` VARCHAR(40) NOT NULL, `nome_usuario` VARCHAR(40) NOT NULL, `telefone` VARCHAR(20) NULL DEFAULT NULL, `email` VARCHAR(80) NOT NULL, `senha` VARCHAR(45) NOT NULL, `permissoes_id` INT NOT NULL, `grupo` INT NOT NULL, Tabelas Permissoes: `id` INT(11) NOT NULL AUTO_INCREMENT, `nome` VARCHAR(80) NOT NULL, `descricao` VARCHAR(80) NULL DEFAULT NULL, `grupo` INT NOT NULL, `permissoes` TEXT NULL, `situacao` TINYINT(1) NULL,
  15. WagnerFilho

    Posicionar Mensagens Chat Codeigniter

    Olá, Estou a desenvolver um aplicativo de mensagens(chat) e praticamente está concluído e funcionando. Acontece que as mensagens estão todas alinhadas da esquerda para direita, independente do usuário da mensagem. Exemplo: Usuario 1 Mensagem Usuario 2 Mensagem Usuario 1 Mensagem Usuario 2 Mensagem Pretendo alterar isto e posicionar a mensagem do usuario 1 a esquerda e posicionar a mensagem do usuario 2 a direita. (estilo WhastApp). Usuario 1 Mensagem Mensagem Usuario 2 Usuario 1 Mensagem Mensagem Usuario 2 Abaixo está o código de como estou recuperando a mensagem. <?php $this->db->select('tickets_historico.*,usuarios.nome_usuario'); $this->db->join('usuarios','usuarios.id = tickets_historico.usuario_id', 'left'); $this->db->where('ticket_id = 1'); $this->db->order_by('dt_cadastro','desc'); $historico = $this->db->get('tickets_historico')->result_array() ?> Abaixo está o código de como estou exibindo a mensagem. <div class="direct-chat-msg"> <?php //Se houver comentários, imprime os comentários if(count($historico) > 0) { foreach ($historico as $row) {?> <?php $id = $row['usuario_id']; ?> <?php $image_url = base_url() . 'upload/imagens_usuarios' . '/' . $id . "_thumbnail" . '.jpg'; ?> <div class="direct-chat-info clearfix"> <span class="direct-chat-name pull-left"><?=$row['nome_usuario']?></span> <span class="direct-chat-timestamp pull-right"><?= date('d/m/Y h:i A',strtotime($row['dt_cadastro']))?></span> </div> <img class="direct-chat-img" src="<?php echo $image_url; ?>" alt="message user image"> <div class="direct-chat-text"> <?=$row['mensagem'];?> </div><br> <?php } } else //Quando não há nenhum comentário { echo "<p>Atualmente, não há comentários.</p>"; } ?> </div> Resumindo o código acima: if(count($historico) > 0) { foreach ($historico as $row) {?> <p><strong><?=$row['nome_usuario']?></strong> Disse em <?= date('d/m/Y h:i A',strtotime($row['dt_cadastro']))?><br> <?=$row['mensagem'];?></p><hr> <?php } } else //Quando não há nenhum comentário { echo "<p>Atualmente, não há comentários.</p>"; } ?>
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.