Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa
 


NOTA DE PUBLICAÇÃO

Este tutorial é uma tradução, com adaptação livre, do original Developing a Model-View-Controller (MVC) Component for Joomla!1.6 tutorial, de Christophe Demko, publicado no site de documentação do Joomla, o docs.joomla.org.

A tradução e publicação no Mabesi.com foi autorizada pelo próprio autor, com o qual entramos em contato, sendo a única condição imposta a de seguir as regras para documentação eletrônica do Joomla!, cuja licença pode ser encontrada em http://docs.joomla.org/JEDL., e que obriga, principalmente, a inclusão da informação da própria licença de uso e distribuição do documento, além de citar o nome do autor da obra original, o que fazemos com muito prazer.

 

CRIANDO UM BACKEND BÁSICO

Projetar a interface de back-end nos leva a criar pelo menos um tríptico Model-View-Controller. Para isto temos que modificar o ponto de entrada da administração do nosso componente, o arquivo admin/helloworld.php.

<?php
// Sem acesso direto ao arquivo
defined('_JEXEC') or die('Restricted access');
 
// importando a biblioteca joomla controller
jimport('joomla.application.component.controller');
 
// Obter uma instância do controlador prefixado por HelloWorld
$controller = JController::getInstance('HelloWorld');
 
// Executar a requisição task
$controller->execute(JRequest::getCmd('task'));
 
// Redirecionar se definido pelo controlador
$controller->redirect();

 

CRIANDO O CONTROLADOR GERAL

O ponto de entrada agora obtém uma instância de um controlador com o prefixo HelloWorld. Vamos criar um controlador básico para a administração:

<?php
// No direct access to this file
// Sem acesso direto ao arquivo
defined('_JEXEC') or die('Restricted access');
 
// import Joomla controller library
// importando a biblioteca Joomla controller
jimport('joomla.application.component.controller');
 
/**
 * General Controller of HelloWorld component
 * Controlador Geral do componente HelloWorld
 */
class HelloWorldController extends JController
{
  /**
   * display task
   * tarefa exibir
   *
   * @return void
   */
  function display($cachable = false) 
  {
    // set default view if not set
    // define a visão padrão caso não esteja definida
    JRequest::setVar('view', JRequest::getCmd('view', 'HelloWorlds'));
 
    // call parent behavior
    // chama o método da classe pai
    parent::display($cachable);
  }
}

Este controlador irá exibir a visão HelloWorlds por padrão.

 

CRIANDO A VISÃO

Com o gerenciador de arquivos e editor favorito, crie o arquivo admin/views/helloworlds/view.html.php contendo:

<?php
// No direct access to this file
// Sem acesso direto ao arquivo
defined('_JEXEC') or die('Restricted access');
 
// import Joomla view library
// importando a biblioteca Joomla view
jimport('joomla.application.component.view');
 
/**
 * HelloWorlds View
 * Visão HelloWorlds
 */
class HelloWorldViewHelloWorlds extends JView
{
  /**
   * HelloWorlds view display method
   * Método display da visão HelloWorlds
   * @return void
   */
  function display($tpl = null) 
  {
    // Get data from the model
    // Obtem dados do modelo
    $items = $this->get('Items');
    $pagination = $this->get('Pagination');
 
    // Check for errors.
    // Procura por erros.
    if (count($errors = $this->get('Errors'))) 
    {
      JError::raiseError(500, implode('<br />', $errors));
      return false;
    }
    // Assign data to the view
    // Atribui dados para a visão
    $this->items = $items;
    $this->pagination = $pagination;
 
    // Display the template
    // Exibe o template
    parent::display($tpl);
  }
}

No Joomla, visões exibem dados usando layout. Com o seu gerenciador de arquivos e editor favorito, crie o arquivo admin/views/helloworlds/tmpl/default.php contendo:

<?php
// No direct access to this file
// Sem acesso direto ao arquivo
defined('_JEXEC') or die('Restricted Access');
 
// load tooltip behavior
// Carrega a funcionalidade tooltip
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld'); ?>" 
   method="post" name="adminForm">
  <table>   <thead><?php echo $this->loadTemplate('head');?></thead>
    <tfoot><?php echo $this->loadTemplate('foot');?></tfoot>
    <tbody><?php echo $this->loadTemplate('body');?></tbody>
  </table>
</form>

Este layout chama vários sub-layouts (head, foot e body). Cada sub-layout corresponde a um arquivo cujo prefixo é o nome do layout principal (default) e um sublinhado.

Crie o arquivo admin/views/helloworlds/tmpl/default_head.php contendo:

<?php
// No direct access to this file
// Sem acesso direto ao arquivo
defined('_JEXEC') or die('Restricted Access');
?>
<tr>
  <th width="5">
    <?php echo JText::_('COM_HELLOWORLD_HELLOWORLD_HEADING_ID'); ?>
  </th>
  <th width="20">
    <input type="checkbox" name="toggle" value="" 
                 onclick="checkAll(<?php echo count($this->items); ?>);" />      
  </th>
  <th>
    <?php echo JText::_('COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING'); ?>
  </th>
</tr>

checkAll é uma função javascript definida no núcleo do Joomla, capaz de marcar todos os itens.

Crie o arquivo admin/views/helloworlds/tmpl/default_body.php contendo:

<?php
// No direct access to this file
// Sem acesso direto ao arquivo
defined('_JEXEC') or die('Restricted Access');
?>
<?php foreach($this->items as $i => $item): ?>
  <tr>
    <td>
      <?php echo $item->id; ?>
    </td>
    <td>
      <?php echo JHtml::_('grid.id', $i, $item->id); ?>
    </td>
    <td>
      <?php echo $item->greeting; ?>
    </td>
  </tr>
<?php endforeach; ?>

JHtml:: _ é uma função auxiliar capaz de exibir diversas saídas HTML. Neste caso, ele irá mostrar uma caixa de seleção para o item.

Crie o arquivo admin/views/helloworlds/tmpl/default_foot.php contendo:

<?php
// No direct access to this file
// Sem acesso direto ao arquivo
defined('_JEXEC') or die('Restricted Access');
?>
<tr>
  <td colspan="3"><?php echo $this->pagination->getListFooter(); ?></td>
</tr>

JPagination é uma classe Joomla capaz de gerenciar e exibir objetos de paginação.

 

CRIANDO O MODELO

A visão HelloWorlds solicita os dados ao modelo. No Joomla 1.6, há uma classe capaz de gerenciar uma lista de dados: JModelList. A classe JModelList e classes herdadas só precisam de um método:

  • getListQuery que constrói uma consulta SQL

e dois estados:

  • list.start para determinar o início da lista
  • list.limit para determinar o comprimento da lista

Os métodos getItems e getPagination são definidos na classe JModelList. Eles não precisam ser definidos na classe HelloWorldModelHelloWorlds.

<?php
// No direct access to this file
// Sem acesso direto ao arquivo
defined('_JEXEC') or die('Restricted access');
// import the Joomla modellist library
// importando a biblioteca Joomla modellist
jimport('joomla.application.component.modellist');
/**
 * HelloWorldList Model
 * Modelo HelloWorldList
 */
class HelloWorldModelHelloWorlds extends JModelList
{
  /**
   * Method to build an SQL query to load the list data.
   * Método para construir uma consuulta SQL para carregar a lista de dados.
   *
   * @return  string  An SQL query
   */
  protected function getListQuery()
  {
    // Create a new query object.    
    // Cria um novo objeto de consulta.    
    $db = JFactory::getDBO();
    $query = $db->getQuery(true);
    // Select some fields
    // Seleciona alguns campos
    $query->select('id,greeting');
    // From the hello table
    // Da tabela hello
    $query->from('#__helloworld');
    return $query;
  }
}

O método _populateState é, por padrão, chamado automaticamente quando um estado é lido pelo método getState.

 

EMPACOTANDO O COMPONENTE

Este deve ser o conteúdo do seu diretório de código:

  • helloworld.xml
  • site/index.html
  • site/helloworld.php
  • site/controller.php
  • site/views/index.html
  • site/views/helloworld/index.html
  • site/views/helloworld/view.html.php
  • site/views/helloworld/tmpl/index.html
  • site/views/helloworld/tmpl/default.xml
  • site/views/helloworld/tmpl/default.php
  • site/models/index.html
  • site/models/helloworld.php
  • admin/index.html
  • admin/helloworld.php
  • admin/controller.php
  • admin/sql/index.html
  • admin/sql/install.mysql.utf8.sql
  • admin/sql/uninstall.mysql.utf8.sql
  • admin/sql/updates/index.html
  • admin/sql/updates/mysql/index.html
  • admin/sql/updates/mysql/0.0.1.sql
  • admin/sql/updates/mysql/0.0.6.sql
  • admin/models/index.html
  • admin/models/fields/index.html
  • admin/models/fields/helloworld.php
  • admin/models/helloworlds.php
  • admin/views/index.html
  • admin/views/helloworlds/index.html
  • admin/views/helloworlds/view.html.php
  • admin/views/helloworlds/tmpl/index.html
  • admin/views/helloworlds/tmpl/default.php
  • admin/views/helloworlds/tmpl/default_head.php
  • admin/views/helloworlds/tmpl/default_body.php
  • admin/views/helloworlds/tmpl/default_foot.php
  • admin/tables/index.html
  • admin/tables/helloworld.php

Crie um arquivo compactado deste diretório e instale-o usando o gerenciador de extensões do Joomla! 1.6. Você pode adicionar um item de menu deste componente usando o gerenciador de menus no back-end.

Vamos atualizar também o arquivo de manifesto:

<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.6.0" method="upgrade">
  <name>Hello World!</name>
  <creationDate>July 2011</creationDate>
  <author>Plinio Mabesi</author>
  <authorEmail> plinio.mabesi (a) mabesi.com</authorEmail>
  <authorUrl> http://www.mabesi.com</authorUrl>
  <copyright>Copyright © 2011 - Plinio Mabesi - All rights reserved</copyright>
  <license>License Info</license>
  <version>0.0.7</version>
  <description> Descrição do componente Hello World...</description>
 
  <install> <!-- Este trecho é executado na instalação -->
    <sql>
      <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
    </sql>
  </install>
  <uninstall> <!-- Este trecho é executado na desinstalação -->
    <sql>
      <file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
    </sql>
  </uninstall>
  <update> <!-- Este trecho é executado em atualizações; Novo no Joomla! 1.6 -->
    <schemas>
      <schemapath type="mysql">sql/updates/mysql</schemapath>
    </schemas>
  </update>
 
  <files folder="site">
    <filename>index.html</filename>
    <filename>helloworld.php</filename>
    <filename>controller.php</filename>
    <folder>views</folder>
    <folder>models</folder>
  </files>
 
  <administration>
    <menu>Hello World!</menu>
    <files folder="admin">
      <filename>index.html</filename>
      <filename>helloworld.php</filename>
      <filename>controller.php</filename>
      <folder>sql</folder>
      <folder>tables</folder>
      <folder>models</folder>
      <folder>views</folder>
    </files>    
  </administration>
</extension>

Agora você pode ver em seu componente HelloWorld uma matriz com duas colunas, duas linhas e caixas de seleção. Você pode clicar nas caixas de seleção para selecionar as diferentes opções que você desejar.

Componente MVC para Joomla 1.6 - Parte 06                  Componente MVC para Joomla 1.6 - Parte 08

{jcomments on}

Seja social. Compartilhe!