Custom Engines

87 views
Skip to first unread message

Camilo Carromeu

unread,
Jun 1, 2011, 9:57:05 AM6/1/11
to titan-f...@googlegroups.com
Olá novamente pessoal,

Fiz uma modificação para atender a uma demanda antiga dos usuários do Titan.

Agora é possível customizar engines sem a necessidade da replicação de todo o componente. Isto facilita bastante quando temos um componente que nos serve muito bem com execessão de um pequeno detalhe ou regra de negócio.

Para utilizar engines customizadas em uma ação basta inserir na tag <action />, que a mapeia no config.inc.xml da seção, o atributo 'path' com o caminho para a pasta que contém a engine que deverá de fato ser utilizada.

Por exemplo, podemos imaginar uma seção que utiliza o componente "global.generic" para sua renderização. Podemos supor um grupo de usuário que poderá apenas visualizar a lista de itens e não as demais ações de criação, edição, etc. Isto é muito fácil de ser suprido por meio do controle de acesso atribuindo apenas a permissão de listar ao grupo e retirando as demais. Entretanto, vamos piorar a situação supondo que os usuários deste grupo, além de poder ver apenas a listagem de itens, podem ver apenas os itens aos quais foram vinculados como responsáveis.

Para suprir esta pequena variação bastaria realizar a cópia da engine list (neste caso, os arquivos list.prepare.php e list.php) do componente global.generic para uma pasta qualquer. Por questão de padronização, vamos supor que esta pasta seja:

local/custom/[nome da seção]/

Repare que estou sugerindo que a customização utilize o nome da seção como especializador, e não do componente, uma vez que esta sendo feita para atender uma demanda direta daquela seção.

Em seguida, criamos uma nova permissão na seção:

<permission name="_VIEW_ALL_" label="Pode ver todos os itens (e não apenas os de que é responsável)." />

Será necessário atribuir a permissão aos grupos que não estão limitados a ela.

Agora basta editar o list.prepare.php para cuidar da regra de negócio. Vamos supor que no list.xml haja uma tag field com o ID "_RESPONSIBLE_", que mapeia a coluna com o responsável na tabela no DB, na <view /> e na <search />. Bastaria no list.prepare.php alterarmos o código após o '$search->recovery ();' inserindo as linhas:

if (!User::singleton ()->hasPermission ('_VIEW_ALL_'))
    $search->getField ('_RESPONSIBLE_')->addBlock (User::singleton ()->getId ());


Na tag que mapeia a ação dentro do config.inc.xml da seção basta colocar o atributo:

path="local/custom/[nome da seção]/"

Espero que ajude.

Abraços,

Camilo

Keywords: engines, custom, motores, componentes, customization

--
http://www.carromeu.com/

e-Mails:
cam...@carromeu.com
cam...@ufms.br
 
Skype: ccarromeu
gTalk: cam...@carromeu.com

http://twitter.com/ccarromeu/

Márcio Silva

unread,
Mar 28, 2012, 1:12:09 PM3/28/12
to titan-f...@googlegroups.com
Camilo, 

Não consegui usar a custom engines juntamente com custom menu image. Eu criei uma engine chamada sync. Coloquei o path para ela no config.inc.xml, mas eu preciso de uma imagem custom, coloquei uma pasta chamada _menu com a sync.png. No entanto, o componente insiste em procurar no global.generic.

Por outro lado, se no business.xml eu também coloco o caminho para a custom engine a imagem aparece. Só que ele solicita as outras engines, reclamando que as outras engines não existe. O que fiz de errado?


2011/6/1 Camilo Carromeu <cam...@carromeu.com>

Camilo Carromeu

unread,
Mar 29, 2012, 8:07:05 AM3/29/12
to titan-f...@googlegroups.com
Olá Marcio,

Realmente, por padrão todas as imagens de menu são buscadas na pasta mandatória '_menu' do componente da seção. Apesar de ser uma custom engine o componente ainda é o global.generic.

Creio que a melhor solução seria estender o path da imagem para suportar um caminho qualquer. Vou fazer a modificação e lhe aviso.

Abraços,

Camilo

2012/3/28 Márcio Silva <map...@gmail.com>

 
Google Groups: http://groups.google.com/group/titan-framework/
 
To unsubscribe from this group, send email to
titan-framewo...@googlegroups.com



--
http://www.carromeu.com/

e-Mails:
cam...@carromeu.com
camilo....@embrapa.br
Reply all
Reply to author
Forward
0 new messages