XRS Posted September 8, 2020 at 01:50 PM Report Share #619302 Posted September 8, 2020 at 01:50 PM Boa tarde, Estou a desenvolver um sistema CRUD com algumas funcionalidades básicas para ter como base para todos os projetos. A ideia é não estar sempre a refazer este conjunto de funcionalidades (gestão de users, permissões, roles, etc). De forma a criar algo útil e que se relacionasse entre si, pretendia criar um sistema de plugins que funcionasse de forma a evitar alterar o core sempre que necessário. A ideia era criar vários plugins que fossem criar adicionar as features que necessito para o projeto em questão. Por exemplo criar um plugin para blog, onde ele iria criar as tabelas associadas a um blog (categorias, tags, posts, comentarios, etc) e também adicionasse ao menu essas páginas. No entanto não estou a conseguir arranjar uma maneira decente de fazer isto. A ideia seria algo do género: "Core" tem uma página plugins onde iria ler as pastas de uma folder em especifico (por exemplo /plugins/); "Core" ia ter uma tabela básica onde constavam dados dos plugins instalados (por ex nome, versão, ativo ou não, etc); "Core" ia ter no menu uma leitura das paginas adicionais do plugin; Folder do plugin em si: + plugin_blog ++ plugin_blog.php (contem um array com a informação do plugin) ++ plugin_blog.sql (sql para instalação do plugin) ++ plugin_blog_uninstall.sql (sql para uninstall do plugin) ++ /folder/*.php (funções core do plugin e páginas adicionais do menu) Portanto a ideia passaria por quando aceder à página dos plugins no core, ele ia verificar se já tinha na tabela core o plugin que adicionei. Se não tivesse, fazia a instalação do plugin. Necessitava de colocar um loader para carregar os plugins que estivessem ativos. Isto está-me a criar algumas dúvidas nomeadamente: Como, através de rewrite rules conseguiria adicionar estes novos links (não tenho muito conhecimento de .htaccess) sem mexer no core; Será a forma mais prática de desenvolver um sistema de plugins? Tudo o que já procurei não consegui encontrar algo que realmente satisfizesse a minha necessidade. Alguma sugestão adicionar de como fazer isto de forma eficaz? Obrigado. Link to comment Share on other sites More sharing options...
eSkiSo Posted September 18, 2020 at 09:03 PM Report Share #619381 Posted September 18, 2020 at 09:03 PM Isso é basicamente re-inventar a roda, tens algumas frameworks com isso ja feito que depois so tens de criar as tuas "extensoes" ao que elas ja fornecem. Tipo Codeigniter, Laravel, cakePHP, dá uma olhadela nelas. PS. A nivel de base de dados tens as "migrations" nessas frameworks que ja te permite fazer isso. Os meus programas em http://www.eskiso.net Link to comment Share on other sites More sharing options...
XRS Posted September 22, 2020 at 06:45 PM Author Report Share #619399 Posted September 22, 2020 at 06:45 PM Tens toda a razão. Mas eu já tenho o meu projeto todo em plain PHP, digamos que uma mini framework, por isso ia perder ainda mais tempo numa curva de aprendizagem para uma framework do que propriamente a fazer o que quero. Acredito que não seja algo assim tão complicado de se fazer. Link to comment Share on other sites More sharing options...
M6 Posted September 23, 2020 at 08:06 AM Report Share #619401 Posted September 23, 2020 at 08:06 AM 13 hours ago, XRS said: Tens toda a razão. Mas eu já tenho o meu projeto todo em plain PHP, digamos que uma mini framework, por isso ia perder ainda mais tempo numa curva de aprendizagem para uma framework do que propriamente a fazer o que quero. Acredito que não seja algo assim tão complicado de se fazer. Tens de equacionar se, a longo prazo, não ficas a ganhar com a troca. Por exemplo, o tempo que vais demorar a criar o sistema de plugins deve ser superior a fazeres um tutorial e aprenderes uma dessas frameworks (às indicadas juntaria apenas mais uma, a Yii2). A quantidade de funcionalidade que tens de raiz é brutal: autenticação, roteamento, ORM, tudo baseado em HTML5+CSS+JQuery+Bootstrap, mecanismos de segurança, mecanismos de internacionalização, geradores de modelos, profiling e, as duas cerejas em cima do bolo, uma listagem enorme de plugins suportados via composer e um sistema maduro, documentado, testado por imensa gente e que vai evoluindo. Ou seja, o custo de aprendizagem, no longo prazo, vai ser um excelente investimento. Digo isso por experiência própria quando há uns anos estava com o mesmo dilema. Na altura diz um pequeno estudo do que havia disponível e, dado as minhas necessidades na altura, acabei por escolher a Yii por considerar que tinha o melhor equilíbrio entre as minhas necessidades e as funcionalidades disponibilizadas. O resultado nos últimos anos tem sido altamente positivo, hoje em dia desenvolvemos aplicações de forma muito rápida e simples. Quando necessitamos de um plugin para fazer alguma coisa, a probabilidade de ele não existir é quase nula. Para teres uma ideias, no caso da Yii, fazes uma tabela no MySQL e usando o Gii (uma ferramenta que vem incluída na Yii) em 2 minutos crias automaticamente o controlador, os models e as views. Ou seja, ficas com o CRUD feito automaticamente - página de pesquisa, de visualização dos dados, de criação, atualização e eliminação - pronta a ser costumizada por ti. Com isto não estou a dizer para escolheres a Yii ou desistires do teu projeto, estou apenas a dizer-te que deves ponderar muito bem se além do desenvolvimento das aplicações sobre uma framework ainda queres "perder" tempo a desenvolver a própria framework. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
XRS Posted September 23, 2020 at 07:02 PM Author Report Share #619408 Posted September 23, 2020 at 07:02 PM @M6, concordo com o que dizes. Isto foi um projeto meu que iniciei por gosto em pure PHP. E a verdade é que eu já tenho feito tudo o que mencionaste na Yii2 (autenticação, roles, permissões, profiling, internacionalização, CRUD, menus, páginas, etc) A minha ideia ao nivel de plugins não é propriamente o conhecido de "Wordpress". A ideia seria ter um plugin que transformasse o que tenho num blog (criando as tabelas, front end, etc). Ou outro plugin que transformava o site em "eCommerce" por exemplo. A minha ideia era ter uma base criada em backend por mim para todos os meus projetos. A única diferença era em vez de criar o "front end" e o backend especifico para cada tipo de projeto (blog, ecommerce, etc), ia ter um sistema de plugins onde não precisava de andar a martelar o core. Como queria mesmo seguir com isto, a ideia era mesmo perceber como o poderia fazer de forma eficaz. Concordo que uma framework ia facilitar muito o trabalho, mas é o trabalho que eu já tenho feito. Iria ter que ter a curva de aprendizagem para a framework escolhida + funcionamento dos plugins dessa framework. Assim com o que já tenho, só precisava de ter a curva de aprendizagem a perceber como fazer um sistema de plugins eficaz 🙂 (Já para não falar que será dos últimos projetos em PHP, motivo que me leva a crer que não justifica mesmo pegar numa framework). Link to comment Share on other sites More sharing options...
M6 Posted September 24, 2020 at 10:48 AM Report Share #619411 Posted September 24, 2020 at 10:48 AM Bom, no caso da Yii não tens backend, mas se optares por Django (Python) já tens um backoffice de raiz sem escreveres mais linhas de código para isso. Podes usar o Django como inspiração para tal. Quando ao mecanismo de plugins, se queres implementar o teu, creio que se calhar "basta" seguires o standard usado pelo Wordpress, Joomla, Drupal, etc.. Basicamente tens um ficheiro zip que contém lá dentro um ficheiro xml com as diretivas do que tem de ser feito em tempo de instalação, desinstalação e, caso se aplique, em tempo de update/upgrade (com particular atenção aos scripts de base de dados). A coisa é simples: num nome, descrição, versão e depois tags para indentificar que o ficheiro X é um controlador, logo deve ser copiado para o local dos controladores, o ficheiro Y é uma view, logo deve ser copiado para o local das views, etc.. Quando tens o plugin instalado na framework, basta que a framework tenha noção da sua existência - tipicamente é um registo com a informação do plugin na tabela dos plugins - para o poder usar. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now