gototopgototop
 

Curso de Joomla em várias modalidades só aqui no Joomla Brasília

  • aumentar tamanho texto 
  • diminuir tamanho texto 
  • layout default 
  • layout default daltonismo 
  • layout default contraste
Home Tutoriais de Joomla Joomla! Development Coletânea Programador Joomla! Tutoriais de desenvolvimento. Artigo nr 1 Objeto JDatabase

Coletânea Programador Joomla! Tutoriais de desenvolvimento. Artigo nr 1 Objeto JDatabase

E-mail Imprimir PDF

development joomlaEstou terminando um componente MVC para o Joomla 1.5. Foram meses de pesquisa, estudo e muita programação para que o mesmo estivesse dentro dos padrões utilizados pelo Framework do Joomla e totalmente documentado.

O projeto tornou-se um grande desafio já que um dos pontos chaves seria desenvolver o componente dentro dos padrões de projeto utilizados pelo Joomla e dentro do conceito de MVC (model view controller) da programação orientada a objetos.Alguns investimentos foram feitos, dentre eles a aquisição do livro Mastering Joomla! 1.5 Extension and Framework Development que pode ser encontrado no Amazon.com.

Inicio agora uma coletânea de artigos voltados para o desenvolvimento de componentes para Joomla, seguindo todos os padrões exigidos pelo seu framework. Ou seja, o componente deverá ser desenvolvido orientado a objetos (esqueça a programação procedural) e deveremos seguir os padrões de projeto.

Esta coletânea será longa, técnica e voltada para programadores. Abordaremos os capítulos mais importantes do livro dentro do escopo: " Development for Joomla". Já me perguntaram por quê fazer isto, uma vez que sou um dos pioneiros no distrito federal em desenvolvimento MVC para o Joomla 1.5. O que vou ganhar traduzindo e compartilhando o conhecimento com todos, inclusive com os concorrentes? Minha resposta: " Não tenho concorrentes e sim parceiros. Para que serve o conhecimento se não for compartilhado com o próximo? "

Vamos à luta... ;-)

O Banco de Dados

Este artigo detalha o papel do banco de dados no Joomla!. Ele define algumas regras, que temos de acatar. Ele explica diferentes maneiras em que podemos consultar a base de dados. Também abrange brevemente a emulação do ADOdb disponível para os desenvolvedores que desejam entender as aplicações existentes.

Joomla atualmente foi concebido para utilizar o SGBD (Sistema Gerenciador de Banco de Dados) MySQL. No entanto, a arquitetura permite a implementação de outros SGBD. Existe alguma incerteza em torno da questão do suporte a outras bases de dados, devido à sintaxe utilizada nas consultas e funções que são específicas para o MySQL.

O Núcleo de Dados

Grande parte dos dados que vemos em Joomla! é armazenado no banco de dados. Uma instalação básica do Joomla 1.5.x tem 36 tabelas. Algumas delas estão relacionadas as extensões e outras ao funcionamento do núcleo interno do Joomla!

Existe um esquema de dados oficiais, que descreve as tabelas acima criadas durante a instalação. Para obter mais informações, por favor consulte: http://developer.joomla.org

Temos acesso a Base de Dados do Joomla! usando o objeto JDatabase. A classe JDatabase é uma classe abstrata, que é estendida para diferentes SGBDs.

Atualmente, existem apenas dois SGBD incluídos no núcleo do Joomla! MySQL e MySQLi. Temos acesso a classe global JDatabase objeto usando JFactory:

$db =& JFactory::getDBO();

Estendendo a base de dados

Quando criamos extensões, geralmente queremos que elas armazenem dados de alguma forma, na base de dados. Se estamos usando o banco de dados, é importante sabermos estendê-lo de forma correta. Mais informações sobre este tema nos próximos artigos da coletânea sobre desenvolvimento de componentes MVC para Joomla 1.5.


Prefixo das tabelas

Todas as tabelas possuem um prefixo, normalmente jos_, que auxilia na utilização de um único banco de dados para múltiplos projetos em Joomla!. Quando vamos escrever consultas SQL, para abstrairmos a variável de prefixo da tabela, usamos um prefixo simbólico que é substituído com o prefixo real em tempo de execução. Normalmente, o prefixo simbólico é # __, mas podemos especificar outro prefixo alternativo, se quisermos.

Convenções de Schemas

Quando criamos as tabelas de nossas extensões, devemos seguir algumas convenções padronizadas. A convenção mais importante é o nome da tabela. Todas as tabelas devem utilizar o prefixo de tabela e deve começar com o nome da extensão. Se a tabela está armazenando uma entidade específica, adicione o plural do nome da entidade até o final do nome da tabela separados por um sublinhado. Por exemplo, uma tabela para os itens da extensão' Minha Extensão', seria chamada de # __myExtension_items.

Todos os nomes dos campos da tabela deverão ser minúsculos e usar sublinhado como separador de palavras; você deve evitar o uso de sublinhados se eles não são necessários. Por exemplo, você pode nomear o campo endereço de email como e-mail. Se você tivesse um campo para o email primário e outro para um e-mail secundário, você poderia chamá-los de e-mail e email_secundario; não há razão para nomear o campo do endereço de email principal como email_principal.

Se você estiver usando como chave primária um registo de nome ID, você deve marcá-lo como um campo do tipo INT - AUTO_INCREMENT - NOT NULL. Isto permitirá que você use o Framework do Joomla! de forma mais eficaz.

Campos Comuns

Podemos utilizar alguns campos comuns em nossas tabelas. O uso desses campos nos permitirá tirar partido das vantagens da estrutura do Joomla. Iremos discutir a forma de implementar e manipular estes campos, utilizando a classe JTable, mais tarde nos próximos artigos da coletânea sobre desenvolvimento de componentes MVC para Joomla 1.5.


Publicação

Usamos publicação a fim de determinar e a exibição de dados. Joomla utiliza um campo especial chamado published, do tipo tinyint (1), onde 0 = não publicado e 1 = publicado.

Hits

se quisermos manter controle do número de vezes que um registro tenha sido visto, podemos usar o campo especial hits, do tipo inteiro e com o valor padrão 0.

Checagem

Para evitar que mais de um usuário tente editar um registro no mesmo momento, podemos verificar os registros (um tipo de lock de registro). Usamos dois campos para fazer isso, checked_out e checked_out_time. Checked_out, do tipo inteiro, tem o ID do usuário que tenha saído do registro. Checked_out_time, do tipo datetime, mantém a data e a hora em que o registro foi verificado. A data é nula e o ID do usuário registrado é 0 se o registro não é verificado.

Ordenando as Consultas

Muitas vezes queremos permitir que os administradores tenham a capacidade de escolher a ordem em que aparecem os itens. A ordem do campo, do tipo inteiro, pode ser usada para registros de número sequencial para determinar a ordem em que eles são exibidos. Este campo não precisa ser exclusivo e pode ser utilizado em conjunto com a cláusulas WHERE para formar grupos de ordenação.

Parâmetros dos campos

Nós usamos um parâmetro de campo, normalmente chamado de params, para armazenar informações adicionais sobre registros, o que é normalmente utilizado para armazenar os dados e determinar como um registro será exibido. Os dados contidos nestes campos são codificadas como INI STRINGS (que lidamos com a classe JParameter). Antes de utilizar um parâmetro de campo, devemos analisar cuidadosamente os dados que tencionamos alojar no campo. Os dados só devem ser armazenados em um campo de parâmetro se todos os critérios a seguir forem verdadeiros:
  • Não é usado para classificar registros;
  • Não utilizados nas pesquisas;
  • Só existe para alguns registros; e
  • Não fazem parte de um relacionamento entre tabelas do banco de dados.

Exemplo de esquema

Imagine que temos uma extensão chamada "Minha Extensão" e uma entidade denominada foobar. O nome da tabela é # __myextension_foobars. Este esquema descreve o quadro:

schema
Esta tabela utiliza todos os campos comuns e utiliza o campo ID como chave primária do tipo INT AUTO INCREMENT. Quando chegar o momento de definir as nossas próprias tabelas, temos de assegurar que usamos os tipos de dados corretos: NOT NULL, AUTO INC, UNSIGNED e DEFAULT.

O script sql abaixo possui as instruções necessárias para a criação da tabela:

CREATE TABLE IF NOT EXISTS `#__myextension_foobar` (
`ID` int(11) NOT NULL,
`content` text NOT NULL,
`checked_out` int(10) unsigned NOT NULL default '0',
`checked_out_time` datetime NOT NULL default '0000-00-00 00:00:00',
`params` text NOT NULL,
`ordering` int(10) unsigned NOT NULL default '0',
`hits` int(10) unsigned NOT NULL default '0',
`published` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=UTF-8;

Até o próximo artigo...

Artigo traduzido e adaptado por Júlio Coutinho. O original encontra-se no livro Mastering Joomla! 1.5 Extension and Framework Development - James Kennard, capítulo 3 The Database