Ir para conteúdo

POWERED BY:

Todas as Novidades

Atualizada automaticamente     

  1. Today
  2. Última semana
  3. Mais antigo
  4. Williams Duarte

    Fixar div até atingir uma certa altura

    Você pode ajustar o comportamento da div para que ela pare de ser fixa ao se aproximar do rodapé, calculando a distância entre a div e o rodapé durante o scroll. Aqui está uma solução que faz isso: <script> $(function(){ var jElement = $('.fixar_banner'); var footer = $('footer'); // Substitua 'footer' pelo seletor do seu rodapé var offsetTop = jElement.offset().top; var footerOffset = footer.offset().top; var elementHeight = jElement.outerHeight(); $(window).scroll(function(){ var scrollTop = $(this).scrollTop(); var distanceToFooter = footerOffset - (scrollTop + elementHeight + 20); // 20 é um espaçamento extra if (scrollTop > offsetTop && distanceToFooter > 0) { jElement.css({ 'position': 'fixed', 'top': '10px' }); } else if (scrollTop > offsetTop && distanceToFooter <= 0) { jElement.css({ 'position': 'absolute', 'top': footerOffset - elementHeight }); } else { jElement.css({ 'position': 'relative', 'top': 'auto' }); } }); }); </script> Explicação: Cálculo das Posições: - offsetTop: É a distância inicial da div em relação ao topo da página. - footerOffset: É a distância do rodapé em relação ao topo da página. - elementHeight: É a altura da div que você quer fixar. Lógica do Scroll: 1. Quando o scroll é maior que a posição inicial da div (offsetTop) e ainda há espaço antes do rodapé (distanceToFooter > 0): - A div é fixada na posição desejada (por exemplo, top: 10px). 2. Quando a div está próxima do rodapé (distanceToFooter <= 0): - A div é posicionada de forma absoluta, alinhando-se ao topo do rodapé. 3. Caso contrário: - A div retorna à posição relativa original. Ajustes: - Certifique-se de substituir 'footer' pelo seletor correto do seu rodapé. - O valor 20 é um espaçamento extra para evitar que a div encoste no rodapé. Ajuste conforme necessário.
  5. ILR master

    Fixar div até atingir uma certa altura

    Opa. Vaeu, mas não consegui. Consegue me ajudar com o código ou me passar um link de artigo ou vídeo? Abs
  6. Williams Duarte

    Fixar div até atingir uma certa altura

    DeepSeek, a ferramenta de IA, vai tirar suas dúvidas e é gratuita ainda: https://chat.deepseek.com/
  7. Williams Duarte

    Ajuda com Extends e envio para o banco

    DeepSeek, a ferramenta de IA, vai tirar suas dúvidas e é gratuita ainda: https://chat.deepseek.com/
  8. Williams Duarte

    PHP+Codeginiter - Orientação para Impressão

    DeepSeek, a ferramenta de IA, vai tirar suas dúvidas e é gratuita ainda: https://chat.deepseek.com/
  9. violin101

    PHP+Codeginiter - Orientação para Impressão

    Caros amigos, saudações. Por favor, me permita tirar uma dúvida com os amigos. Tenho um Formulário onde o Usuário digita todos os Dados necessários. Minha dúvida: --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ? Grato, Cesar
  10. Carcleo

    Ajuda com Extends e envio para o banco

    Tenho uma abela de usuarios e uma tabela de administradores e clientes. Gostaria de uma ajuda para implementar um cadastro users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc... Queria ajuda para extender de user as classes Admin e Client Olhem como estáAdmin <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User { use HasFactory; protected $fillable = [ 'name', 'email', 'password', 'registration' ]; private string $registration; public function create( string $name, string $email, string $password, string $registration ) { //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]); parent::$name = $name; parent::$email = $email; parent::$password = $password; $this->registration = $registration; } } User <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable { /** @use HasFactory<\Database\Factories\UserFactory> */ use HasFactory, Notifiable; static string $name; static string $email; static string $password; /** * The attributes that are mass assignable. * * @var list<string> */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for serialization. * * @var list<string> */ protected $hidden = [ 'remember_token', ]; /** * Get the attributes that should be cast. * * @return array<string, string> */ protected function casts(): array { return [ 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; } public function roles() : BelongsToMany { return $this->belongsToMany(Role::class); } public function hasHole(Array $roleName): bool { foreach ($this->roles as $role) { if ($role->name === $roleName) { return true; } } return false; } public function hasHoles(Array $rolesName): bool { foreach ($this->roles as $role) { foreach ($rolesName as $rolee) { if ($role->name === $rolee) { return true; } } } return false; } public function hasAbility(string $ability): bool { foreach ($this->roles as $role) { if ($role->abilities->contains('name', $ability)) { return true; } } return false; } } Como gravar um Admin na tabela admins sendo que ele é um User por extensão? Tentei assim mas é claro que está errado... public function store(Request $request, Admin $adminModel) { $dados = $request->validate([ "name" => "required", "email" => "required|email", "password" => "required", "registration" => "required" ]); $dados["password"] = Hash::make($dados["password"]); $admin = Admin::where("registration", $dados["registration"])->first(); if ($admin) return redirect()->route("admin.new") ->withErrors([ 'fail' => 'Administrador já cadastrados<br>, favor verificar!' ]); $newAdmin = $adminModel->create( $dados['name'], $dados['email'], $dados['password'], $dados['registration'] ); dd($newAdmin); $adminModel->save(); //$adminModel::create($admin); return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso'); }
  11. ILR master

    Fixar div até atingir uma certa altura

    Fala pessoal, tudo bem? Eu tenho o seguinte código: <script> $(function(){ var jElement = $('.fixar_banner'); $(window).scroll(function(){ if ( $(this).scrollTop() > 120 ){ jElement.css({ 'position':'fixed', 'top':'10px' }); }else{ jElement.css({ 'position':'relative', 'top':'auto' }); } }); }); </script> Porém, eu quero que a div fique fixa até que outro elemento apareça na tela, tipo o rodapé da página por exemplo. É mais ou menos como a página de notícia do uol. https://noticias.uol.com.br/internacional/ultimas-noticias/2025/01/19/sonho-americano-brasileiros-moram-em-carro-e-buscam-comida-no-lixo-nos-eua.htm Espero ter sido claro. Obrigado :)
  12. Williams Duarte

    PHP+Codeigniter - Dúvida referente a PDV

    Na prática, existem duas abordagens principais, cada uma com seus prós e contras: Baixa após finalização da venda (Recomendado): O estoque só é atualizado quando a venda é efetivamente concluída (pagamento confirmado) Vantagens: Evita inconsistências caso a venda seja cancelada Maior segurança nas operações Histórico mais preciso de transações Desvantagens: Necessidade de verificar disponibilidade real-time durante a venda Baixa durante a inclusão dos itens: O estoque é atualizado conforme os produtos são adicionados ao carrinho Vantagens: Reserva imediata do produto Previne vendas simultâneas do mesmo item Desvantagens: Necessidade de "desfazer" as baixas em caso de cancelamento Maior complexidade no controle de transações Risco de inconsistências em caso de falhas Recomendação: Implementar a baixa após a finalização da venda, mas com um sistema de "reserva temporária" durante o processo de venda. Isso pode ser feito: // No Controller do PDV public function adicionarItem() { // Verifica disponibilidade real-time $disponivel = $this->estoque_model->verificarDisponibilidade($produto_id, $quantidade); if ($disponivel) { // Adiciona à reserva temporária $this->reserva_model->reservarProduto($produto_id, $quantidade, $venda_id); // Adiciona ao carrinho $this->venda_model->adicionarItem($produto_id, $quantidade, $venda_id); } } public function finalizarVenda($venda_id) { // Confirma o pagamento if ($this->pagamento_model->processar($venda_id)) { // Efetua a baixa real no estoque $this->estoque_model->baixarProdutos($venda_id); // Remove as reservas $this->reserva_model->limparReservas($venda_id); return true; } return false; } Esta abordagem oferece: Segurança nas operações Controle preciso do estoque Possibilidade de cancelamento sem inconsistências Prevenção de vendas duplicadas O importante é garantir que o sistema tenha tratamento adequado para: Timeout de reservas não finalizadas Cancelamentos Falhas durante o processo Concorrência de vendas
  13. violin101

    PHP+Codeigniter - Dúvida referente a PDV

    Caros amigos, saudações. Gostaria de tirar uma dúvida com os amigos, referente a PDV. Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto. Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza: a baixa direto dos produtos no estoque ou somente após concretizar a venda o sistema baixa os produtos do estoque ? Grato, Cesar
  14. violin101

    PHP+Codeigniter - Dúvida em Relação a Teclas

    Amigo Williams, saudações. Obrigado por sua dica, fiz desta forma e deu certo. document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key.toLowerCase() !== 'r' ) return; evt.preventDefault(); }); Grato, Cesar
  15. Williams Duarte

    PHP+Codeigniter - Dúvida em Relação a Teclas

    Normalize a tecla para minúscula const key = evt.key.toLowerCase();
  16. violin101

    PHP+Codeigniter - Dúvida em Relação a Teclas

    Caros amigos do grupo, saudações e um feliz 2025. Estou com uma pequena dúvida referente a Teclas de Atalho. Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona. ou seja: se estiver para letra minúscula ====> funciona se estiver para letra maiúscula ====> não funciona Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ? o Código está assim: document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); }); Grato, Cesar
  17. Felipe Guedes Coutinho

    Conexão mysql com outro domínio

    Olá, amigo seu erro está na escrita do comando: Maiúsculas no uso de mysqli: A função está escrita como mysqlI_connect e mysqlI_set_charset. O correto é usar todas as letras minúsculas (mysqli_connect, mysqli_set_charset), pois o PHP é sensível a maiúsculas em nomes de funções. Recomendo você a usar o código abaixo: <?php $host = 'servidor_b'; $user = 'user'; $pass = '********'; $db = 'banco'; // Conexão e seleção do banco de dados $conexao = mysqli_connect($host, $user, $pass, $db); // Verifica se a conexão foi bem-sucedida if (!$conexao) { die("Falha na conexão: " . mysqli_connect_error()); } // Configura o charset mysqli_set_charset($conexao, "utf8"); echo "Conexão estabelecida com sucesso!"; // Fecha a conexão (se necessário) // mysqli_close($conexao); ?>
  18. washalbano

    Conexão mysql com outro domínio

    Olá! Tente assim: <?php // defina as variáveis de conexão $config = [ 'db_host' => 'your-remote-host', 'db_user' => 'your-db-user', 'db_pass' => 'secret-password', 'db_name' => 'imasters', ]; // tenta estabelecer conexão: try { $sqli = new mysqli($config['db_host'], $config['db_user'], $config['db_pass']); // define o padrão de caracteres $sqli->set_charset('utf8'); // selecionar/abrir o banco de dados para trabalhar $sqli->select_db($config['db_name']); } catch (Exception $e) { // se não conseguir estabelecer conexão, exibe erro exit('<p><b>Falha na conexão</b>: ' . $e->getMessage() . '</p>'); } E veja se aparece algum erro específico.
  19. ILR master

    Conexão mysql com outro domínio

    Fala galera, tudo certo? Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro. Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro. Segue código: $host = 'servidor B'; $user = 'user'; $pass = '********'; $db = 'banco'; // conexão e seleção do banco de dados $conexao = mysqlI_connect($host, $user, $pass, $db); mysqlI_set_charset($conexao,"utf8"); //print "Conexão rodando e OK!"; //mysqlI_close($conexao); Alguém pode me ajudar?
  20. violin101

    [Resolvido] JavaScript - Exibir logo dentro da Tabela html

    Caro amigo, Williams. Obrigado, tu és 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10... 10...
  21. Williams Duarte

    [Resolvido] JavaScript - Exibir logo dentro da Tabela html

    Para exibir um logo quando a tabela estiver vazia, você pode: 1 - Adicionar uma div com o logo abaixo da tabela: <table id="tbventas"> <tbody></tbody> </table> <div id="empty-table-logo" style="text-align:center;"> <img src="caminho/logo.png" alt="Logo empresa"> </div> 2 - Controlar a visibilidade via JavaScript: // Função para verificar se tabela está vazia function checkTableEmpty() { const tbody = document.querySelector("#tbventas tbody"); const logo = document.getElementById("empty-table-logo"); if (tbody.children.length === 0) { logo.style.display = "block"; } else { logo.style.display = "none"; } } // Chamar após remover ou adicionar itens $("#tbventas tbody").append(html); checkTableEmpty(); // Na remoção de item $('.btn-remove-produto').click(function() { $(this).closest('tr').remove(); checkTableEmpty(); }); Chame checkTableEmpty() sempre que manipular a tabela para atualizar a visibilidade do logo.
  22. violin101

    Javascript - Calcular Valores Monetário em Tempo Real

    Caros amigos, saudações. Depois de revisar e revisar, consegui resolver o problema de Cálculo em Tempo Real. o fonte ficou assim: jQuery('input').on('keyup',function(){ //já está no Formato(0.00) var resto = document.getElementById("pgRest").value; //já está no Formato(0.00) var desct = document.getElementById("pgDsct").value; resto = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); desct = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real com 2 casas decimais jQuery('#pgTroco').val((resto + desct).toFixed(2).replace('.', ',')); }) Grato, Cesar
  23. Caros amigos, saudações. Estou com uma dúvida, referente cálculo de valores em tempo real. Tenho uma rotina, que faz o cálculo, o problema é mostrar o resultado. Quero mostrar o RESULTADO assim: 0,00 ou 0.00 Abaixo posto o código. jQuery('input').on('keyup',function(){ //Remover ponto e trocar a virgula por ponto var m = document.getElementById("pgRest").value; while (m.indexOf(".") >= 0) { m = m.replace(".", ""); } m = m.replace(",","."); //Remover ponto e trocar a virgula por ponto var j = document.getElementById("pgDsct").value; while (j.indexOf(".") >= 0) { j = j.replace(".", ""); } j = j.replace(",","."); m = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); j = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real jQuery('#pgTroco').val(m - j); <<=== aqui estou errando }) Grato, Cesar
  24. Caro amigos, saudações. Tenho uma tabela escrita em JS que funciona corretamente. Minha dúvida: - como devo fazer para quando a Tabela HTML estiver vazia, exibir o LOGO da Empresa ? Abaixo posto o script: document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'i' ) return;// Não é Ctrl+A, portanto interrompemos o script evt.preventDefault(); //Chama a Função Calcular Qtde X Valor Venda calcvda(); var idProdutos = document.getElementById("idProdutos").value; var descricao = document.getElementById("descricao").value; var prd_unid = document.getElementById("prd_unid").value; var estoque_atual = document.getElementById("estoque_atual").value; var qtde = document.getElementById("qtde").value; var vlrunit = document.getElementById("vlrunit").value; var vlrtotals = document.getElementById("vlrtotal").value; var vlrtotal = vlrtotals.toLocaleString('pt-br', {minimumFractionDigits: 2}); if(validarConsumo(estoque_atual)){ //Chama a Modal com Alerta. $("#modal_qtdemaior").modal(); } else { if(qtde == "" || vlrunit == "" || vlrtotal == ""){ //Chama a Modal com Alerta. $("#modal_quantidade").modal(); } else { //Monta a Tabela com os Itens html = "<tr style='font-size:13px;'>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='id_prds[]' value='"+idProdutos+"'>"+idProdutos+"</td>"; html += "<td width='47%' height='10'>"+ "<input type='hidden' name='descricao[]' value='"+descricao+"'>"+descricao+ "<input type='hidden' name='esp[]' value='"+prd_unid+"'> - ESP:"+prd_unid+ "<input type='hidden' name='estoq[]' value='"+estoque_atual+"'></td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='qtde[]' value='"+qtde+"'>"+qtde+"</td>"; html += "<td width='12%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrunit[]' value='"+vlrunit+"'>"+vlrunit+"</td>"; html += "<td width='14%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrtotal[]' value='"+vlrtotal+"'>"+vlrtotal+"</td>"; html += "<td width='12%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-uvas btn-remove-produto' style='margin-right:1%; padding:1px 3px; font-size:12px;' title='Remover Item da Lista'>"+ "<span class='fa fa-minus' style='font-size:12px;'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); $("#idProdutos").val(null); $("#descricao").val(null); $("#prd_unid").val(null); $("#qtde").val(null); $("#vlrunit").val(null); $("#vlrtotal").val(null); $("#idProdutos").focus(); //Se INCLUIR NOVO produto - Limpa a Forma de Pagamento $("#pgSoma").val(null); $("#pgRest").val(null); $("#pgDsct").val(null); $("#pgTroco").val(null); $("#tbpagar tbody").empty(); }//Fim do IF-qtde }//Fim do Validar Consumo });//Fim da Função btn-agregar Grato, Cesar
  25. violin101

    PHP+Codeigniter - Implementar o Input CÓDIGO ou ID do Produto

    amigo Williams, saudações. Deus o abençoa, realmente faltou declarar no início do JS. let timeoutId; // Declaração da variável Fiz a Declaração e funcionou corretamente. Muito Obrigado. Deus o abençoa. Atenciosamente, Cesar
  26. Williams Duarte

    PHP+Codeigniter - Implementar o Input CÓDIGO ou ID do Produto

    Primeiro, você não está declarando a variável timeoutId <script type="text/javascript"> $(document).ready(function(){ let timeoutId; // Declaração da variável $('#idProdutos').on('input', function() { clearTimeout(timeoutId); const idprd = $(this).val(); timeoutId = setTimeout(function() { if (idprd) { $.ajax({ url: "<?php echo base_url(); ?>vendas/pdvcaixa/buscarID", type: "POST", data: { idProdutos: idprd }, // Corrigido nome do parâmetro dataType: 'json', // Importante adicionar success: function(response) { if (response.success) { // Como o resultado é um array, pegamos o primeiro item if (response.produto.length > 0) { $("#descricao").val(response.produto[0].descricao); } } }, error: function(xhr, status, error) { console.log('Erro:', error); } }); } }, 1500); }); }); </script> No Controller, ajuste para: public function buscarID() { $idprd = $this->input->post('idProdutos'); $produto = $this->pdvcaixa_model->buscarCodigo($idprd); if ($produto) { echo json_encode([ 'success' => true, 'produto' => $produto ]); } else { echo json_encode([ 'success' => false, 'message' => 'Produto não encontrado' ]); } } Se ainda assim não funcionar, você pode adicionar alguns console.log para debug: $('#idProdutos').on('input', function() { console.log('Input detectado'); clearTimeout(timeoutId); const idprd = $(this).val(); console.log('Valor digitado:', idprd); timeoutId = setTimeout(function() { console.log('Timeout executado'); if (idprd) { // ... resto do código
  27. violin101

    PHP+Codeigniter - Implementar o Input CÓDIGO ou ID do Produto

    Amigo Williams, saudações. Conforme sua orientação acima, fiz a adequação no meu sistema, mas infelizmente não tive sucesso. Após digitar o Código no INPUT não fez a contagem de tempo e não mostrou a descrição. O meu INPUT está assim: <form action="<?php echo current_url(); ?>" id="frmPdv" method="post"> <div class="row"> <div class="col-md-3"> <label for="idProdutos">Código:</label> <input type="text" class="form-control" id="idProdutos" name="idProdutos" style="margin-top:-7px; font-size:15px; width:100%; font-weight:normal; background:#FFFFFF;" placeholder="Apenas Número"> </div> <div class="col-md-9"> <label for="descricao">Produto:</label> <input type="text" class="form-control" id="descricao" name="descricao" style="margin-top:-7px; font-size:15px; width:100%; font-weight:normal; background:#FFFFFF;" placeholder="Pesquisar por descrição do produto" > </div> </div> </form> O meu JS está assim: <script type="text/javascript"> $(document).ready(function(){ $('#idProdutos').on('input', function() { clearTimeout(timeoutId); const idprd = $(this).val(); timeoutId = setTimeout(function() { if (idprd ) { $.ajax({ url: "<?php echo base_url(); ?>vendas/pdvcaixa/buscarID/", type: "POST", data: { idprd : idprd }, success: function(response) { // Exibe o resultado if (response.success) { //Exibe no INPUT da Descrição $("#descricao").val(response.produto.descricao); } } }); } }, 1500); // 1.5 segundos de delay }); }); </script> O meu Controller está assim: public function buscarID() { $idprd = $this->input->post('idProdutos'); $produto = $this->pdvcaixa_model->buscarCodigo($idprd); echo json_encode([ 'success' => true, 'produto' => $produto ]); } O meu MODEL está assim: public function buscarCodigo($idprd) { $this->db->select('*'); $this->db->from('produtos'); $this->db->where('produtos.idProdutos', $idprd); $this->db->where('produtos.statusProd', 1); $this->db->order_by('produtos.descricao', 'ASC'); return $this->db->get()->result(); } Grato Cesar
  1. Mais Resultados
×

Informação importante

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