Content Management System using laravel framework

Features:

  1. Cms
  2. Admin interface
  3. Module based app
  4. Theme based
  5. Plugins
  6. Roles and Permissions
  7. Menu creation
  8. User Management
  9. Page Creation
  10. Mail configurations
  11. Site Configuration,etc

Install:

composer require phpworkers/cms

Requiremments:

  1. Laravel 5.4 or later
  2. laravelcollective/html: ~5.0
  3. yajra/laravel-datatables-oracle: 7.2
  4. unisharp/laravel-filemanager: ^1.8

After Install:

  1. Add following Lines to config/app.php providers array
    //html
    Collective\Html\HtmlServiceProvider::class,
    //datatable
    Yajra\Datatables\DatatablesServiceProvider::class,
    Ramesh\Cms\CmsServiceProvider::class,
  2. Add Following Lines to config/app.php aliases array
    'Form' => Collective\Html\FormFacade::class,
    'Html' => Collective\Html\HtmlFacade::class,
    'Cms' => Ramesh\Cms\Facades\Cms::class,
  3. run php artisan vendor:publish (Publishing css,js,config files,core modules,theme,etc)
  4. Run Following commands
  5. composer dump-autoload
  6. php artisan cms-migrate (Migrate our tables)
  7. php artisan db:cms-seed (Seeding)
  8. php artisan update:cms-module (register modules to table)
  9. php artisan update:cms-plugins (register plugins)
  10. php artisan update:cms-menu (regiser menus)
  11. Open your web.php
    Remove Following Lines(route)
    Route::get('/', function () {
    return view('welcome');
    });
  12. now go to your site(localhost:8000)
  13. localhost:8000/administrator

    Username : admin

    Password : admin123

Documents

Folder Structure

Main path


cms (main)
|
|__core
| |
| |__core modules
|
|
|__local
 |
 |__themes
  |
  |__local modules
1.cms : cms path is the main path of our app,that contain 1.1 : core 1.2 : local 1.1 : core : core path is core module path ,that contain number of core modules,avoid to write core modules 1.1.1 : core modules -> core path contain number of core modules 1.2 : local : local path contain theme,we can create multiple theme 1.2.1 : local modules -> theme path contain number of local module(user create module)

Skin path


public public (main)
|
|_skin
 |
 |__theme name
   |
   |__css,js,vendor,fonts,etc
1 : public ->public folder is default folder in laravel 1.1 : skin -> skin folder is our assets folder 1.1.1 : theme name -> folder name is theme name , that contain css, fonts ,js,etc

Theme

Theme is main part of our package,we can create multiple theme,our package is theme and moduler based,all theme is placed on cms->local folder
Default theme is theme1

Create Theme

Just create new folder inside of cms->local.

Change theme

If you want to change theme?its very easy
Go to adminpanel->site configuration->change theme


Modules

Module is is a mechanism to group controller, views, modules, etc that are related, otherword module is pice of code or package of laravel

Core

core is folder,that contain core modules (pre-defind) Module
Note: Don't change any code of core module's

Local

local folder contain local module,which is created by user

Create own module

php artisan make:cms-module {module-name}
eg : php artisan make:cms-module helloworld
helloworld module is created under current theme folder
then register our module to database for feature use
php artisan update:cms-module
Where is the entry point (provider) of the module?
open provider folder under cms/local/{module}
that provider is same as laravel provider so boot and register method is important and additionaly we have some functions
  1. registerRoot -> registerRoot method is used to registreing our custom module routes
  2. registerAdminRoot -> registerAdminRoot method is used to registering our custom module admin routes
  3. registerViews -> registerViews method is used to registering our custom module views
if you want to enable this method,just uncommands calls inside register method of your provider thats all :) ,lets see files in modules,
  1. module.json ->file
  2. composer.json ->file
  3. menu.xml -> file
  4. routes.php -> file
  5. adminroutes -> file
  6. Controller -> folder
  7. Database ->folder
  8. Models -> folder
  9. config -> folder
  10. resourcesc-> folder
  11. Events -> folder
  12. Listeners -> folder
  13. Mail -> folder
  14. Middleware -> folder
  15. helpers ->folder

module.json

{ "name": "helloworld", "version": "0.0.1", "type" : "local", "providers": [ "Providers\\HelloworldServiceProvider" ] }
Parameter Data type Use is optional?
name string name of the module NO
version string version of the module NO
type string (core/local) type of the module NO
providers Array Provider of this module,provider is register point of our module NO
plugins string (relative path of plugin) plugin path,that used to defind plugin YES
helpers object (relative path of helpers) helpers path,that used to defind helpers,helpers contain common functions,we can use any where
eg:
"helpers" : { "HelperName1":"cms\\core\\blog\\helpers\\Blog", "HelperName2":"some path", .... }
YES
search object (relative path of search class) search path,that used to defind search helper,search class functions, this is used to make our module is searchable
eg:
"helpers" : { "HelperName1":"cms\\core\\blog\\helpers\\Blog", "HelperName2":"some path", .... }
YES
configuration string (view file path of configuration) configuration is used to view or edit module configuration eg:
"configuration" : "user::admin.configuration.configuration",
Above example is taken from user module,that mean user configuration is place on cms/core/user/admin/configuration/configuraion.blade.php
YES
configuration_data string (configuration data function path) configuration data is get module configuration from function,its define function name,this function should return module configuration
eg:
"configuration_data" : "\\cms\\core\\user\\Controllers\\UserController@getConfigurationData"
Above example is taken from user module,
that mean user configuration function is place on cms/core/user/controller/UserController.php and function name is getConfigurationData
/*
* configurations option
*/
public function getConfigurationData()
{
$group = UserGroupModel::where('status',1)->where('id','!=',1)->orderBy('group','Asc')->pluck("group","id");
return ['user_group'=>$group];
}

Above function return available user groups
YES

composer.json

{ "name": "cms/user", "description": "", "authors": [ { "name": "Ramesh", "email": "shunramit@gmail.com" } ], "autoload": { "psr-4": { } } }
composer.json file is contain detail about module and author and that contain autoload
just leave it this one, we will add autoload feature in later

menu.xml

menu.xml is used for add menu and menu group in adminpanel like joomla menu
  < ?xml version="1.0" encoding="utf-8"? >
 <menus>
     <group name="General" order="0">
         <menugroup name="Users" icon="fa fa-user" order="0">
             <menu name="View Users" route="user.index" />
             <menu name="Add User" route="user.create" />
          </menugroup>
      </group>
  </menus>
Tag Use Parent Attributes
<menus> menus tag is main tag of the menu.xml,that is bootstarp of menu.xml NULL NULL
<group> group tag is defind menu type,default type is general,you can create own group using name attribute <menus>
  • name
    name attribute is defind name of the menu type
    name is mandtory attribute
  • order
    order attribute defind order of the menutype
<menugroup> menugroup tag is defind menu group for example user module menus is placed under user menugroup Menugroup is optional <menus>
  • name
    name attribute is defind name of the menu group
    name is mandtory attribute
  • order
    order attribute defind order of the menu group
<menu> menu tag is used to give a link otherword its just clickable link <menus> OR <menugroup>
  • name
    name attribute is defind name of the menu group
    name is mandtory attribute
  • icon
    icon attribute is used to add font awsome icon
  • route
    route attribute is accept named route
    if you want add url?just use is_url attribute
    eg :
    <menu name="Module Configurations" route="/administrator/configurations/module/1" is_url="1"/>
  • is_url
    is_url attribute is used to identify given menu route is url or named route,if is_url="1" means given route is url otherwise given route is named roue
  • order
    order attribute defind order of the menu group

routes.php

routes.php file contain routes of the frontend app exclude admin routes
don't have routes.php?,just create it.. :)
if you don't like file name?
we have good solution for you
go to your module main provider and find registerRoot function then change it

adminroutes.php

adminroutes.php file contain routes of the admin
this file is include admin middlewares and admin route group with administrator prefix
if you dont want admin middleware of current module
go to your module provider and find registerAdminRoot method and remove middleware

Folders of the modules

Name Use Sub-folders
Controller controller folder contain controllers -
Database Database folder contain migrations and seeds Migration -> that contain migrations Seeds -> that contain seeds
Models Models folder contain Models class -
helpers helpers folder contain helpers class -
providers providers folder contain providers class -
resources resources folder contain assets and views views,assets
Mail Mail folder contain Mail class -
Events Events folder contain Events class -
Listeners Listeners folder contain Listeners class -
Middleware Middleware folder contain Middleware class -
Console Console folder contain artisan comands Commands
config config folder contain config array like roles (deprecated) and mailer configurations -

Artisian Commands

we provide more artisan commands

imagin we have more than 30 artisan commands,its not remebarable,but you know default laravel commands so we have some idea,we added one common word for all laravel commands,thats it,now easily you can remember our commands

eg:
default command for creating laravel controller is
php artisan make:controller {controller-name}
our comand is
php artisan make:cms-controller {controller-name} {module-name}
deafult migrate command is
php artisan migrate our migrate command is
php artisan cms-migrate
and one more we have our own commands,its not high count,but very usefull

List of our commands

  1. php artisan make:cms-module {module-name}
    this is used to make new module
  2. php artisan update:cms-menu
    this command is used to update or register menus

create new artisan commands for your module

if you want create new comand
php artisan make:cms-command {command-name} {module-name}
file is created under console/commands folder inside of your module

how to enable own commands?


open your module provider then create commands array
eg :
    /*
     * artisan command
     */
    protected $commands = [
        'cms\core\{module-name}\Console\Commands\{Commandclass}'
    ];
please replace module-name and commandclass like
    /*
     * artisan command
     */
    protected $commands = [
        'cms\core\menu\Console\Commands\AdminMenu'
    ];

then create method
    /*
     * register commands
     */
    protected function registerCommand()
    {
        $this->commands($this->commands);
    }
then add following line to register method
  $this->registerCommand();
eg:
  public function register()
  {
      $this->registerViews();
      $this->registerRoot();
      $this->registerAdminRoot();
      $this->registerCommand();
  }

What is next?

now i am working on moving this package to react,V3.O will release soon