Joomla! 1.6 – O que está para chegar…

Em 21 de Janeiro de 2008 foi lançado a versão 1.5 deste excelente CMS, e desde então foram lançados 15 subversões (atualizações), envolvendo pequenas melhorias e correções de segurança.

Desde meados de 2009 quem utiliza o Joomla! só pensa na próxima grande atualização do CMS, a versão 1.6. Ela deve incluir alguns dos itens mais requisitados pela comunidade como:

  • Sistema de permissões, com possibilidade de se criar novos grupos e definir o que cada grupo pode fazer;
  • União das Seções e Categorias, ao mesmo tempo que agora pode-se ter infinitas subcategorias;
  • Suporte a outros sistemas de banco de dados;
  • Assistente para adicionar link para um artigo enquanto estamos escrevendo outro artigo; Continue lendo

CakePHP – dúvidas comuns #1

Como já comentei algumas vezes, estou desenvolvendo com um framework MVC em PHP chamado CakePHP. Ele foi construído com intuíto de provar o potencial do PHP (na época em comparação ao Ruby e o Ruby on Rails). Se precisar de mais informações sobre o framework sugiro leitura do seu Cookbook e de outros blogs a respeito.

Desde que descobri o CakePHP faço parte do grupo CakePHP Tuga e ocasionalmente no canal de IRC do grupo #cakephp-pt na rede Freenode.org, e já tive a oportunidade de aprender e ajudar diversas vezes.

Vamos as dúvidas:

  1. Como salvar dados de um formulário que envolva um relacionamenteo de “muitos para muitos”/many-to- many ou ainda de HasAndBelongToMany (HABTM) ?

Nesta dúvida temos que ter em mente que o CakePHP faz todas as ligações entre nossos modelos desde que sigamos suas convenções, caso façamos isso, não haverá dificuldades.
Mas quais são essas convenções? Veja você mesmo.

Um detalhe que não podemos esquecer é que por padrão o CakePHP está preparado para tratar suas convenções em inglês, então, se não quisermos ter de modificar as configurações padrões, temos de desenvolver em inglês. Ok?

Seguindo todas as conveções o que fica faltando? É preciso saber como um relacionamento HABTM se manifesta em um formulário, ou seja, como ele é apresentado. No CookBook temos um texto sobre o caso. Resumindo, o que temos de ter é:

  • Um formulário com o nome de um dos modelos envolvidos no relacionamento. Por exemplo, em um blog temos um modelo Post e outro Tags, os dois estão ligados por um HABTM, então no formulário para inserir um Post, o nome de formulário seria Post.
  • Um ou mais campos identificados com o outro modelo parte do relacionamento e sua chave. No nosso exemplo seriam um ou mais campos com o nome ‘Tag.Tag’.

No item anterior que surge a principal dúvida: como definir o nome do meu campo? que tipo de campo usar?

Primeiro definimos o tipo de campo a se utilizar: normalmente utilizamos um Select box para multiplas seleções OU um conjunto de Checkbox. Qualquer que seja a escolha o restante é bem simples:

/*
$tag é o retorno de um find('list') com os campos id e name selecionados
$tags = array( array('id' => 1, 'name' => 'tag 1'), array('id' => 2, 'name' => 'tag 2') );
 
o índice 'multiple' só deve ser utilizado quando quiser um conjunto de checkbox
*/
echo $form->input('Tag.Tag', array(
	'type' => 'select',
	'multiple' => 'checkbox',
	'options' => $tags,
	'labels' => 'Selecione as tags'
	));

Com isso seu formulário já retornará o que é esperado pelo CakePHP e tudo que será necessário para salvar os dados do relacionamento é utilizar o método ‘saveAll’ ao invés de ‘save’.

Ainda esta semana comentarei das dúvidas sobre validação.

Vamos lá…

Primeiro post do novo blog…

Pois é, depois de algum tempo inativo, acho que agora “Vai!”.
Dêem uma olhada na página “O que é isso?” no menu acima para ver o que esperar deste blog =]

Para começar, passo um site que conheci ontem, e estou aproveitando muito, o nome dele é Numa Boa, portal mantido pela vovó Vicki, com assuntos diversos, mas um prato especial para os Geeks/Nerds de plantão, confiram, vale realmente a pena.

A seção que tem me prendido ao site é a de tutoriais, especialmente os sobre o Joomla. Se você tinha alguma dúvida para trabalhar com este CMS, aproveite, entre na Aldeia e aprenda muito.

Já está adicionado aos favoritos.

Obrigado vovó =]

Novidades…

Tirei um tempinho para falar de uma coisa que acabei de ver. Como alguns já sabem, sou fã do ActionScript, ou seja, do Adobe Flash ( antes Macromedia Flash ), acho esta linguagem de programação extremamente ágil e simpática. Foi uma das primeiras linguagens de programação na qual tive contato ( na verdade, quando à conheci, ainda não era considerada uma linhagem de programação, mais ou menos na época do Flash 4 ).

No começo de meus estudos, utilizada duas fontes de conhecimento: Ponto Flash e FlashMasters . Utilizava muito o primeiro, mas devido a falta de manutenção, acabei deixando de acessar. O segundo utilizo até hoje. Mas utilizo a seção que acho a mais importante deste portal, o Fórum.

O Fórum do FlashMasters é considerado o maior fórum do assunto em lingua portuguesa, e possui muita gente de fora do país. Eu mesmo já ajudei e fui ajudado por pessoas na França e em Portugal.

Acontece que o pessoal responsável pelo portal fez uma grande mudança na estrutura dele, na verdade, mudaram tudo. Adivinhem qual o sistema que agora gerencia o conteúdo do FlashMasters? Sim, acertou quem falou Joomla! ( devo estar obcecado por este CMS, hehehe ). Parabéns a todos que fizeram as alterações, ficou excelente, tanto visualmente como em funcionalidades ( segundo o William – diretor e criador do portal -, eles tiveram ajuda da comunidade Joomla Clube ).

Este novo portal até me deu vontade de voltar a participar do Fórum, e agora também, do portal ( é possível inserir conteúdo diretamente no portal, ótima idéia ). Dentre em breve estarei colocando lá umas classes que fiz em AS3 ( ActionScript 3 ).

Caso queiram me encontrar por lá, meu usuário é “Dotti”.

—- Atualizado —-

Ingratidão, escrevi na pressa e acabei esquecendo de falar do local onde mais aprendi: IRC . Sim, o bom e velho IRC ( que alguns chamam de mIRC ). Eu utilizava a rede Brasnet. Entrava nos canais #Flash , #PHP e alguns outros menos nerds ( #Porkaria, #Bingola, #Meleca e #Oakley ). Bons tempos.

No IRC conheci alguns dos usuários e agora administradores do FlashMasters. Gente que me ajudou muito e que devo certa gratidão. Daria até para citar alguns, mas acho que não seria justo com outros que também me ajudaram muito. De qualquer forma, obrigado a todos os velhos amigos do #Flash e agora do FlashMasters.

— Atualizado Novamente —

Links corrigidos, obrigado Gelinho.

Sentiram falta?

Olá, faz quase uma semana que disse que estaria com o blog novo pronto, “zero bala”, a todo vapor ( tudo bem, eu não falei isso ). Acontece que estou com muito trabalho a fazer, aquele negócio todo de Joomla! e outros projetos. Vou fazer um breve relato do que estou fazendo, mesmo sabendo que não interessa a ninguém:

Estou trabalhando com o Joomla! 1.5RC4 ( mais precisamente a versão 9958 do SVN ), apesar de não ser uma versão final, tem se mostrado extremamente estável. Comecei hoje a me aventurar na criação de componentes, utilizando o novo framework do mesmo. A documentação está no inicio, mas já da pra fazer bastante coisa ( não que eu tenha feito ). Já comentei um pouco sobre as extensões que estou utilizando ( ou tentando utilizar ).

Me aproximei do desenvolvimento do componente Attachments, e estou tentando traduzir a sua ajuda agora ( a interface já está toda em Português, ainda precisa ser melhorada, mas já pode ser utilizada sem problemas ). Já tenho algumas idéias para inserir no componente, assim que tiver um tempinho, vou ver se consigo implementar, senão, mando para “OS CARAS” as idéias.

Descobri estes dias dois webmail: RoundCube e o Uebimiau. O primeiro tem uma interface extremamente agradável, muito prática e ágil, porém, está na versão 0.1, e logo tentando enviar um email, já esbarrei em um problema: o mostrador de envio de mensagem ( feito usando técnica assíncrona – AJAX ) ficava em loop infinito, enquanto a mensagem já havia sido enviada. O segundo, apesar de não possuir uma interface tão elaborada, é extremamente funcional. Estou até pensando em contactar o desenvolvedor para sugerir um porte ao PHP5 e orientação a objetos. Mas antes disto, estou criando um componente do Joomla! para utilizar o Uebimiau dentro de sua interface. Um detalhe legal, o Uebimiau, é um projeto de um brasileiro.

Com relação a este componente de utilização de um webmail dentro do Joomla! ( a propósito, já existe um componente para rodar o RoundCube dentro do Joomla!, mas apesar de ele se instalar sem problemas, quando tento carregar a página que deveria mostrar o sistema, a tela fica em branco ) deparei com um problema. A base de usuários do Joomla! é independente da base de usuários do webmail. Como eu poderia fazer para que eles acessassem o email sem ter de enviar uma nova senha e login? Pensei um bucado e cheguei a uma solução: Armazenar em uma tabela do banco a identificação do usuário no Joomla! e seus dados para login no webmail ( claro, tudo devidamente protegido ). Daí, ao pedir para entrar no webmail, o componente iria efetuar o login no sistema para o usuário. A principio a idéia me parece boa, vamos ver no que vai dar, preciso terminar algumas coisas. Aliás, alguém saberia me informar uma forma de se passar variáveis do tipo $_POST sem ter de declarar uma tag form do html, com os campos e seus valores? Acredito que ficaria bem mais seguro. Talvez pela biblioteca CURL do PHP dê, vou ver.

Hmm, isso me lembrou que estava fazendo uma pesquisa sobre autenticação em PHP, acho que vou escrever uma artigo a respeito ( apesar de haver vários na web, talvez eu consiga ajudar alguém abordando diferente ). Uma das coisas interessantes é a autenticação HTTP, que é uma forma segura de se barrar pessoas não autorizadas.

Sem assunto – parte 3

“Puta mundo injusto meu!” by Boça.

É como disse o sábio Boça.
Passei meu sábado e meu domingo trabalhando.
Um final de semana inteiro na frente do PC. Se fosse para outro próposito até que não teria sido tão cansativo.

Como comentei em um post anterior, estou estudando o Joomla! 1.5 e alguns componentes para ele ( JEvents, Community Builder, Hydra, uddeIM ). Estava olhando o dotProject, mas ele não atenderia as minhas necessidades facilmente, então parti somente para o Joomla!.

Incrível a facilidade de se utilizar este CMS. Seu código está muito organizado e legível. Em pouco tempo dá para se entender bem o funcionamento de tudo.

Estou enfrentando alguns problemas, uns por parte do próprio Joomla! outros por parte de alguns módulos/componentes. O hydra ( componente para administração de projetos ) não me permite acesso pelo FrontEnd, algo essencial para meu propósito, provavelmente o erro é meu, mas não consegui achar nada a respeito.
O JEvents está com vários erros. Não consegue gravar o arquivo de configurações, exibe um calendário repetidamente no frontend. Além de não permitir alterações nas configurações ( sempre ocorre um erro apontando para uma página inexistente ).
O uddeIM funciona até. O único problema são seus textos e menus, que eu não consigo achar os arquivos que o geram para alterar. Ele está gerando uma saída html errada – não coloca àspas em um valor de atributo html. Também não consigo achar onde devo fazer a tradução dos termos.
O Community Builder está quase 100%. Inclusive estou fazendo a tradução do arquvo de internacionalização para o português do Brasil. Assim que terminar, estarei disponibilizando aqui e em alguma comunidade Joomla!. Meu único problema com ele é não descobrir onde é gerado o menu que fica acima do perfil dos usuários, para retirar o primeiro botão ( que direciona para a página do Community Builder ).

Mas até que está bem, levando em conta que nunca havia usado nenhum destes sistemas e que meu está com o WAMP bem meia boca.

Se alguém tiver idéia de como arrumar estes problemas, ou souber o que estou fazendo de errado, deixe um comentário ou envie-me um email: cauanc [em] gmail [ponto] com

Sem assunto – parte 2

Diário de bordo.
Data estrelar: 3, 4 do 3 do 2 do 1.
Pavilhão nove
Quadrante treze…

Música: “Jesus Negão”, autor: desconhecido.

Mais um dia está prestes a se encerrar.
Hoje, passei boa parte do dia estudando sistemas em PHP.

Primeiro perdi minha manhã inteira configurando WAMP ( Windows XP SP2 + Apache 2.2.6 + MySQL 5.0.45 + PHP 5.2.5 ).
Instalei tudo da maneira mais simples possível ( utilizando os executáveis compilados, inclusive do PHP ), mas mesmo assim apareceu um erro. Na verdade dois erros, mas um foi, de certa forma, burrice minha – havia esquecido de copiar a dll libmysql para a pasta do Windows. Uma coisa tão besta, que a gente faz dezenas de vezes na vida, e eu consigo cometer algum erro toda vez, nunca configurei o WAMP de primeira.

O segundo erro é um problema com alguma extensão do PHP. O apache travava toda vez que tentava executar um script PHP. Algo muito estranho. Procurei no google pelo crash e só encontrei suposições. Uma delas era de que a extensão com problema era a php_mysql.dll ou php_mysqli.dll . Desativei todas as extensões do PHP e fui reativando uma a uma para descobrir qual estava causando o crash. Até que havia ativado as extensões php_mysql e php_mysqli sem que o apache travasse. Uffa, pelos menos o essencial eu tinha.
Acabou que não descobri a extensão que causava o crash, apenas que não era nem a GD, nem MySQL(i), nem PDO. Outra hora tento descobrir. Aliás, vi em um fórum na web, um cara com problema na extensão PDO para mysql, não respondi no fórum porque necessitava cadastro, e o tópico parecia bem antigo, mas o problema dele era a falta da extensão PDO ( a extensão genéria PDO, ela tem que ser carregada para que se carregue as extensões específicas, como a do mysql ).

Enquanto cedia o computador para outras pessoas, retomei a leitura do livro que chegou recentemente.
Estou gostando da leitura. O 1º capitulo aborda várias funções do PHP. O 2º capitulo já explica Orientação Objetos. De modo geral, tudo é muito bem explanado e possui exemplos.
Sinceramente, só não gostei muito da parte que aborda o Polimorfismo. Achei o assunto meio vago, talvez pela falta de suporte do PHP.

Falando em Orientação a Objetos, estou com umas idéias em mente. Penso em escrever um pouco sobre o tema aqui, não vou perguntar a opinião de vocês por que sei que não existe o “vocês”, hehehe. Mas gostaria de estar escrevendo sobre Programação Orientada Objetos, de forma bem genérica, usando exemplos em várias linguagens – C++, Java, PHP, ActionScript. Quem sabe nesta próxima semana não me inspiro.

A, esqueci de dizer quais sistemas em PHP eu estudei durante a manhã, foram eles: Joomla! 1.5 e dotProject . Sistemas excelentes, sob licença GPL. Recomendados. Se você programa, ou é fluente em Inglês-Português, pode ajudar estes projetos, um grande aprendizado ( é, eu tenho que fazer isso também ).

Até.