Jump to content

Sistema Plugins/Módulos


XRS

Recommended Posts

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

  • 2 weeks later...

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

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

@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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.