Joomla - Componente com Zend Framework examplo



Joomla é um CMS nice (sistema de gerenciamento de conteúdo) e Zend Framework é uma vez do quadro famoso e amplamente adotado MVC desde sua primeira versão. Uma das coisa agradável sobre Zend é seus componentes fracamente acoplados.
Tenha em mente que componente em joomla e Zend Framework não se referem ao mesmo conceito. Aqueles que trabalharam em Joomla e Zend Framework saber a diferença.
Neste artigo eu não vou discutir o Zend e Joomla são e como componente é diferente em ambos, mas ao invés disso eu vou compartilhar um segredo de como desenvolver componentes joomla no Zend Framework.
Este artigo não é para aqueles que não têm conhecimento de joomla e Zend.
Embora joomla tem API própria para o desenvolvimento de seus componentes e módulos, mas você pode usar qualquer código php para além da sua própria API.
Razão é simples. Joomla é desenvolvido em php.
Como também usou Zend php, nos bastidores, para que ambos possam interagir facilmente.
Este foi um pouco de introdução.
Ao discutir todas essas coisas que eu supus que você tem pouco conhecimento de joomla e ter algum conhecimento do Zend Framework também.
Então, vamos cavar polegadas
Antes de escrever qualquer código que você vai precisar para fazer o download e instalar joomla. Também fazer download de Zend e salve-o no diretório de sua escolha.
Uma vez joomla instalado com sucesso, abra joomla / administrator / componentes e criar uma pasta chamada com_yourcomp.
Essa é a pasta do componente. Você precisará criar um arquivo chamado yourcomp.php
Se você quiser adicionar componente no seu administrador, o nome deve ser admin.yourcomp.php.
É isso aí, você já criou uma estrutura de diretórios necessária para o seu desenvolvimento de componentes joomla.
Se você escrever uma linha "Olá mundo!" Em youcomp.php ou admin.yourcomp.php e procurar a sua página como
http://localhost/joomla/index.php?option=com_yourcomp
você vai ver
"Olá, mundo" impresso.
Estes são os requisitos mínimos para o desenvolvimento de componente joomla.
Agora vamos usando classes Zend Framework para adicionar o código para este arquivo, mais vamos criar Zend estrutura de diretórios, a fim de trabalhar com Zend MVC.
Criar estrutura de diretório a seguir no seu joomla / administrator / components.



Aqui você pode ver que o meu nome do componente é com_advertisers.
Neste diretório eu
* Arquivo admin.advertiser.php* Diretório de aplicativos* Joomla diretório
O admin.advertiser.php arquivo servirá como o arquivo bootstrap.
Diretório do aplicativo contêm diretório específico para os controladores, modelos e pontos de vista.
O papel mais importante é desempenhado por nosso diretório Joomla no desenvolvimento de componente joomla no Zend Framework.
Este diretório contém 
Plugins/Router.php file.

Este arquivo contém o código para chamar ação específica com base na tarefa particular. Antes de ir para discutir código no arquivo Router.php, eu vou mostrar a necessidade de código em nosso arquivo admin.advertisers.php.
define('ROOT_DIR', dirname(__FILE__));
set_include_path('.'
    . PATH_SEPARATOR . ROOT_DIR . '/'
    . PATH_SEPARATOR . ROOT_DIR . '/application'
    . PATH_SEPARATOR . ROOT_DIR . '/application/models'
    . PATH_SEPARATOR . get_include_path()
);

require_once "Zend/Controller/Front.php";
require_once "Joomla/Controllers/Plugins/Router.php";

$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);

$frontController->registerPlugin(new Joomla_Controllers_Plugins_Router());
$frontController->setControllerDirectory(ROOT_DIR.'/application/controllers');

$frontController->dispatch();

Na primeiras linhas eu incluí caminho para o nosso diretório de aplicativos com_advertisers diretório, eo diretório de modelos.
Em seguida eu incluir arquivos Frente Zend Controller e arquivo Router.php.Discutirei código no arquivo Router.php mais tarde, uma vez que contêm o código mais importante.
Em seguida eu inicializar controlador frontal, registre classe Router Plugin que é definido em nosso Router.php arquivo diretório do controlador, definir e expedição chamada.
É isso aí. Temos agora definida nosso arquivo de bootstrap.
Uma coisa importante é a criação caminho para nossos arquivos de biblioteca que contêm componente Zend.
Você pode incluir set_include_path caminho usando ou defini-la em seu arquivo php.ini.
Se você não incluir este caminho, o aplicativo não funcionará conforme o esperado.
Agora vá para o diretório controladores e criar IndexController.php e escrever o seguinte código nele.


require_once('Zend/Controller/Action.php');
class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
    }
    public function editAction()
    {
    }
    public function saveAction()
    {
    }
}

Observando especial aqui. Eu criei apenas três ações.
Vá para o seu application / views / scripts e criar um diretório chamado de índice e criar três arquivos index.phtml, edit.phtml e save.phtml.
O código acima é o que você precisa para trabalhar com Zend Framework MVC.Para integrar este código com joomla vai precisar de um arquivos adicionais. No meu caso o arquivo é Router.php
Eu tenho criar este arquivo em com_advertiser / Joomla / Controllers / Plugins / diretório.
O código contém neste arquivo é


require_once('Zend/Controller/Plugin/Abstract.php');
class Joomla_Controllers_Plugins_Router extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $task = $request->getParam('task')
        switch($task) {
            case 'edit':
                $request->setActionName('edit');
                break;
            case 'save':
                $request->setActionName('save');
                break;
            default:
                $request->setActionName('index');
                break;
        }
    }
}

Primeiro eu incluem classe plugin e depois estendido a minha turma deZend_Controller_Plugin_Abstract Router.

Essa classe contém um Zend_Controller_Plugin_Abstract preDispatch método que é chamado antes de qualquer controlador é chamado o processo de roteamento.

No método preDispatch, fico com a param "missão" e escrever uma declaraçãoswitch para verificar esse param. Se for editar, eu dou ao meu controle editAction doIndexController padrão. E da mesma forma se for salvar, eu via o meu pedido parasaveAction e, por padrão, se nenhum parâmetro for especificado, o pedido seráenviado para indexAction da minha IndexController.

É isso aí.

Agora, se você escrever

http://localhost/joomla/administrator/index.php?option=com_advertisers&task=save

Ela vai mostrar o que nunca você escreveu em seu arquivo save.phtml.

E da mesma forma se você escrever

http://localhost/joomla/administrator/index.php?option=com_advertisers&task=edit

que direcionará para editAction e irá mostrar o que você tem define lá.