Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
]Pessoal, estamos começando a desenvolver um core para nosso sistema [www.onixseven.com.br], e estamos fortemente pensando na utilização do zend.
Porem temos a seguinte situação. Num cliente por exemplo, o cadastro de usuário tem 2 campos a mais do que o padrão.
No framework antigo, tínhamos um core e um diretório chamado FWLocal, onde la dentro ficava todas as customizações. La dentro possui somente telas do cliente, e elas se estendem das telas padrão para que haja a customização.
É possível alguma coisa nesse sentido com o zend? O que queremos é manter um core, e telas personalizadas seria para cada cliente.
Obrigado
Outra solução (já que você fala em formulário) é criar os formulários base no core da aplicação e, caso seja necessário, você estender dele para personalizar.
Carlos Eduardo
Pois é, é assim que fazemos hoje, mas nao sei como estruturar isso.
Explicando melhor, serão instalações diferentes em servidores diferentes até, então tenho algo assim, em todos os clientes
application/
.. config/
.. layouts/
.. modules/
.. .. default/
.. .. .. controllers/
.. .. .. .. indexController.php
.. .. .. .. errorsController.php
.. .. .. models/
.. .. .. views/
.. .. .. .. index/
.. .. .. .. .. index.tpl
.. .. .. .. errors/
.. .. .. .. .. error.tpl
.. .. biblioteca/
.. .. .. controllers/
.. .. .. .. AutoresController.php
.. .. .. models/
.. .. .. .. Autores.php
.. .. .. views/
.. .. .. .. autores/
.. .. .. .. .. index.tpl
.. .. .. .. .. form.tpl
common/
.. default/
.. .. css/
.. .. .. style.css
.. .. .. layout.css
.. .. images/
.. .. js/
.. .. .. jquery.js
.. .. .. application.js
library/
Pensei ter um diretório no mesmo nivel do "modules", chamado "cliente1" por exemplo e la ter as customizações, algo assim
application/
.. config/
.. layouts/
.. modules/
.. .. default/
.. .. .. controllers/
.. .. .. .. indexController.php
.. .. .. .. errorsController.php
.. .. .. models/
.. .. .. views/
.. .. .. .. index/
.. .. .. .. .. index.tpl
.. .. .. .. errors/
.. .. .. .. .. error.tpl
.. .. biblioteca/
.. .. .. controllers/
.. .. .. .. AutoresController.php
.. .. .. models/
.. .. .. .. Autores.php
.. .. .. views/
.. .. .. .. autores/
.. .. .. .. .. index.tpl
.. .. .. .. .. form.tpl
.. cliente1/
.. .. biblioteca/
.. .. .. controllers/
.. .. .. .. AutoresController.php
.. .. .. models/
.. .. .. .. Autores.php
.. .. .. views/
.. .. .. .. autores/
.. .. .. .. .. index.tpl
.. .. .. .. .. form.tpl
common/
.. default/
.. .. css/
.. .. .. style.css
.. .. .. layout.css
.. .. images/
.. .. js/
.. .. .. jquery.js
.. .. .. application.js
library/
Onde o cliente1 será todos extendidos do modules, entederam? sei la, algo assim, ou to viajando?
Eu faria diferente. Você tem uma pasta library para todos os projetos, certo? Dentro desta pasta fica o Zend, certo? Eu criaria toda esta parte que é padrão para todos dentro de uma outra pasta (pode chamar de App). Aí tudo que for feito do projeto específico fica dentro do módulo default. Algo assim:
>
/application
....../modules
........../default
.......... UsuarioController.php => específico do cliente
/library
....../Zend
....../App
........../Forms
................ Usuario.php
Por exemplo, arquivo Usuario.php dentro da pasta Form seria algo assim:
App_Forms_Usuario extends Zend_Form {}
Usando esta lógica, você pode criar os models e controller também desta forma.
Captou a ideia?
Carlos Eduardo
Entendi sim, ai o UsuarioController.php vai ser algo assim:
application/modules/default/controller/UsuarioController.php
class UsuarioController extends App_Controller_Usuario {}
mas me diz uma coisa, se não houver customização, vou precisar criar ele, mesmo que seja vazio certo?
Acho que modificando pode funcionar, por que o sistema é muito grande, vou ter que arrumar um jeito de separar por modulos, sei la, algo assim:
library/app/biblioteca/controller/autores.php
class App_Biblioteca_Controller_Autores extends Zend_Controller_Action {}
application/modules/biblioteca/controller/autoresController.php
class Biblioteca_AutoresController extends App_Biblioteca_Controller_Autores { }
Isso não é?
Rapaz, sua ideia foi a de longe a melhor que eu pensei, vou ter que mudar bastante coisa para ver se atende o que eu preciso, então vou manter o topico aberto e ir postando os progressos, tudo bem?
Valeu mesmo a ideia
O que você quer dizer com módulos? Por exemplo, módulo Cliente, módulo Notícias, coisa assim? Se for isto, não vejo necessidade de trabalhar com módulos, já que você teria 1 controller e o model para cada um deles (Cliente, Notícias...).
Sobre a questão de precisar criar mesmo que não tenha personalização, é um fato. Vai precisar criar sim, mas seria criado sem conteúdo nenhum...
Como eu disse, seria uma ideia... Até porque você teria, desta forma, separada toda a aplicação básica para cada um dos projetos, podendo trabalhar com controle de versão específico para ele, além de poder atualizar sem perder as personalizações de cada um. Poderia também iniciar um projeto de forma mais simples, apenas movendo a pasta App para o novo projeto.
Carlos Eduardo
Modulo para mim é um pouco mais complexo. Seria algo assim
modulo Protocolo controle Status
controle Tramites
controle Tipo_Tramite
controle Taxas
controle Solicitantes
controle Documentos
controle Anexos
modulo Biblioteca
controle Autores
controle Acervo
controle Tipo_Exemplo
controle Exemplares
controle emprestimo
E por ai vai. Possuimos 17 modulos no sistema atual.
Utilizo postgre, então separei os módulos à esquemas diferentes, cada modulo tem seu esquema no banco, assim quando preciso acessar os dados de outro modulo, fica tranquilo, acesso de qualquer lugar o model Biblioteca_Models_Autores.
Outra coisa importante é que nem todos os clientes possuem todos os módulos, mas não existe problema nenhum em enviar todo o sistema para o cliente, e só cadastrar o interessante no menu, sem problemas.
Geralmente trabalho na nova versão no período da tarde, então vou voltar no embalo para criar alguma coisa nesse sentido =)
Poxa Matias, e como eu vou fazer com os views em?
Não tem como eu extender uma view, ou tem? hauehae
Tem como usar renderPartial, mas não sei se vai resolver o seu problema. Talvez montando alguma coisa com viewHelpers, mas teria que analisar bem direitinho o problema e que tipo de personalização será possível fazer.
Carlos Eduardo
aheuae ja notaram que os horarios dos tópicos estão GMT+2 só?
Enfim, to tentando criar aqui, vou postando ....
Como será a feita identificação do layout por cliente?
Uma das possiveis soluções é alterar o caminho das views padrões para as views de cada cliente.
public function _iniView()
{
A estrutura de pasta ficaria assim:
application
-- cliente1
--- scripts
---- index
---- error
Dá pra deixar mais elegante a configração, como disse, é uma possivel solução.