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.comhttp://twitter.com/ccarromeu/