Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MIOLO TEAM
SUMÀRIO
3 – Interface e Funcionamento
4 – Handler
4.1 – Handler City( city )
5 – Formulário
5.1 – Form City(frmCity)
6 – Business
6.1 – Business City(busCity)
7 – Grid
7.1 – Grid City(grdCity)
8 – Lookup
8.1 – Criando um Lookup
8.2 – Utilizando um Lookup no Form
Dentro do diretório modules do MIOLO deve ser criado um diretório com o nome do
módulo. neste caso, o nome do diretório é “Agenda”. dentro do diretório do
módulo, o módulo deve ter a seguinte estrutura:
miolo@server: cd /usr/local/miolo2/modules
miolo@server: mkdir agenda
miolo@server: cd agenda
miolo@server: mkdir handlers
miolo@server: mkdir forms
miolo@server: mkdir db
miolo@server: mkdir sql
miolo@server: mkdir html
miolo@server: mkdir docs
miolo@server: mkdir etc
2. Criação dos Arquivos Necessários para o Módulo do MIOLO
<?php
Dentro da tag db colocar uma tag com o nome do módulo. a tag system
define o tipo de banco de dados a ser utilizado. A tag host define em
qual host esta o servidor do banco. A tag name define o nome do banco e
as tag user e password definem um usuário e uma senha para o banco.
/handlers/main.inc: Handler chamado inicialmente ao acessar o módulo.
Cria a interface inicial ou chama o handler que for necessário.
3. Interface e Funcionamento
Vamos criar a tela inicial em nosso main.inc, com os três ícones de acesso:
Em todos os campos que aparecem para o usuário usamos a função _M(), que faz a
internacionalização. traduzindo o que é passado no 1º parâmetro para o idioma
escolhido na configuração, tomando como base as traduções do módulo passado no
segundo parâmetro.
A imagem do ícone deve ser chamado pelo método getImage() da classe MUI, o qual
é acessado através do método getUi() da variável global $MIOLO, passado como
primeiro parâmetro o nome do módulo e como segundo parâmetro o nome da imagem.
A imagem deve estar no diretório html/images dentro do módulo.
<?php
$ui = $MIOLO->GetUI();
$panel->addAction(_M('Contact', 'agenda'), $ui->getImage('agenda',
'contact-32x32.png'), 'agenda', 'main:contact');
$panel->addAction(_M('City', 'agenda'), $ui->getImage('agenda', 'city-
32x32.png'), 'agenda', 'main:city');
$panel->addAction(_M('Schedule', 'agenda'), $ui->getImage('agenda', 'book-
32x32.png'), 'agenda', 'main:schedule');
$theme->appendContent($panel);
As últimas linhas fazem a chamada do próximo handler chamado pelo action.
$a = $context->shiftAction();
if( $a )
{
$MIOLO->invokeHandler( $module, $a );
}
?>
4 – Handler
Deve-se criar um handler para cada form. Neste caso o handler do form City
(forms/frmCity.class). Os handlers devem ser criados dentro do módulo no
diretório handlers. Neste caso handlers/city.inc.
<?php
?>
5. Formulário
<?php
class frmCity extends MForm
{
var $grid; //Cria-se uma Variável Global para a Grid
function __construct()
{
parent::__construct(_M('City','agenda'));
Abaixo o método “createFields” onde, como o nome já sugere, devem ser criados
os campos e componentes do formulário.
function createFields()
{
global $MIOLO; // disponibiliza o acesso a variável global $MIOLO
$fields = array(
new MTextField ('idCity','',_M('CodCity','agenda'),10),
new MTextField('nameCity','',_M('City','agenda'), 30),
new MHContainer ('contBtns',$buttons),new MSeparator()
);
$this->setFields($fields);
//instancia a Grid
$this->grid = $ui->getGrid('agenda','grdCity');
function btnSearch_click()
{
global $MIOLO;
$bus = $MIOLO->getBusiness('agenda', 'busCity');
function btnInsert_click()
{
global $MIOLO;
// se não foi digitado o nome da cidade, exibe um erro na tela
if (!$this->getFormValue('nameCity'))
{
// método addError() cria um box de erro no form
$this->addError(_M('City is Required!'));
return;
}
$bus = $MIOLO->getBusiness('agenda', 'busCity');
$data = $this->getData();
$bus->setData($data);
function loadData()
{
global $MIOLO, $action;
O método btnSave_click() será acionado assim que for clicado o botão "btnSave".
Ele é responsável por alterar o registro no Business City.
function btnSave_click()
{
global $MIOLO;
else
{
$msg = _M('Register Not Updated! Check data and try
again','agenda');
$this->addError($msg);
}
}
Assim que o usuário clicar no botão “delete” de um registro na grid, deve ser
mostrada uma confirmação, o que é feito pelo método abaixo. Quando for clicado
“OK” deve ser chamada o método deleteCity(), que excluirá o registro. Caso for
clicado “Cancelar” devemos voltar ao form com os registros na grid. Fazemos
isso sempre usando a variável “event” passada pela URL, e sem esquecer de
passar o id através do “item”.
function deleteConfirm()
{
global $MIOLO;
$message = _M('Delete City ','agenda').MIOLO::_REQUEST('item').' ?';
// o metodo confirmation() espera no 1º parametro a mensagem
// no 2º a URL a ser acessada quando clicado “OK”
// no 3º a URL a ser acessada quando clicado “Cancelar”
$MIOLO->confirmation(
$message,
$MIOLO->getActionURL( 'agenda', 'main:city', null,
array('event'=>'deleteCity','item'=>MIOLO::_REQUEST('item'))),
$MIOLO->getActionURL( 'agenda', 'main:city',null,
array('event'=>'btnSearch_click')),'','',true);
}
function deleteCity()
{
global $MIOLO;
$bus = $MIOLO->getBusiness('agenda', 'busCity');
if ($bus->deleteCity())
{
$msg = _M('Register Successfully Deleted!','agenda');
$this->addInfo($msg);
}
else
{
$msg = _M('Register Not Deleted! Check data and try
again','agenda');
$this->addError($msg);
}
$this -> btnSearch_click();
}
6. Business
Todos os campos da tabela devem ser variáveis globais, para que seja possível
os setar e acessar do form pelos métodos getData() e setData(). Também teremos
a variável $db como global, pois será uma instância da classe do miolo que
acessa diretamente o banco de dados e precisaremos dela em todos os métodos.
<?php
function __construct()
{
global $MIOLO;
// atribuindo $db
$this->db = $MIOLO->getDatabase('agenda');
$this->MSQL->setDb($this->db);
}
Para executarmos select e outros tipos de SQL que retornam dados, usamos o
método query() da classe da base. E quando usamos SQL que gravam dados, deve
ser usado o método execute(), o qual retorna um boolean trazendo o sucesso ou
não do comando.
$data = $this->db->query($sql);
// Retorna um array com os dados
return $data;
}
$this->MSQL->setColumns('id , name');
$this->MSQL->setTables('city');
// o método insert() do MSQL espera os dados a serem inseridos
$sql = $this->MSQL->Insert(array($this->idCity,$this->nameCity));
// como citado anteriormente, para gravar dados usamos a função
// execute(), que retornará um boolean
// caso funcione, devemos retornar o ID inserido, senão, false
if( $this->db->Execute($sql) )
{
return $this->idCity;
}
else
{
return false;
}
}
O método updateCity() insere em um registro já existente as modificações
solicitadas no Form City.
$status = $this->db->execute($sql);
return $status;
}
7. Grid
8 – Lookup
Exibe um campo para entrada de texto, que permite fazer pesquisas no banco de
dados. neste caso exibiremos um lookup utilizado no módulo agenda, nos forms
frmContact e frmSchedule. A classe do lookup deve ser criada dentro do
diretório db do módulo. Para criar um lookup segue-se esta estrutura:
<?php
Lookup da City. O nome da função deve ser Lookup + nome do item, no caso City.
function LookupCity(&$lookup)
{
// abaixo pegamos o valor digitado(existente se o usuário já filtrou)
// e criamos o filtro, um textField adicionado pelo addFilterField()
$cityName = $lookup->getFilterValue('cityName');
$MIOLO = MIOLO::getInstance();
$db = $MIOLO->getDatabase('agenda');
if( !is_null($where) )
{
$sql->setWhere( substr($where, 5) );
}
$sql->setOrderBy('id');
$context->setContext('agenda', $sql);
}
$contactName = $lookup->getFilterValue('contactName');
$MIOLO = MIOLO::getInstance();
$db = $MIOLO->getDatabase('agenda');
if( !is_null($where) )
{
$sql->setWhere( substr($where, 5) );
}
$sql->setOrderBy('id');
$context->setContext('agenda', $sql);
}
?>
8.2 – Utilizando um Lookup no Form
$this->addField($cityLookup);
Onde a tag name é o nome do módulo. também deverá ser o mesmo nome do arquivo
zip. A tag description é a descrição do módulo. menu_text é a tag que
pré-define o texto do menu. version é a versão do módulo. home_page, email e
update_url definem dados do desenvolvedor do módulo.
2. MODULE.CONF -> criar um arquivo xml module.conf no diretório etc/ dentro do
módulo onde serão pré-definidas informações de configuração do módulo e do
banco. Possui a seguinte estrutura:
Dentro da tag db colocar uma tag com o nome do módulo. a tag system define o
tipo de banco de dados a ser utilizado. A tag host define em qual host
esta o servidor do banco. A tag name define o nome do banco e as tag user e
password pré-definem um usuário e uma senha para o banco. Estas configurações
podem ser editadas durante a instalação.