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

1094 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

    __autoload()

    Resolvi utilizando o autload do composer.
  12. Nerdmonkey

    Criando sistema com MVC

    Resolvi utilizando o autload do composer.
  13. Nerdmonkey

    __autoload()

    O que pode estar errado, não consigo de jeito nenhum achar o erro nesse código, que coisa! Index.php <?php require_once 'Autoload.php'; $classFake = new Fake(); var_dump($classFake); Autoload.php <?php class Autoload { public function __autoload($class) { try { require_once __DIR__ . ucfirst($class) . '.php'; } catch(Exception $e) { var_dump($e->getMessage()); } } } Fake.php <?php class Fake { public function __construct() { echo 'Say hello'; } } Erro Fatal error: Class 'Fake' not found in
  14. Nerdmonkey

    __autoload()

    Quanto mais mecho, mais novos problemas aparecem kkk... Isso é bom porque estou aprendendo a lidar com eles Essa é minha index, é o ponto de partida, é de onde tudo irá começar e o que definirá todas as funções da minha aplicação. Até aqui, o que ela deveria fazer é simples: - Iniciar a sessão e os erros do PHP; - Setar os header, cache, data zone e fluxo do documento; - Instanciar o autoload; - Instanciar o Init que é o coração da aplicação; - Prover a página solicita pela URL; <?php session_start(); ini_set('display_errors',1); ini_set('display_startup_erros',1); error_reporting(E_ALL); header("Cache-Control: must-revalidate"); header( "Expires: " . gmdate("D, d M Y H:i:s", time() + 60 * 60 * 24 * 3) . " GMT" ); header( 'Content-Type: text/html; charset=utf-8' ); setlocale( LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'pt_BR.utf-8', 'portuguese' ); date_default_timezone_set( 'America/Sao_Paulo' ); ob_start(); $no_inc=filter_input(INPUT_GET,'no_inc',FILTER_DEFAULT); $sep=explode('/',filter_input(INPUT_GET,'url',FILTER_DEFAULT)); $getSearch=filter_input(INPUT_GET,'p',FILTER_DEFAULT); require_once './_app/Autoload.php'; require_once './_app/Init.php'; require_once './_app/controller/system/IncludePage.php'; require_once './_app/controller/databaseChange/Conn.php'; require_once './_app/controller/databaseChange/Read.php'; $configDatabase = [ 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'myhost', 'server' => filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_DEFAULT) ]; $configEmail = [ 'hostmail' => 'mail.mail.com.br', 'usermail' => 'contato@mail.com.br', 'passmail' => '123456', 'from' => 'contato@mail.com.br', 'fromname' => 'Mail | Mail' ]; $autoload = new Autoload; $init = new \_app\Init($configDatabase,$configEmail); $page = new IncludePage($sep[0],$no_inc); $page->includeFile(); Esse é o meu header.php que, tem sua marcação HTML5 default e entre elas possui a marcação <meta property="og:url" content="<?= $init->getUrl(); ?>"> Onde nesse escopo, eu não consigo recuperar o valor do objeto $init, que já foi instanciado em index.php no código acima. Como vocês verão nesse trecho... require_once './_app/controller/databaseChange/Conn.php'; require_once './_app/controller/databaseChange/Read.php'; continuo incluindo manualmente as classes porque ainda estou trabalhando nesse autoload abençoado. Acredito que está tudo entrelaçado. Vou continuar tentando, se alguém vir algo que eu não tenha relatado, por favor, poste ai =)
  15. Nerdmonkey

    __autoload()

    Olha isso, parece até coisa dos Illuminati's require_once './_app/Autoload.php';$autoload = new Autoload;var_dump($autoload);require_once __DIR__ . '/_app/Init.php'; $init = new Init($configDatabase,$configEmail); _app\controllers\system\SetConfigs.php<?phpnamespace _app\controller\system;abstract class SetConfigs{ _app\controller<?phpnamespace _app;class Init extends \_app\controller\system\SetConfigs{ <?phpclass Autoload{private $directory;public function __construct(){echo 'Say hello';}public function __autoload($class){echo ' world';$this->directory = ['controller/databaseChange','controller/login','controller/mailing','controller/f_system'];try{foreach($this->directory as $theDir):require_once __DIR__ . "/{$theDir}/" . ucfirst($class) . '.php';endforeach;}catch(Exception $e){var_dump($e->getMessage());}}} Say helloFatal error: Class '_app\controller\system\SetConfigs' not found in D:\Server\public_html\A - developer\_app\Init.php on line 5 Acho que os Rockefeller estão manipulando meus códigos :v Blz conseguir corrigir um problema. require_once './_app/Autoload.php';require_once './_app/Init.php'; $autoload = new Autoload;$init = new \_app\Init($configDatabase,$configEmail); Isso resolveu o problema para encontrar a classe Init. Agora onde estou sempre batendo, é nesse bendito autoload
×

Important Information

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