Jump to content

Nerdmonkey

Members
  • Content count

    166
  • Joined

  • Last visited

Community Reputation

3 Comum

1 Follower

About Nerdmonkey

  • Rank
    Desenvolvedor web e mobile
  • Birthday 07/07/1988

Informações Pessoais

  • Sexo
    Masculino
  • Localização
    Es / Serra
  • Interesses
    Desenvolvimento web, PHP, javascript, OO

Contato

Recent Profile Visitors

701 profile views
  1. Estou trabalhando nisso. A lógica aqui é verificar quando a caixa exceder altura, largura ou comprimento. Normalmente, vai exceder em altura, porque os produtos são pequenos, ai na organização, consigo ir colocado os maiores por baixo e ir ajustando os demais no espaço remanescente. É nessa questão mesmo que estou testando uma possível solução. Mas o conceito você pegou bem. É gerar a caixa, quando bater no limite, eu fecho a caixa e começo uma nova. Estou testando algumas formas de aplicar isso na classe. O trabalhoso está sendo armazenas os itens que cabem na caixa. Guardá-los e fechar a caixa. Pegar somente o que passa e ir colocando em novas caixas conforme a quantidade.
  2. Boa tarde pessoal. Se eu postei na área errada, por favor, podem mover para o tópico correto Em termos de entrega de projeto, entendo que, prazos devem ser cumpridos. Gostaria de sabe a opinião de vocês com relação á entregar o projeto com um código inferior para não perder o prazo, ou, conversar com o cliente que será necessário mais tempo para entrega e entregar um código com mais qualidade? Levando-se em consideração que o cliente não liga pra como está sendo feito, e sim que está funcionando. E também o fato de que foi estipulado um prazo, porém foi necessário aumentá-lo para encontrar uma melhor solução para o problema sem perda de qualidade do código.
  3. A justificativa do meu argumento de não ser tão simples de resolver esse problema https://pt.wikipedia.org/wiki/Problema_da_mochila. Fora o fato de que ninguém, pelo menos que eu conheça, como programador, tenha feito parecido ou consiga palpitar sobre um caminha por onde seguir. Mas já imaginava que não seria fácil antes mesmo de começar. Dinamismo, de certa forma, na minha opinião, torna o código reutilizável, e de certa forma, aumenta sua complexabilidade de desenvolvimento, para soluções bem elaboradas. A sua ideia é boa, estou realmente trabalhando em cima disso atualmente. A lógica é verificar quando uma caixa atingiu seu limite > fechar esta caixa, tendo seus parâmetros para medir a cubagem definidos(A * C * L) > abrir uma nova caixa e começar a alocar os itens que não foram alocados na caixa anterior, pois excederiam os limites especificados pelos Correios. Isso me daria margem para definir o valor do frete com base na cubagem de cada caixa. Posso ter 'n' caixas, cada uma com 'm' volume e peso distintos. Bem complexo, pelo menos pra mim, no momento. Mas acredito que não é impossível.
  4. Está lá em cima. Nas constantes. Solução, até onde pesquisei, nada simples. Mas como não desisto fácil... bora continuar tentando
  5. A quanto tempo não posto aqui. As novidades do fórum estão bem bacanas... já volto com uma bomba rs Estou adaptando um classe para arranjar os produtos do carrinho de um e-comerce em caixas para calcular o frete juntos aos correios. Gostaria de sugestões dos colegas para implementar, sempre que um caixa atingir o limite, gerar uma nova caixa... a parte da comunicação com a API do correios está bem tranquilo. O que tá pegando mesmo é essa parte da organização dos itens em várias caixas. Vou deixar aqui o código completo que estou testando... / config.php <?php define("MIN_LARGURA", 11); define("MAX_LARGURA", 105); define("MIN_ALTURA", 2); define("MAX_ALTURA", 105); define("MIN_COMPRIMENTO", 16); define("MAX_COMPRIMENTO", 105); define("MIN_SOMA_CLA", 29); define("MAX_SOMA_CLA", 200); function dd($data) { echo '<pre>'; var_dump($data); echo '</pre>'; } index.php <?php require_once 'config.php'; require_once 'Boxes.php'; $cart = [ [ 'title' => 'Book - The art of war', 'A' => 25, 'L' => 70, 'C' => 90, ], [ 'title' => 'Book - The art of war', 'A' => 25, 'L' => 70, 'C' => 90, ], [ 'title' => 'Book - The art of war', 'A' => 25, 'L' => 70, 'C' => 90, ], ]; $boxes = new Boxes($cart); dd($boxes->createBoxes()); Boxes.php <?php class Boxes { private $cart = []; private $box = []; private $box_properties = []; /** * __construct * * @param array $cart */ public function __construct($cart = []) { $this->cart = $cart; $this->box_properties = [ 'altura' => 0, 'largura' => 0, 'comprimento' => 0, 'qtd_itens' => 0, 'message' => null, 'volume' => 0, 'volume_itens' => 0, 'volume_vazio' => 0, 'comprimento_remanescente' => 0, 'largura_remanescente' => 0, 'altura_remanescente' => 0 ]; } /** * Order items inside the box * * @return array */ public function orderBox() { foreach ($this->cart as $k => $item): $new_height = min($item['A'], $item['L'], $item['C']); $new_length = max($item['A'], $item['L'], $item['C']); $width = [$item['A'], $item['L'], $item['C']]; sort($width) ; array_shift($width); array_pop($width); $item['L'] = isset($width[0]) ? $width[0] : $new_height; $item['A'] = $new_height ; $item['C'] = $new_length ; $item['LC'] = $item['L'] * $item['C'] ; $this->cart[$k] = $item; endforeach; usort($this->cart, function($a, $b){ return $a['LC'] < $b['LC']; }); return $this->cart ; } /** * Create and put items inside the box * * @return array */ public function createBoxes() { $this->cart = $this->orderBox(); $this->box = json_decode(json_encode($this->box_properties,FALSE)); $this->organizeItems(); $this->box->volume = ($this->box->altura * $this->box->largura * $this->box->comprimento); $this->box->volume_vazio = $this->box->volume - $this->box->volume_itens; $this->minSpecifications(); $this->errors(); return $this->box; } private function organizeItems() { foreach ($this->cart as $item): $this->box->qtd_itens++; $this->box->volume_itens += ($item['A'] * $item['L'] * $item['C']); $this->allocateItems($item); $this->box->altura += $item['A']; if($item['L'] > $this->box->largura): $this->box->largura = $item['L']; endif; if ($item['C'] > $this->box->comprimento): $this->box->comprimento = $item['C']; endif; $this->box->comprimento_remanescente = $this->box->comprimento; $this->box->largura_remanescente = $this->box->largura - $item['L']; $this->box->altura_remanescente = $item['A']; endforeach; } private function allocateItems($item) { if($this->box->comprimento_remanescente >= $item['C'] && $this->box->largura_remanescente >= $item['L']): if($item['A'] > $this->box->altura_remanescente): $this->box->altura += $item['A'] - $this->box->altura_remanescente ; endif; if($item['C'] > $this->box->comprimento): $this->box->comprimento = $item['C']; endif; $this->box->comprimento_remanescente = $this->box->comprimento - $item['C']; $this->box->largura_remanescente = $this->box->largura_remanescente - $item['L'] ; $this->box->altura_remanescente = $item['A'] > $this->box->altura_remanescente ? $item['A'] : $this->box->altura_remanescente ; endif; } private function minSpecifications() { if($this->box->altura > 0 && $this->box->altura < MIN_ALTURA): $this->box->altura = MIN_ALTURA ; endif; if($this->box->largura > 0 && $this->box->largura < MIN_LARGURA): $this->box->largura = MIN_LARGURA ; endif; if($this->box->comprimento > 0 && $this->box->comprimento < MIN_COMPRIMENTO): $this->box->comprimento = MIN_COMPRIMENTO ; endif; } private function errors() { if($this->box->altura > MAX_ALTURA): $this->box->message = "Erro: Altura maior que o permitido."; endif; if($this->box->largura > MAX_LARGURA ): $this->box->message = "Erro: Largura maior que o permitido."; endif; if($this->box->comprimento > MAX_COMPRIMENTO ): $this->box->message = "Erro: Comprimento maior que o permitido."; endif; if(($this->box->comprimento + $this->box->comprimento + $this->box->comprimento) < MIN_SOMA_CLA): $this->box->message = "Erro: Soma dos valores C+L+A menor que o permitido."; endif; if(($this->box->comprimento + $this->box->comprimento + $this->box->comprimento) > MAX_SOMA_CLA): $this->box->message = "Erro: Soma dos valores C+L+A maior que o permitido."; endif; } }
  6. Você poderia criar uma variável no 'else' e atribui um valor. Depois você pega esse valor dessa variável no 'onclick' do jQuery. Se o valor existir e for correspondente, você exibe a mensagem: "Produto indisponível"
  7. Eu utilizo assim: Crio um campo delete(int) 1 Default 0 na tabela. Ao excluir(sem remover do banco), apenas atualizo esse campo para 1. Na busca, basta listar todos onde delete = 0. Ainda atualizo deleted_at(datetime) com o current_timestamp, apenas para registro de quando a linha foi marcada para ser removida. Há inúmeras possibilidades, mas essa é a mais simples, no meu ponto de vista, para remover registros da listagem sem deletá-los da base de dados.
  8. Nerdmonkey

    Get content return null

    Boa noite a todos. Saberia me dizer porque não consigo realizar um file_get_contents no arquivo abaixo: $string = file_get_contents("app/View/template/css/css.php?css=style.css,reset.css,boot.css,materialize.css,uploadify.css,jcarousel.basic.css,responsive.css,https://fonts.googleapis.com/css?family=Lato:400,100,100italic,300,400italic,300italic,700,700italic,900,900italic"); echo $string; Message: <b>Warning</b>: file_get_contents(app/View/template/css/css.php?css=style.css,reset.css,boot.css,materialize.css,uploadify.css,jcarousel.basic.css,responsive.css,https://fonts.googleapis.com/css?family=Lato:400,100,100italic,300,400italic,300italic,700,700italic,900,900italic): failed to open stream: No such file or directory in <b>D:\Server\programacaocriativa\app\View\template\inc\header.phtml</b> on line <b>46</b><br /> Utilizando dentro de um link rel=stylesheet funciona normalmente. O arquivo css.php <?php function conteudo($arquivo) { return @file_get_contents($arquivo); } function otimizaArquivo($arquivo){ $subs_css = array(':0.' => ':.', '-.' => '-0.', ':0px' => ':0', ', #' => ',#', ', .' => ',.', ' > ' => '>', ' < ' => '<', ' 0px' => ' 0', ' 0.' => ' .' ); $arquivo = str_replace(array_keys($subs_css), $subs_css, $arquivo); $arquivo = str_replace(array("\r\n", "\r", "\n", "\t", " ", " ", " "), '', $arquivo); $subs_geral = array('!/\*.*?\*/!s' => '', '{ ' => '{', '{ ' => '{', ' {' => '{', ' }' => '}', '} ' => '}', '; }' => '}', ';}' => '}', '; ' => ';', ' ;' => ';', ' ,' => ',', ', ' => ',', ': ' => ':', ' :' => ':' ); $arquivo = str_replace(array_keys($subs_geral), $subs_geral, $arquivo); return $arquivo; } $estilos = explode(',',$_GET['css']); $saida = ''; foreach($estilos as $estilo): $conteudo = conteudo($estilo); $saida .= otimizaArquivo($conteudo); endforeach; header('Content-Type: text/css'); header('Expires: ' . gmdate( "D, d M Y H:i:s", time() + 31536000 ) . ' GMT'); header("Cache-Control: public, max-age=31536000"); header('Vary: Accept-Encoding'); header('Content-Encoding: gzip'); $saida = gzencode( $saida, 3 ); echo $saida; Penso que o problema possa ser o file_get_contents existente dentro do arquivo css.php, porém, pela lógica, ele faz essa requisição logo no início e devolve a saída já formatada passando os aquivos pelos métodos que realizam essa ação.
  9. Nerdmonkey

    Upload de imagem com AJAX/PHP

    Sim. É exatamente isso que quero fazer.
  10. Nerdmonkey

    Upload de imagem com AJAX/PHP

    Boa tarde. O problema em específico é no PHP, no Javascript está tudo indo bem então abri o tópico por aqui. O problema: Enviar as propriedades de um arquivo para o PHP com AJAX e conseguir ler o array contendo os seus respectivos valores. O que eu fiz com Query: $('.submit').on('click', function(e){ var id_form = $(this).parents('.frms').attr('id'), // Create a new object FormData for this form, like a serialize() formData = new FormData($("#" + id_form)[0]); // Add a new index no_inc formData.append('no_inc', 1); // Add a new index image if($('input[type=file]')[0].files[0] != null){ formData.append('image', $('input[type=file]')[0].files[0]); } $.ajax({ url: './ajax/submit.php', data: formData, processData: false, contentType: false, type: 'post', dataType: 'json', ... O que eu fiz com PHP: if(isset($action) && ($action == 'modules')): var_dump(filter_input_array(INPUT_POST, FILTER_DEFAULT)); .... A resposta do servidor: array(5) { ["action"]=> string(7) "modules" ["name"]=> string(0) "" ["url"]=> string(0) "" ["status"]=> string(1) "2" ["no_inc"]=> string(1) "1" } Como podem ver o parâmetro image não está sendo enviado. Isso há muito tempo é um paradigma pra mim, e eu confesso que é por falta de conhecimento, para um tempo pra estudar o que realmente acontece. Ai fui pesquisar e descobri o FormData, uma opção pra tratar arrays de forma que eu possa modificar, remover ou acrescentar índices à ele. Muito bom. Agora na hora de receber essas informações penso estar deixando passar alguma coisa. A primeira e principal dela é o fato do parâmetro não chegar até meu arquivo PHP. Logo não tenho um valor válido pra trabalhar. As pesquisas não param e vocês, o que acham? Estou deixando passar mais alguma coisa ou existe alguma manobra necessária para trabalhar com upload de imagens dessa forma? Aonde estou querendo chegar? Aqui! $_FILES['image']['tmp_name'] Mas vamos por parte, porque primeiro preciso conseguir acessar o valor do índice image do meu ajax. Seguindo... descobri mais algumas coisas rs O problema é mesmo com o valor do parâmetro recuperado para a imagem. Caso eu coloque qualquer outro valor o índice é passado normalmente. array(6) { ["action"]=> string(7) "modules" ["name"]=> string(0) "" ["url"]=> string(0) "" ["status"]=> string(1) "2" ["no_inc"]=> string(1) "1" ["image"]=> string(4) "test" } Outra coisa que percebi pelo debug é que alguns parâmetro são perdidos nessa forma, o que me faz pensar se realmente é possível fazer isso de forma direta sem o uso de plugins já prontos. Por exemplo o diretório temporário do arquivo, não é passado. lastModified: 1449956707826 lastModifiedDate: Sat Dec 12 2015 19:45:07 GMT-0200 (Horário brasileiro de verão) {} name: "12348021_1673134709597287_1819571186132594684_n.jpg" size: 50136 type: "image/jpeg" webkitRelativePath: "" slice: slice()
  11. Nerdmonkey

    Sugestões

    Boa tarde, Sugestões de como criar esse esquema de exibição de dados com PHP http://www.tudocelular.com/compare/2700-2978.html ? Estou imaginando aqui um monte de possibilidades. Sugestões por favor. Nada feito nem código escrito beleza galera, só comentar mesmo com ideias de como criar um sistema dessa maneira. Eu pensei em tabelas onde os campos são inseridos conforme necessidade. Por exemplo: o administrativo permite que você cadastre em table_info_product novas colunas quando não existirem. Assim dá pra imaginar a comparação mais claramente entre dois produtos quando um possui uma característica e o outro não possui. O que vocês acham?
  12. Nerdmonkey

    Enviar parâmetro via ajax e não retornar nada

    Encontrei o erro depois de verificar a extensão dos arquivos. Na primeira tentativa não estava interpretando por causa da extensão .phtml. Resolvi enviando o id para um arquivo .php e montando direto nele toda estrutura do formulário com os dados. Ai depois ficou fácil pegar essas informações e apenas escrevê-las dentro da minha página .phtml. =D
  13. Nerdmonkey

    Enviar parâmetro via ajax e não retornar nada

    Opa adorei a ida e volta =D O problema é que ao chegar lá ele não interpreta o código php, ao invés disso ele retorna todas as linhas de código da página. O que eu preciso resgatar é o id apenas. Fiz o teste enviando para uma outra página que contém apenas a variável que resgata esse id, até ai tranquilo. Mas na hora de devolver para essa página, em especial, é que me deparo com o problema. Nessa página que encontro o problema, no início do documento eu recupero o id $id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT); Mas abaixo existe o código html, que também é retornado. Só preciso enviar o id via post para essa página e ela deveria apenas recebê-lo. O ajax deveria fazer isso, enviar a requisição para o documento e retornar o callback somente quando eu quisesse exibí-lo ou pedisse pra que isso aconteça, não?
  14. Boa noite. Como eu faria pra enviar um parâmetro para uma página de forma que ela na aba response do firebug, não me retorne toda a página html? Olha meu código. Ignorem a bagunça, o foco é na requisição ajax ou post, tanto faz $('.actions').on('click', 'a', function(e){ e.preventDefault(); var destination = ($(this).attr('href')); window.history.replaceState([], '', destination); $('.asides p').removeClass('opening'); $('.asides ul').slideUp(); var explode = destination.split('?'), explode0 = explode[1].split('='), explode1 = explode0[1].split('&'), explode2 = explode1[0].split('&'); $('.overlay').fadeIn('slow'); // Open overlay [insert-new] if(explode1[0] == 'insert-new'){ $('._show_box_registry').show(); $('._show_box_edit').hide(); }else if(explode0[0] == 'id'){ $('._show_box_registry').hide(); $('._show_box_edit').show(); $.ajax({ url:'app/View/template/files/adm-edit-' + explode0[2] + '.phtml', type:'post', dataType:'html', data:{id:explode2}, success:function(result){ } }); } }); Na aba post mostra corretamente o id, já na aba response exibe todo o código da página php exatamente como está escrito, sem interpretá-lo. Alguma sugestão?
  15. Nerdmonkey

    date_format

    Feliz Ano Novo =) Vamos começar o ano programando ... O que há de errado com essa sintaxe? $query_date = "(DATE_FORMAT(date, %Y-%m-%d) BETWEEN :value1 AND :value2)"; Formato da data na base de dados: 2015-09-17 21:15:59
×

Important Information

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