7. Finalização da instalação – Este é o passo final da instalação Se não existirem erros, é apresentada uma mensagem de felicitação e um aviso para que o
2.4. Desenvolvimento de componentes Joomla 1.5
2.4.3. Criação de um componente MVC
2.4.3.8. Back end criação das classes view e dos layout’s
No back end do componente com_hello foram criadas duas classes view, a classe HellosViewHellos e a classe HellosViewHello. A classe HellosViewHellos é responsável pela interface principal do componente e apresenta, através do layout default.php, a lista de mensagens. Esta classe apresenta o seguinte código:
<?php /**
* Hellos View for Hello World Component *
* @subpackage Components
* @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4
* @license GNU/GPL
*/
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.application.component.view' ); /** * Hellos View * * @package Joomla.Tutorials * @subpackage Components */
class HellosViewHellos extends JView {
/**
* Hellos view display method * @return void
**/
function display($tpl = null) {
JToolBarHelper::title( JText::_( 'Hello Manager' ), 'generic.png' ); JToolBarHelper::deleteList();
JToolBarHelper::editListX(); JToolBarHelper::addNewX(); // Get data from the model
$items = & $this->get( 'Data');
$this->assignRef('items', $items);
parent::display($tpl); }
}
No método display() desta view é criada uma barra de ferramentas que permite accionar as tarefas de manipulação das mensagens (adicionar, editar e eliminar); é obtida a referência ao método da classe model que devolve os dados da base de dados e os envia para o layout através do método assignRef() da classe JView.
A barra de ferramentas é criada recorrendo a métodos da classe JToolBarHelper da framework. O método title( JText::_( 'Hello Manager' ), 'generic.png' ) adiciona o título à barra e define a imagem a utilizar no botão. Note-se que no primeiro parâmetro está a ser utilizado o método JText::_ para facilitar a tradução do idioma do componente. Este método vai procurar a string no ficheiro de idioma do componente e devolve a sua tradução, caso não encontre é devolvida a mesma mensagem que foi passada como parâmetro. A figura seguinte mostra a barra de ferramentas do componente.
Figura 26 - Barra de ferramentas do componente com_hello
O método deleteList() pode ter até três parâmetros opcionais. O primeiro corresponde a uma string com a mensagem de confirmação de eliminação dos registos. O segundo parâmetro corresponde à tarefa enviada no pedido e que accionará o respectivo método no controller (por defeito é “remove”). O terceiro parâmetro é o texto que aparece por baixo do botão.
Os métodos editListX() e addNewX() podem conter dois parâmetros opcionais. O primeiro é a tarefa (por defeito é “edit” e “add”, respectivamente) e o segundo é o texto que
aparece por baixo do botão. Para efeitos de tradução, pode também ser utilizado o método JText::_ no segundo parâmetro destes dois métodos.
O layout que apresenta os dados enviados para a view é implementado no ficheiro admin/views/hellos/tmpl/default.php e apresenta o seguinte código:
<?php defined('_JEXEC') or die('Restricted access'); ?>
<form action="index.php" method="post" name="adminForm"> <div id="editcell">
<table class="adminlist"> <thead>
<tr>
<th width="5">
<?php echo JText::_( 'ID' ); ?>
</th>
<th width="20">
<input type="checkbox" name="toggle" value=""
onclick="checkAll(<?php echo count( $this->items ); ?>);" /> </th>
<th>
<?php echo JText::_( 'Greeting' ); ?>
</th> </tr>
</thead>
<?php $k = 0;
for ($i=0, $n=count( $this->items ); $i < $n; $i++){ $row = &$this->items[$i];
$checked = JHTML::_('grid.id', $i, $row->id );
$link = JRoute::_(
'index.php?option=com_hello&controller=hello&task=edit&cid[]='. $row->id ); ?>
<tr class="<?php echo "row$k"; ?>"> <td> <?php echo $row->id; ?> </td> <td> <?php echo $checked; ?> </td> <td>
<a href="<?php echo $link; ?>"><?php echo $row->greeting; ?></a> </td> </tr> <?php $k = 1 - $k; } ?> </table> </div>
<input type="hidden" name="option" value="com_hello" /> <input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" /> <input type="hidden" name="controller" value="hello" /> </form>
Para facilitar a construção dos layouts do componente devem ser utilizadas as CSS e os scripts Javascript que o pacote do Joomla já fornece. Assim, o nome do formulário deve ser adminForm e deve ser utilizado o método POST ao submeter. Para a selecção das mensagens são utilizadas caixas de selecção (checkbox) com o nome toggle. A função Javascript checkAll() já se encontra implementada no ficheiro /includes/js/ joomla.javascript.js da instalação do Joomla. Utilizando esta função, é apenas necessário passar como parâmetro o número de mensagens da lista e ao clicar na checkbox é possível
seleccionar ou desseleccionar todas as caixas de selecção. Através do método JHTML::_() é possível gerar as caixas de selecção para cada linha da tabela e que correspondem a um registo individual. Os links associados às mensagens são criados através do método JRoute:_() e contêm a variável option com o nome do componente, a variável controller com o nome do controller, a variável task com o nome da tarefa a executar e o array cid com o identificador das mensagens (JRoute::_( 'index.php?option=com_hello&controller=hello& task=edit&cid[]='. $row->id );).
Os últimos quatro campos do formulário estão ocultos. O primeiro campo, com o nome de option, é necessário para que o Joomla não deixe de executar o componente. O segundo campo, o campo task, irá guardar a tarefa escolhida através do botão da barra de ferramentas do componente. O campo com o nome boxchecked servirá para guardar o número de caixas de selecção seleccionadas. O último campo, com o nome controller, é utilizado para se especificar o nome do controller responsável por tratar a tarefa enviada pelo formulário.
Com a implementação da view hellos e do seu layout default, a interface apresentada no back end será idêntica à interface da figura seguinte.
Figura 27 - Layout default da view hellos no componente com_hello.
A classe HellosViewHello responsável por apresentar o layout form com formulário de edição ou adição de mensagens, é implementada no ficheiro admin/views/hello/ view.html.php e apresenta o seguinte código:
<?php /**
* Hello View for Hello World Component * * @package Joomla.Tutorials * @subpackage Components * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4 * @license GNU/GPL */ // No direct access
defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.application.component.view' ); /** * Hello View * * @package Joomla.Tutorials * @subpackage Components */
class HellosViewHello extends JView {
/**
* display method of Hello view * @return void
**/
function display($tpl = null) {
//get the hello
$hello =& $this->get('Data'); $isNew = ($hello->id < 1);
$text = $isNew ? JText::_( 'New' ) : JText::_( 'Edit' );
JToolBarHelper::title( JText::_( 'Hello' ).': <small><small>[ ' . $text.' ]</small></small>' );
JToolBarHelper::save();
if ($isNew) {
JToolBarHelper::cancel(); } else {
// for existing items the button is renamed `close` JToolBarHelper::cancel( 'cancel', 'Close' );
}
$this->assignRef('hello', $hello);
parent::display($tpl); }
}
À semelhança da view hellos, o método display() da view hello começa com a criação da barra de ferramentas e com a referência ao método da model que contém os dados. Os dados são então enviados através do método assignRef() para o layout form da view. Para a construção do layout form da view é criado o ficheiro admin/views/hellos/ tmpl/form.php com o seguinte código:
<?php defined('_JEXEC') or die('Restricted access'); ?>
<form action="index.php" method="post" name="adminForm" id="adminForm"> <div class="col100">
<fieldset class="adminform">
<legend><?php echo JText::_( 'Details' ); ?></legend> <table class="admintable">
<tr>
<td width="100" align="right" class="key"> <label for="greeting">
<?php echo JText::_( 'Greeting' ); ?>:
</label> </td>
<td>
<input class="text_area" type="text" name="greeting"
id="greeting" size="32" maxlength="250" value="<?php echo $this->hello->greeting;?>" /> </td>
</tr> </table> </fieldset> </div>
<div class="clr"></div>
<input type="hidden" name="option" value="com_hello" />
<input type="hidden" name="id" value="<?php echo $this->hello->id; ?>" /> <input type="hidden" name="task" value="" />
<input type="hidden" name="controller" value="hello" /> </form>
Importa aqui destacar que foi adicionado um campo oculto de nome id que vai guardar o identificador da mensagem, uma vez que o utilizador não necessita (nem deve) alterar o valor
deste campo. Para facilitar a criação desta interface são novamente utilizadas as classes disponíveis nas CSS do Joomla, tais como, adminForm e adminTable.
Figura 28 - Layout form correspondente à view hello do componente com_hello
Através das views hellos, hello e dos seus respectivos layouts, os utilizadores do lado back end do Joomla podem fazer toda a gestão das mensagens referentes ao componente com_hello.