CakePHP Brasil

4 abril 2010

Plugin CakePtbr

Arquivado em: CakePHP — Tags:, , — Juan Basso @ 5:15 pm

Como alguns já devem conhecer, dou continuidade ao trabalho iniciado pelo Gabriel Gilini no GitHub. Ele iniciou colocando as inflections geradas pelo Sadjow, depois algumas atualizações que fiz, e assim foi… Depois de um tempo fiz um fork do projeto dele no GitHub e fui incluindo novas features, como validações (cpf, cnpj, etc.), behaviors, helpers, etc. Além disso, inclui testes automatizados para todos os itens existentes no plugin. No link do projeto você pode ver todos recursos que foram feitos: http://github.com/jrbasso/cake_ptbr

Agora, com as releases candidates do CakePHP 1.3, criei um branch (chamado 1.3) para fazer os devidos ajustes. Ou seja, se você já está usando o CakePHP 1.3, use a versão do branch 1.3 do cake_ptbr.

Neste branch da versão 1.3 entraram e sairam algumas coisas, dentre elas:

  • Validação de CPF/CNPJ: Foram removidas. O código delas foi transferido para o plugin oficial do Cake (localized) que trata só de internacionalização;
  • Geração de bolos em português: Quando você gerar models, views ou controllers via bake, eles já sairam do forno falando português!

Os demais recursos existentes na versão 1.2 continuarão valendo para a versão 1.3. Novos recursos estão na lista para serem implementados (falta um pouco de tempo): integração com PagSeguro, geração de boletos bancários e ajuste de número.

Quem tiver novas idéias de itens para implementar neste plugin, responda este post ou então crie uma issue no GitHub.

Abraços e bom uso para todos.

12 setembro 2008

Pensando no CakePHP para SofterHouse’s

Arquivado em: CakePHP — Tags:, , , , , , — Juan Basso @ 9:11 pm

Pessoal,

 

Estava pensando sobre o desenvolvimento de um sistema modular (um ERP, CRM, etc), vendido em partes para o cliente e que o código fosse deixado no cliente (nem que fosse criptografado com as diversas ferramentas que há disponível por aí…). Dai pensei, como fazer isso com o CakePHP?!

Pensando, achei que fosse legal criar cada módulo como um plugin, inclusive alguns recursos básicos do sistema, como a parte de autenticação (login). Deixar a ‘app’ como um barramento da aplicação, fornecendo components, helpers, layouts, css/js, vendors, etc. Essa parte funcionaria como uma infra estrutura do sistema, onde as rotas poderiam ser criadas dinâmicamente pelo AppController do plugin ou usar as rotas diretamente do sistema (plugin/controller/action/params).

Hoje o CakePHP dispões de várias funções para identificar se o app possui um componente ou outro plugin instalado, podendo os plugins “se conversarem”. O comando App::listObjects(‘Plugin’), por exemplo é fantástico para saber se um outro módulo também está instalado. Assim não precisaria cadastrar cada módulo numa base de dados, que poderia ser manipulada pelo cliente ou coisa do genero.

O mesmo poderia ser aplicado a uma empresa que possui diversos softwares, não necessariamente inteligados (em módulos). Onde todas as aplicações teriam um ambiente de desenvolvimento comum (barramento) e cada aplicação seria um plugin. Isso reduziria a quantidade de código e, consequentemente, o tamanho da aplicação nos clientes que tiverem mais de uma aplicação.

 

O que acham? Já passaram por algo assim?

28 julho 2008

Usando o TableSorter com CakePHP

Arquivado em: CakePHP, Tutoriais — Tags:, , , , , , , — Juan Basso @ 9:26 pm

Pessoal, depois de um tempo sumido devido a alguns trabalhos que me consumiram muito tempo, estou voltando…

Hoje vou falar de uma experiência que tive com o TableSorter com CakePHP na construção de uma página, não me atendo muito a detalhes de design, mas da parte funcional. No grupos de CakePHP PT eu tinha falado que ia fazer, mas fazem quase dois meses e nada, porém agora lá vai… Bill: desculpe a demora. :)

Primeiro, baixem o jQuery (http://jquery.com) e o plugin TableSorter (http://tablesorter.com).

Extraia os arquivos baixados (jquery.js e jquery.tablesorter.js) em alguma vendors\js ou webroot\js. Eu particularmente prefiro deixar na pasta vendors, pois são plugins de terceiros ou que não são exclusivos da aplicação. Em contra partida, deixar na pasta webroot polpa o trabalho do servidor executar o cake para procurar, reduzindo o tempo de resposta. Aí vai do gosto de cada um. Eu prefiro perder tempo para deixar as coisas nos seus devidos lugares…

No controller, você precisa apenas declarar que vai usar o helper Javascript:

1
var $helpers = array(..., 'Javascript');

Feito isso, criamos uma tabela na view do que queremos mostar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<table border="0" id="detalhe_compra">
	<caption><?php __('Detalhe por compra'); ?></caption>
	<thead>
		<tr>
			<th><?php __('Pedido'); ?></th>
			<th><?php __('Data'); ?></th>
			<th><?php __('Cliente'); ?></th>
			<th><?php __('Valor'); ?></th>
		</tr>
	</thead>
	<tfoot>
		<tr>
			<td colspan="3">&nbsp;</td>
			<td><?php echo $number->currency($totalPedidos); ?>
		</tr>
	</tfoot>
	<tbody>
<?php foreach ($pedidos as $pedido): ?>
		<tr>
			<td><?php echo $pedido['Pedido']['numero']; ?></td>
			<td><?php echo $pedido['Pedido']['data']; ?></td>
			<td><?php echo $pedido['Cliente']['nome']; ?></td>
			<td><?php echo $pedido['Pedido']['valor']; ?></td>
		</tr>
<?php endforeach; ?>
	</tbody>
</table>

Depois, ainda na mesma view, basta colocar o seguinte código para carregar os arquivos de javascript no head:

1
<?php $javascript->link(array('jquery', 'jquery.tablesorter'), false); ?>

Em seguida, configurar o TableSorter para agir sobre a tabela:

1
2
3
4
5
6
<?php
$javascript->codeBlock('
	$(document).ready(function(){
		$("#detalhe_compra").tablesorter({decimal: ",", dateFormat: "uk"});
	});', array('inline' => false));
?>

Nas configurações da tabela, defini que os números possuem o vírgula como separador decimal e a data no formato inglês (similar ao nosso).

Pronto, só isso já faz funcionar o TableSorter. Outras configurações, podem olhar no site do TableSorter e ver. Lá é bem documentado e tranquilo.

Abraços e boa sorte a todos, qualquer coisa, é só comentar.

Powered by WordPress