Sem muito papo:
Desenvolvendo um componente em Joomla usando a interface ORM do Doctrine ( E não usar o JTable padrão )
1. Coloque o Doctrine nas PASTAS de seu componente
2. Configure a conexão
3. Gere os Models
4. Configure o AutoLoading dos Models e das Classes do Doctrine
5. Problemas no Joomla
Baixe e instale o Doctrine no seu componente:

Estrutura de Pastas do Doctrine para Joomla
Configure a conexão:
Para configurar a conexão precisamos das informações do banco e de usuários e senha ( contidas no arquivo configuration.php no path do joomla ):
$dbName = JFactory::getApplication()->getCfg( ‘db’ );
$dbHost = JFactory::getApplication()->getCfg( ”host );
$dbUser = JFactory::getApplication()->getCfg( ‘user’ );
$dbPass = JFactory::getApplication()->getCfg( ‘password’ );
require_once( JPATH_COMPONENT_ADMINISTRATOR . DS . ‘_lib’ . DS . ‘doctrine’ . DS . ‘Doctrine.php’ );
$manager = Doctrine_Manager::getInstance();
$dsn = “mysql:dbname={$dbName};host={$dbHost}”;
$dbh = new PDO( $dsn, $dbUser, $dbPass );
Doctrine_Manager::connection( $dbh );
Gere os Models:
Doctrine::generateModelsFromDb( JPATH_COMPONENT_ADMINISTRATOR . DS . ‘models’ );
Configure o Autoloading dos Models e das Classes do Doctrine:
Configurar o autoloading do Doctrine no joomla só não é uma tarefa trivial devido ao joomla já usar esse recurso em seu framework (
veja o arquivo /libraries/joomla/loader.php:158 )
Então o que se tem a fazer é carregar o Autoloading do Doctrine mas ao mesmo tempo manter o Autoloading do Joomla…
Pra isso sobrecarreguei o método de autoloading do Doctrine:
spl_autoload_register( array( ‘My_Router’, ‘autoload’ ) );
class My_Router {
function autoload( $className ){
Doctrine::autoload( $className );
JLoader::load($className)
return true;
}
}
Tudo que fiz foi executar o autoload tanto do Doctrine quanto do Joomla… Assim não vamos ter problemas para carregar as classes dos dois frameworks…
Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);
Doctrine::loadModels( JPATH_COMPONENT_ADMINISTRATOR. DS . ‘models’ );
Lembre-se de remover o método “loadModelsFromDb” depois de gerar os models, pra não ter de fazer a mesma coisa sempre…
Pra carregar os models do Doctrine basta instanciar as classes…
Problemas no Joomla:
Prefixos das tabelas
Esse problema pode ser resolvido se ao invés de gerar os modelos direto do Banco você faça com modelos em YML e na instalação de seu componente você mude os nomes das tabelas ( editando o arquivo .yml ) para o correto.
Uso uma ferramenta bem interessante para gerar os modelos .yml. Gero o esquema do banco no MySQL-Workbench e rodo o plugin
http://code.google.com/p/mysql-workbench-doctrine-plugin/
O Doctrine adiciona muita funcionalidade ao seu componente, aproveite!
Até logo!