Ir para conteúdo

Omar~

Members
  • Total de itens

    1327
  • Registro em

  • Última visita

  • Dias vencidos

    15

Tudo que Omar~ postou

  1. Omar~

    Indentificar função anônima

    Não é um problema com função anônima e sim como manipular alguma por outra função... Enfim, consegui produzir uma solução concreta, daí me esbarrei em que fazer algo a respeito não trás benefício algum. Além do mais funções anônimas devem ser evitadas, por consumirem muito mais processamento. Mas a aplicação que estou desenvolvendo tem suporte para tais funções, mas não terá suporte a uma manipulação direta a elas.
  2. Omar~

    Indentificar função anônima

    Boas?! Então, venho aqui a pedir ideias sobre como identificar uma função anônima atribuída quando uma segunda função a declara. Basicamente tenho 2 funções: uma é chamada para adicionar o tipo de ação e qual função executar com o evento acionado. outra obtem o tipo e a função para remover o evento no elemento. on: function () { var $type = arguments[0], $listener = arguments[1]; if (!$_.isDefined(this[0].eventListener)) { this[0].eventListener = []; } this[0].eventListener.push({ type: $type, listener: $listener }); this[0].addEventListener($type, $listener, false); }, off: function () { var $type = arguments[0], $listener = arguments[1], $i = 0, $eventData = null; if ($_.isDefined(this[0].eventListener)) { for (; $i < this[0].eventListener.length; $i++) { $eventData = this[0].eventListener[$i]; if ($type == $eventData.type && $listener == $eventData.listener) { this[0].removeEventListener($eventData.type, $eventData.listener, false); } else if ($type == $eventData.type) { this[0].removeEventListener($eventData.type, $eventData.listener, false); } } } } Perceba que para registrar e mais tarde saber qual função foi atribuída ao evento para remover eu armazenei os valores em um array. E para remover apenas identifico se o argumento bate com os dados em algum índice do array. Até então tudo bem..... function adicionar() { elemento.on('click', minhaFuncao); } function remover() { elemento.off('click', minhaFuncao); } O probema está em funções anônimas quando declaradas dentro de outra função como isso: function adicionar() { elemento.on('click', function () { // o que fazer.... }); } Então até dar para identificar qual função a declarou, porém não dar para remover com removeEventListener pois essa função não é a ouvinte do elemento. Obs.: Até poderia apagar a função ou "desaturbir sobre o alvo", no entanto não é viável pois pode haver que mais tarde ou outras condições dependam da função. Até cheguei a solucionar "como quebra-galho": Ao invés de atribuir a função recebida pelo argumento em "on" eu atribuo uma outra função pré definida, e essa função checa do array, se houver um índice onde o objeto é o mesmo tipo de evento e a função requisitada também existe no array, essa pré definida executa a função original. Porém não é uma função real, e mais tarde se a pessoa quiser disparar a função digamos um click não pode a chamar seus atributos diretamente (porque seus atrinbutos não são dela e sim da pré definda), terá que chamar a função pré definida, pois é ela realmente a ouvinte. Tornando alvo inviável para quem tem baixo ou menos intimidade com o javascript Por fim até onde eu sei no javascript não há como manipular funções anônimas, por isso o que eu estou tentando fazer é inventar uma solução para algo que não existe. Nota: Nesse caso funciona pois não há uma outra função intermediária, mesmo que seja algo sem sentido de de fazer exemplo.on('click', function (e) { // o que fazer.... }); exemplo.off('click', function (e) { // o que fazer.... });
  3. Omar~

    buscar através de um form

    Me parece que algo nesse sentido, porém não dar para entender com uma pergunta tão incoerente <form method="post" action="" id="formulario"> <input type="text" name="nome" /> <select name="seletor"> <option value="">Selecione algo</option> <option value="opcao-1">Opção 1</option> <option value="opcao-2">Opção 2</option> <option value="opcao-3">Opção 3</option> </select> <button type="submit">Enviar</button> </form> <div id="resultado"> <p>Aqui vem o valor inserido no input[name="nome"] </p> <div data-nome=""></div> <p>Aqui vem o valor inserido no select[name="seletor"] </p> <div data-seletor=""></div> </div> <script> var formulario = document.getElementById('formulario'), resultado = document.getElementById('resultado'), form = null, mostra = null; formulario.addEventListener('submit', function (e) { e.preventDefault(); form = e.target; mostra = null; for (var i = 0; i < form.elements.length; i++) { if (form.elements[i].value) { mostra = resultado.querySelector('[data-' + form.elements[i].name + ']'); mostra.innerText = form.elements[i].value; } } return false; }, false); </script>
  4. Omar~

    banner

    Também tem isso: https://github.com/Spell-Master/sm-web/tree/master/javascript/SlideCarousel
  5. Omar~

    banner aleatório

    Nem precisa a tanto... <img src="banner-<?= rand(1, 3) ?>.jpg" alt="" /> Daí então é nessesário que exista os arquivos: banner-1.jpg banner-2.jpg banner-3.jpg
  6. Omar~

    Comparação de valores

    Aí não teria como.... teria sim.... No caso se não fosse buscar pelo operador LIKE teria que criar toda um lógica você mesmo onde cada caractere forma um busca real (criar um algorítimo para a situação). Acho desnessesário mediante ao aogoritimo nessessário a se criar buscasse algo viável no banco, o que daria no mesmo que usar o operador LIKE... então substuíndo ele pelo WHERE Na questão se o vamos da busca se for comp e o operador for o LIKE mesmo que seja computador o resultado da busca será indiferentimente. Ou seja mesmo criando uma lógica total o resultado é o mesmo usando o operador LIKE, tornando qualquer manobra para contornar totalmente desnecessário
  7. Omar~

    Agendamento Serviços

    O negócio é se acalmar e pensar nas possibilidades. Já que não se vai utilizar de meses/anos para que a preocupação com isso? Vamos a um exêcicio que criei aqui, é uma das centenas de possibilidades de como proceder com a solução do seu problema: Mostrar qual dia da semana é hoje e uma frase para cada dia, mas que alguns dias se repita a mesma frase. Isso deve acontecer independente do mês ou ano em que o código será executado. <?php date_default_timezone_set('America/Sao_Paulo'); function traduzirDia($diaAtual) { $dias = [ 'Sun' => 'Domingo', 'Mon' => 'Segunda', 'Tue' => 'Terça', 'Wed' => 'Quarta', 'Thu' => 'Quinta', 'Fri' => 'Sexta', 'Sat' => 'Sábado', ]; return (array_key_exists($diaAtual, $dias) ? $dias[$diaAtual] : 'Eu sei lá que dia da semana é hoje?!'); } $hoje = date('D'); echo ('Hoje é ' . traduzirDia($hoje)); switch ($hoje) { case 'Mon': case 'Tue': case 'Wed': case 'Thu': echo ("<p>E estamos dentro da semana...; é o jeito tomar uma cerveja porque a coisa está feia</p>"); break; case 'Fri': echo ("<p>Final de semana chegou! EEEBBBBBAAAAAAA!!! Já não aguentava tomar cerveja dentro da semana!</p>"); break; case 'Sun': case 'Sat': echo ("<p>E é final de semana, bora tomar uma cerveja!</p>"); break; }
  8. Omar~

    Agendamento Serviços

    Uai, é só criar uma tabela com colunas que registram serviço prestado dia da semana (pode ser os dias possíveis ou dias em que o serviço não será prestado) Daí no PHP consulta-se a data atual e compara com o valor do resgistro no banco de dados. Se tiver de acordo o serviço está ábil. Algo relativamente simples, mas um código para dar Ctrl+C & Ctrl+V fica complicado de apresentar porque depende da arquitetura do seu projeto projeto aí. É o mesmo conceito básico $hoje = 2; if ($hoje >= 2 && $hoje < 7) { } Der uma lida nesse artigo pois vai presisar para trabalhar com datas no php: https://www.php.net/manual/pt_BR/function.date.php
  9. Bem observado @washalbano Aqui também não está sendo repassado o valor do input. Somente o valor do seletor. Olhando o cenário vejo periodicidade.php recebendo o ID do alvo então um select é feito para obter esse registro, então talvez por alguma inclusão processa_cadastro.php deve executar o insert Sendo nesse conceito posso presumir as seguintes alterações: Em periodicidade.php armazenar o valor de $row['descarte']; $periodo_doc= $row['descarte']; Então em processa_cadastro.php $tipo_doc = intval(filter_input(INPUT_POST, 'tipo', FILTER_SANITIZE_NUMBER_INT)); //$periodo_doc = intval(filter_input(INPUT_POST, 'descarte', FILTER_SANITIZE_NUMBER_INT)); Só que tem de ver se é por inclusão mesmo que processa_cadastro.php entra na equação.
  10. Olhando aqui não consegui identificar onde está o problema, mas dar para saber onde pode está ocorrendo. - Primeiro clique com o botão direito sobre a tag <select> #tipo e selecione inspecionar, olhe no html processado pelo navegador se as propriedade value desse seletor estão corretas. Se não estiverem o problema está na foma da leitura da tabela tipo_arquivo. - Se os values estão corretos certifique-se que no documento HTML não exista outro elemento com o id #tipo (isso em todo documento processado, até mesmo html carregado por ajax) Na via das dúvidas você pode remover o comando onchange do seletor e adicionar um ouvinte de eventos - Antes de enviar seu ajax verifique no console do navegador como os dados são processados através do comendo console.log( o que analisar ) "clique e inspecionar depois na aba console" - Se em todos os casos não deram a noção onde está o erro pode ser um problema relacionado ao jQuery, mas como não mexo com isso não posso ajudar. Até mesmo pode ser algo que passou despercebido por mim e o problema pode não ter nada haver com o que mencionei
  11. Omar~

    Alterar href para impressão

    Tenta usar o comando print no css, então você dispensa alterar um elemento na header. Ele é justamente para personalizar quando a impressão é acionada @media print { /* suas definições */ } Também não sei se vai funcionar no seu caso, mas não custa tentar, ao invés de substituir o css, crie uma nova tag link na header com o javasript e adicione o css desejado então, nesse css contendo as definições personalizadas na teoria irá sobrescrever quaisquer css já carregado.
  12. Omar~

    setitimeout

    https://socket.io/get-started/chat O resto é auto explicativo. Ajudaria mais porém não mexo com jquery.
  13. Omar~

    Contar quantidades de imagem por input file

    Gostei da questão, nunca havia feito nada a respeito disso. Pois sempre limitei o upload a um único arquivo de vez. Enfim fiz algo assim: O usuário pode selecionar vários arquivos, se ele selecionar mais de 3 simplesmente redefino os arquivos selecionados no input, na verdade a função só irá pegar os 3 primeiros arquivos que ele selecionar e vai definir o valor do input com esses. <input id="exemplo" multiple="" type="file" style="display: none" accept="image/*" /> <label for="exemplo">Selecionar Imagens</label> <script> var exemplo = document.getElementById('exemplo'), dataT = new DataTransfer(); exemplo.addEventListener('change', function (e) { var alvo = e.target, selecionados = alvo.files; for (var i = 0; i < selecionados.length; i++) { if (i < 3) { dataT.items.add(selecionados[i]); alvo.nextElementSibling.innerHTML += ' ' + selecionados[i].name + '/'; } } alvo.files = dataT.files; }, false); </script> Acho que não precisaria lembrar, mas é bom... Você também terá que fazer uma verificação no servidor quando o usuário enviar os arquivos. E é muito simples, basta executar um loop com o laço for no array $_FILES do input, tudo índice que for maior que 3 você vai aplicando a função unset neles. De qualquer forma pelo javascript quando estava fazendo esse simples exemplo pude perceber um leque de infinitas possibilidades para a situação, dar para fazer cada coisa bacana a respeito, porém requer scripts mais complexos e detalhados, não sendo viável para um simples post aqui no fórum.
  14. Tente então algo como isso: O input está alí mas o editor não, ao digitar no input pelo menos 2 caracteres mostramos o local e o editor é inciado. Não sei se essa é a lógica, mas toda vez que alterar algo no input o conteúdo do editor é alterado <input type="text" id="exemplo" value="" /> <div style="display: none"> <textarea id="editor"></textarea> </div> <script> var exemplo = document.getElementById('exemplo'); exemplo.value = null; exemplo.addEventListener('keypress', iniciarEditor, false); function iniciarEditor(e) { var proximoElemento = e.target.nextElementSibling, editor = proximoElemento.children[0].id; if (typeof CKEDITOR.instances[editor] === 'undefined') { proximoElemento.removeAttribute('style'); CKEDITOR.replace(editor); } CKEDITOR.instances[editor].setData( e.target.value ); } </script>
  15. Primeiramente o "ckEditor 4" é o mesmo usando por esse fórum. Enfim, basta que que você crie um elemento qualquer (assim como é usado por esse fórum) assim quando clicar nesse elemento o editor é iniciado. Aí temos as opções de ter já uma textarea pronta para receber o editor, ou criar uma (no caso desse fórum a textarea já existe); independente qual for a iniciativa o elemento ao qual o editor vai iniciar deve ser mostrado pois vai ser uma iFrame. CKEDITOR.replace('iD_DA_TEXTAREA'); Aí vai depender da lógica que vai seguir para ter uma noção melhor de como deve prosseguir... No resto há uma infinidade de documentação espalhada na web sobre como usar essa ferramenta; confesso que nenhuma delas é de muita ajuda, a não ser confundir mais em vez de ir direto a situação real Exemplo você pode criar um elemento editável assim que uma key code é inserida pós clique o elemento alvo o editor seja iniciado..... seguindo os conceitos (ou mostra ou cria) Veja como eu realizei esse processo ao usuário clicar.....: https://github.com/Spell-Master/source-map/blob/master/modules/forum/post-new.php#L7 https://github.com/Spell-Master/source-map/blob/master/lib/javascript/sm-forum.js#L330 > a linha 335 https://github.com/Spell-Master/source-map/blob/master/lib/javascript/sm-editor.js#L28 obs.: Isso é o "rascunho" de um projeto meu portanto posso remover ou modicar tudo no github (serve para leitores futuros desse post)
  16. Tente algo como isso: <?php $array = [ 0 => ['produto' => 'bala', 'valor' => '10,00'], 1 => ['produto' => 'doce', 'valor' => '30,00'], 2 => ['produto' => 'laranja', 'valor' => '14,00'], 3 => ['produto' => 'banana', 'valor' => '16,00'] ]; foreach($array as $chave => $indice){ echo ("<p>Nome do produto: {$indice['produto']} / valor: {$indice['valor']} / chave no array: {$chave}</p>"); } Se não for isso é porque interpretei/adivinhei errado qual é sua dúvida.....
  17. Omar~

    Remover FULLTEXT de um coluna

    Você diz uma coluna em sua tabela no banco de dados sql? Se for execute o comando: ALTER TABLE nome_da_tabela DROP COLUMN nome_da_coluna
  18. Omar~

    Pegar parte de uma 'array'

    $load['parse']['title']
  19. Omar~

    Receber dados de textarea e select com jquery

    Tenta isso aqui: https://github.com/Spell-Master/sm-web/tree/master/javascript/AjaxRequest
  20. Omar~

    capturar tag br ao teclar enter

    Não entendi com o contexto geral qual é a dúvida. Mas especulando talvez isso seria o substituto para o problema: https://ckeditor.com/ckeditor-5/download/ Ou talvez esse que é o mesmo usado pelo IPS (o mesmo desse fórum pois é um IPS): https://ckeditor.com/ckeditor-4/download/ OBS.: Existem outros editores WYSIWYG, mas o melhor que o ckeditor é completamente in dependente ao jQuery (o mais letal veneno uma vez inventado para uma aplicação e o mais nocivo veneno da internet atualmente)
  21. Omar~

    Formatar imagens PNG em JPEG

    Assim como o colega já mencionou png ou jpg tanto faz qualquer navegador vai carregar independentemente, pois isso se trata de front e não interfere em nada no servidor exceto no tamanho do armazenamento. Acontece que imagens PNG são mais pesadas para carregar portanto desaconselhável usar quando não for necessário. É possível mas meio complicado pois requer uso de algumas funções do PHP imagecreatefromjpeg ou imagecreatefrompng imagesx e imagesy imagecreatetruecolor imagealphablending imagesavealpha imagecopyresampled imagejpeg ou imagepng Combinando essas funções podemos recriar a imagem conforme desejamos convertendo-a para outro formato ou redimensionando. Por exemplo essa classe para upload de imagens https://github.com/Spell-Master/source-map/blob/master/system/class/model/ImageUpload.php Ela utiliza todas as funções acima, assim possui a possibilidade de definir uma altura ou largura máxima para imagem pois se é maior ela a redimensiona. $upload = new ImageUpload('diretorio_onde_salvar'); $upload->sendImage($_FILES['name_do_input'], 'nome da imagem', 600); Por exemplo se a imagem tiver a altura maior que 600 a classe redimensiona a altura e em proporção igual sua largura para manter o aspecto original, o mesmo vale se a largura for maior que 600.
  22. Omar~

    [RESOLVIDO] Url Amigavél

    Sim $url[0] é a cidade e $url[1] será uma dessas opções. basta apenas programar o arquivo que será carregado por $url[0] para trabalhar com a informação correta conforme for o valor de $url[1]
  23. Omar~

    Receber dados de formulário e encaminhar para e-mail

    @finogatto vamos por parte. Algum arquivo php funciona? Está rodando a aplicação local ou em uma hospedagem? isso não ficou claro. Se em uma hospedagem ela tem o apache e o php instalado? Se em uma hospedagem ela permite protocolos POST?
  24. Omar~

    [RESOLVIDO] Url Amigavél

    O problema é relativamente simples, pois é um padrão de arquitetura que uso a anos, então poderíamos simplificar as coisas. RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 Pós produção se for conveniente você poderá remover as entradas RewriteCond, porque com isso alguém pode acessar acessar meusite.com/diretorio/arquivo.php. Enfim qualquer caractere inserido pós a primeira barra depois do endereço será uma entrada "url" armazenada na super global INPUT_GET e seu valor será uma string. Então simplificando sua situação vamos separar cada qual. <?php function ObterURL () { $filtro = filter_input(INPUT_GET, 'url', FILTER_DEFAULT); $definir = empty($filtro) ? 'inicio' : $filtro; $explode = explode('/', $definir); $array = array_filter($explode); return ($array); } Perceba que a função irá retornar pelo menos um índice "inicio" mesmo que INPUT_GET['url'] esteja vazio ou nulo Então no index.php começamos o processo: <?php require('ObterURL.php') $url = ObterURL(); /* // site.com/a/b/c será $url['a', 'b', 'c'] echo ($url[0] . '<br />'); var_dump($url); */ Até agora tudo bem seguimos seu conceito apenas simplificando. E é agora que começamos a estrutura da coisa toda e é nesse momento que acho que você está se perdendo. Como valor $url[0] carrego os arquivos que vão dar seguimento ao que quero aderir. Por exemplo o padrão "inicio" é porque ninguém acessou nada, se for "sao-paulo" carrego tudo referente a isso e por aí vai. Podemos etão criar uma função para anexar os arquivos conforme o valor de url[0] <?php function CarregarArquivo($valor) { switch ($valor) { case 'inicio': $arquivo = 'inicio'; break; case 'vitoria': case 'rio-de-janeiro': case 'sao-paulo': case 'salvador': case 'distrito-federal': $arquivo = 'cidades'; break; case 'catalogo': $arquivo = 'catalogo'; break; case 'buscar': $arquivo = 'pesquisa'; break; case 'contato': $arquivo = 'contato'; break; default: $arquivo = false; break; } if ($arquivo) { return ('paginas' . DIRECTORY_SEPARATOR . $arquivo . '.php'); } else { return ('paginas' . DIRECTORY_SEPARATOR . '404.php'); } } Adicionamos no index.php um require para o arquivo que contém a função e pedimos para incluir o arquivo conforma a string que essa função retornar. include (CarregarArquivo($url[0])); Então dessa forma conseguimos carregar os arquivos que vão fazer o que tem de fazer isoladamente sem nenhuma complicação. E se precisamos de mais alguma coisa é só consutar os valores de $url Exemplo: site.com/contado/outra_coisa $url[0] é contado e $url[1] é outra_coisa Por fim a nosso htaccess anula quaisquer demais entradas GET pois ele diz que só existe uma entrada a "url" então podemos contornar isso buscando essa informação do servidor ao invés da aplicação em sí. <?php function EntradaNoServidor() { // Função meramente para exemplificar $filtro = filter_input_array(INPUT_SERVER, FILTER_DEFAULT); $retorno = isset($filtro) ? $filtro : false; return ($retorno); } $uri = EntradaNoServidor(); $chave = explode('?chave=', $uri['REQUEST_URI']); if (isset($chave[1])) { echo ( 'Existe ?chave=' . $chave[1] . ' então podemos usar essa informação' . (empty($chave[1]) ? ' mas ela está vazia' : null) ); } else { echo ('Não existe uma entrada GET nesse arquivo'); } Lógico que dependendo da forma da estrutura de diretórios e arquivos seus as funções ou mesmo os arquivos devem ser adaptados para a lógica aqui apresentada. Se for o caso coloquei no g.drive o exemplo funcional disso que apresentei. https://drive.google.com/file/d/1O-jq3luqLybShUtltbIjgKdGSrTVd1zc/view?usp=sharing
  25. Omar~

    Navegar no site sem pausar webradio

    Eu mudaria a navegação para se realizada só com ajax, porém o probela a barra de url persiste. Bom você pode está usando esse meu script para realizar a navegação por ajax que esse problema é sanado: https://github.com/Spell-Master/sm-web/tree/master/javascript/AjaxRequest De qualquer forma se for o caso de usar frame pode optar por manipular a barra de navegação: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState https://developer.mozilla.org/en-US/docs/Web/API/History/pushState
×

Informação importante

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