Tiny Library to manage Bootstrap 3 modals
When you need more than 2 modals at the same screen, it's HTML
injection becomes painful to manage. Modal Utils create them "on the
fly" an manages unique ids and dynamic buttons.
https://github.com/marcoiai/modal
Enjoy!
quinta-feira, 26 de abril de 2018
quarta-feira, 11 de novembro de 2015
Doctrine 2 Generic Paginator
Sometimes you need to write DQL's for the fast bulding time it gives you, other times you need intricate queries that cannot be built or are very expensive in DQL.
Pagination of each of these is a pain in the ass. Don't suffer no more!
It is based on PagerFanta for Doctrine 2: Pagerfanta
Doctrine 2 Generic Paginator
It works with either DQL or SQL queries built by respective Query Builders.
Pagerfanta supports adapters, but it is the same concept, except that i have encapsulated.
No need to thank ;)
Pagination of each of these is a pain in the ass. Don't suffer no more!
It is based on PagerFanta for Doctrine 2: Pagerfanta
Doctrine 2 Generic Paginator
It works with either DQL or SQL queries built by respective Query Builders.
Pagerfanta supports adapters, but it is the same concept, except that i have encapsulated.
$qb = new QueryBuilder($this->getDoctrine()->getConnection());
$pag = new DoctrinePaginator($qb, 'COUNT(a.id) as total_rows');
$pag->setMax(25);
$pag->setPage($this->getRequest()->query->get('page', 1));
$pag->getResults();
No need to thank ;)
quinta-feira, 8 de outubro de 2015
Função CAST em Doctrine 2 DQL e Symfony 2
Tive a necessidade de utilizar a função CAST em uma consulta utilizando DQL(Doctrine Query Language).
Fiquei surpreso pois não existia nada pronto, mas o pessoal do Doctrine não dá ponto sem nó, e para tal existem as funções personalizadas (Custom Functions). Tudo bem, tem que aprender toda a notação, que utiliza umas constantes "malucas", e, por isto, resolvi liberar para quem quiser utilizar, a classe já pronta, falta apenas configurar no Symfony 2.
orm:
entity_managers:
default:
dql:
string_functions:
Cast:
Path\Namespace\DQL\Cast
Limpe o cache e utilize a função dentro da Query DQL:
SELECT CAST(column AS TYPE)
That's it!
Siga os passos e implemente em seu projeto:
1 - Baixe o arquivo deste repositório: Doctrine 2 Tips and Tricks .
2 - Ajuste a diretiva (geralmente localizada no arquivo config.yml):
doctrine:orm:
entity_managers:
default:
dql:
string_functions:
Cast:
Path\Namespace\DQL\Cast
Limpe o cache e utilize a função dentro da Query DQL:
SELECT CAST(column AS TYPE)
That's it!
Marcadores:
Cast,
Custom Function,
Desenvolvimento,
Doctrine 2,
DQL,
postgreSQL,
Softwares,
Symfony 2,
Symfony PHP OO
terça-feira, 14 de julho de 2015
Como pegar o Referer no Symfony 2
Prelúdio
O Symfony 2 é um ótimo framework em minha opinião, mas devido ao tamanho que tem hoje em dia, a documentação tem se mostrado ineficiente em apresentar algumas coisas. Comento abaixo uma delas: o uso do referer.
Atente para o fato de que no meu caso (e na maioria deles) acabamos por optar a utilizar uma autenticação personalizada. Se vc utiliza a autenticação "automática" acredito que vc só precisa utilizar o use_referer (mas não tenho certeza pq não utilizo desta maneira).
Logo de saída, o pensamento de qualquer um seria pegar o parâmetro referer, que, os mais antigos sabem, reside na superglobal (em teoria) $_SERVER['HTTP_REFERER'].
No caso do SF2, ao procurar na documentação vc logo fica sabendo que o SF2 alterar e "sanitiza" as superglobals, além do fato de alguns browsers não repassarem a mesma para o server. Mesmo assim vc tenta, da maneira "symfony":
No caso do SF2, ao procurar na documentação vc logo fica sabendo que o SF2 alterar e "sanitiza" as superglobals, além do fato de alguns browsers não repassarem a mesma para o server. Mesmo assim vc tenta, da maneira "symfony":
$request->headers->get('referer')
Sem sucesso!
Mas #comofaz?
O SF2 tem milhares de parâmetros para configurar milhares de coisas. Uma delas é a configuração dos firewalls, os verdadeiros responsáveis por verificar o acesso a determinadas rotas.
Um dos parâmetros é o "use_referer" situado dentro de CADA firewall (vc pode ter várias) porém ao contrário do que pensaríamos (sei que eu pensei) o dado não estará situado no referer propriamente dito, mas sim em uma diretiva chamada "target_path" residente na sessão, desde que ativada a outra diretiva "use_referer", armazenará a última URL que redirecionou para o login (só leva em conta requests do tipo GET e não armazena as url's de autenticação).
Sabendo disto, utilize o seguinte método para resgatar o referer (target_path):
*Symfony 2.1 em diante
$this->container->get('session')->get('_security.nome-do-seu-firewall.target_path')
ou
$session->get('_security.nome-do-seu-firewall.target_path')
*Symfony 2.0 ou anterior
$this->container->get('session')->get('_security.target_path')
ou
$session->get('_security.target_path')
Também está na própria documentação, um passo a passo de como personalizar o método que grava o target_path caso vc tenha necessidades específicas:
http://symfony.com/doc/2.2/cookbook/security/target_path.html
http://symfony.com/doc/2.2/cookbook/security/target_path.html
Há!
quarta-feira, 18 de setembro de 2013
Alterar atributos de um FEATURE no OpenLayers carregado de um arquivo KML
Arquivos KML no Open Layers são ótimos, mas como o arquivo já está pronto, não existe indicação clara na documentação para alterar alguns dos atributos (claro, em teoria estes atributos já viriam preenchidos do KML) como ID, DESCRITPION ou TITLE (estilo e outras informações podem ser personalizados também para o formatador - veja no mesmo link: #OpenLayers.Format.KML.parseAttributes). No meu caso, todos os features de um kml recebem o mesmo titulo e descrição, mas com um pouco mais de trabalho pode-se personalizar individualmente os features.
Voilà ;)
Voilà ;)
Marcadores:
features,
Javascript,
KML,
Layer,
OpenLayers,
Openlayers.Format.KML,
OpenLayers.Layers.Vector,
parseAttributes
terça-feira, 8 de novembro de 2011
Expressão Regular - Somente Números
Eu estava procurando por isto, quando o meu amigo Pedro MelloM ( :P ) me passou a dica, que acredito será útil para muitos.
Normalmente vc utiliza \d (minúsculo) para achar qualquer número. \D (maiúsculo) é a negação, ou seja, qualquer NÃO número. Você então usa uma regexp_replace e substitui \D (não números) por (string vazia).
Fica assim no postgreSQL (o g é um modificador para ele substituir todas as ocorrencias, e não apenas a primeira): regexp_replace('111.222.333-67', '\\D', '', 'g')
Resultado: 11122233367
Tanto em POSIX como PERL tem esta classe de caracter ( \D ).
Pronto, o que sobram são os números heheheheeu
Normalmente vc utiliza \d (minúsculo) para achar qualquer número. \D (maiúsculo) é a negação, ou seja, qualquer NÃO número. Você então usa uma regexp_replace e substitui \D (não números) por (string vazia).
Fica assim no postgreSQL (o g é um modificador para ele substituir todas as ocorrencias, e não apenas a primeira): regexp_replace('111.222.333-67', '\\D', '', 'g')
Resultado: 11122233367
Tanto em POSIX como PERL tem esta classe de caracter ( \D ).
Pronto, o que sobram são os números heheheheeu
Marcadores:
Expressão Regular,
Expressões Regulares,
Programação
quinta-feira, 25 de agosto de 2011
Primeiros passo no QT
Estou aprendendo a programar utilizando o QT.
Muita coisa boa! Nerd é uma desgraça mesmo né? rs
Pois bem, demorei para descobrir como fazer (sim, usei o google, mas vc acha "cada" solução de 500 linhas de código hehehehe) um efeito de "fade-in" e, lógico, se fizer ao contrário, "fade-out".
Inseri este trecho no método show() do widget.
setGraphicsEffect(new QGraphicsOpacityEffect(this));
QPropertyAnimation *animation = new QPropertyAnimation(graphicsEffect(), "opacity");
animation->setDuration(1000);
animation->setStartValue(0.);
animation->setEndValue(0.9);
animation->start();
Há! Difícil?
Muita coisa boa! Nerd é uma desgraça mesmo né? rs
Pois bem, demorei para descobrir como fazer (sim, usei o google, mas vc acha "cada" solução de 500 linhas de código hehehehe) um efeito de "fade-in" e, lógico, se fizer ao contrário, "fade-out".
Inseri este trecho no método show() do widget.
setGraphicsEffect(new QGraphicsOpacityEffect(this));
QPropertyAnimation *animation = new QPropertyAnimation(graphicsEffect(), "opacity");
animation->setDuration(1000);
animation->setStartValue(0.);
animation->setEndValue(0.9);
animation->start();
Há! Difícil?
Marcadores:
C++,
Nokia,
Programação,
QGraphicsEffect,
QGraphicsOpacityEffect,
QT
Assinar:
Postagens (Atom)