Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a Plugin-Based System Like Wordpress With Laravel / PHP

This question has been bugging me for quite some time now, I want to create a cms, a School Mnagement System to be more specific, and what matters to me the most, is making this system plugin based, in a way that administrators can download and install plugins right through their admin panel, just like wordpress.

Now I've read about wordpress Hooks, Actions and Filters, and in all honesty i can say i'm just a little familiar with their functionality, but to apply same functionality to a Laravel App... , It's a bit hard to figure out, at least for me.

I've also searched about this question and found out that almost everyone is suggesting packages, But while packages can work great for other developers wanting to get use of the package's functionality, they can't be easily installed by a user not familiar with any programming language, And that's exactly what i want in my application.

Now what i have in my mind so far, as in Wordpress Actions and Filters, almost everything one would want to use in Wordpress theme files ( to make that piece of code flexible for adding plugin functionality ) should be called as functions, and calling that function by Wordpress do_action() is kind of a must-take path, which of course makes sense.

This way plugin developers can just call add_action() / add_filter() in their files and put their plugins into the flow of the application. So...

Basically what I'm asking here is:

  • How to apply such functionality to a laravel app?
  • Is there an easier way than calling everything by a function like do_action()?
  • Should i write some kind of a file management module for downloading and updating plugins?

Again I must say that I am not very familiar with wordpress ways to achieve this kind of functionality, So I may be wrong about some of the description I mentioned above, But please, I appreciate any clarification around this subject if you can.

Thanks in advance for any insight.

*P.S. I've tried to be as clear as I possibly can about the problem, And I'm not looking for any specific method for the system I`m developing. What i want is to know Common / Best methods ( If there is a best method ) for achieving such functionality, preferably in Laravel, but a general algorithm would still be very appreciated.

I know lots of people have the same question and are tackling with the same issue, so if you even only provide a link to a useful article it would be great.*

like image 303
Arsi Avatar asked Nov 30 '16 14:11

Arsi


People also ask

Can Laravel be used with WordPress?

Fortunately, one of the most popular Hypertext Preprocessing (PHP) programming frameworks, Laravel, can be integrated with WordPress. This combination can enable you to manage your web application development through the WordPress back end, offering a more streamlined workflow.

Is Laravel faster than WordPress?

WordPress depends on plugins for most of the functionalities, while Laravel has built-in features for validation, authorization, inversion of control, etc. Too many plugins can substantially slow down the page loading speed of WordPress sites, while Laravel pages load faster due to easily manageable automated tasks.

Is WordPress a PHP plugin?

WordPress plugins are made up of PHP code and can include other assets such as images, CSS, and JavaScript. By making your own plugin you are extending WordPress, i.e. building additional functionality on top of what WordPress already offers.


2 Answers

I know it was 2 years ago, but for now you can achieve this with laravel with some packages:

So i think the steps will be:

  • Create new Laravel App and add some packages for BASIC admin UI and things you will need like:

  • Authentication (https://laravel.com/docs/5.7/authentication)

  • Roles and Permissions (https://github.com/spatie/laravel-permission)
  • Users managment
  • Modules (https://nwidart.com/laravel-modules/v4/introduction)

At this point you must configure and write a UI for manage every thing from every package mentioned.

So i think this is the way or at least some try to do it in 2019 :D

Happy new year to all!

like image 123
Ascerx Avatar answered Sep 19 '22 22:09

Ascerx


I have been working as a Wordpress Developer for a very long time and I also have sufficient experience in Laravel... and to be honest, making this kind of functionality is not that difficult at all.

How?

First of all, you must understand that the web app that you will be making will have all the functionalities, but they can only be enabled/disabled from the front-end (Admin Panel/Dashboard). In other words, your School Management System app is actually having all the features/functionalities pre-installed, but you are just allowing the users to enable/disable it. This is much simpler.

So, if for eg. you want to provide someone attendance management functionality, you will have to give the admin of the site, the access to enable/disable it.

Why?

Wordpress has a built-in UI for adding/updating plugins. But in Laravel, everything is code based and therefore this I believe is the simplest way to go (especially for making things in your app pluggable).

Steps

  1. Make a site with UI etc...
  2. Create a config and migration file which will have the names of all the plugins you are going to allow the user to enable/disable.
  3. Make a sync command that will sync all the plugins in your app.
  4. Use it render a page from the front-end and manage their status from the back-end (is_active etc etc...)
  5. Now once, these plugins are active, make sure the user (say moderator, editor) has access to manage them, for which you will obviously have to create roles/permissions and use Laravel Policies for such stuff.
  6. Lastly, only the admin will have the enabling/disabling writes and no one else.

For the other part where you want the people to perform their own functions with filters/actions. I'd say this is completely contradictory to the part where you say Installing Laravel Packages isn't easy. Well, if you would really want a developer a way into this, why not straight away ask them to make a package for your app alone? Hmmmm.... Think about it :)

But, even then, if you would like to create such a functionality, create a simple class which the user can call and user its functions to call their own functions... Something like -> SMSPlugin::do_action(). But then again, making things like updating/deleting the plugin will require you to build your own Plugin Store and ask users to upload to it. Then you'll have to make an API to constantly check for updates for all the installed plugins and blah blah.... It's a really long procedure... And I don't believe that feasible too!

Hope I answered everything. Let me know in the comments if you have any doubts :)

like image 42
prateekkathal Avatar answered Sep 22 '22 22:09

prateekkathal