roland/laravel-theme-manager

Laravel 5 Themes: Asset & Views folder per theme. Theme inheritance. Blade integration and more...

1.1 2018-07-16 15:23 UTC

This package is not auto-updated.

Last update: 2024-11-24 06:40:59 UTC


README

This package is a theme management package for Laravel with a set of tools to help you easily and quickly build a theme management system for your laravel based project. The goal of this package is to remain as flexible as possible and provide a way to use it internally.

Supports

This package supports Blade, PHP and Twig template engines.

Features

This package provides tools for the following:

  • Change themes on runtime.
  • Get theme meta infomations.
  • Support fallback templates.
  • Preview a theme using URL query parameter.
  • Extend the theme functionalities.

##Installation

To get started with this package, add the following lines to your composer.json file and run composer update.

"require": {
	"roland/laravel-theme-manager": "~1.0"
}

Or, Run composer require from your terminal to install the package via the Composer package manager:

composer require roland/laravel-theme-manager

Service Provider & Facade

If you disabled the laravel's automatic package discovery feature these will help you.

// Service Provider
Roland\Theme\ThemeServiceProvider::class,

// Facade
'Theme' => Roland\Theme\Facades\Theme::class,

Publish Configuration

Much of the package comes preconfigured, so that you can start building your API right away after you installed. You can either use .env file or config/themes.php to configure most of the package.

You also can publish the configuration file with the following Artisan command:

php artisan vendor:publish --provider="Roland\Theme\ThemeServiceProvider"

Enable or disable the package

You can set the value to true or false to enable or disable the package.

enable => true,

Default theme provider

Here you may specify which of the theme provider connections below you wish to use as your default provider.

Available drivers: "file"

'driver' => 'file',

Default theme

Here you may specify the default theme.

'theme' => 'default',

Themes path

Here you may specify a path for themes.

'path' => base_path('resources/themes'),

##Basic Usage

Create a theme

To create a theme, first, add a themes folder to the resources folder of your app.

Inside the themes folder, any folder you create with a theme.json the file represents a theme.

The folder structure will look like this:

resources
└── themes
    ├── [Theme folder]
    |   └── theme.json
    |   └── welcome.blade.php
    |
    └── [Another theme folder]
        └── theme.json
        └── welcome.blade.php

Theme information file (theme.json)

This package only recognize a folder as a theme when a file called theme.json exists.

This is the basic structure of the theme information file. You can add any number of key, value pairs to the file and retrieve later.

{
	"theme_title": "Default theme",
	"theme_description": "Default theme for the theme package",
	"theme_uri": "https://domain.com",
	"theme_version": "1.0.0",
	"theme_license": "The MIT License (MIT)",
	"theme_tags": "default, simple",
	"theme_type": "web",
	"author_name": "Jon Deep",
	"author_email": "JonDeep@domain.com",
	"author_uri": "https://domain.com"
}

Basic methods

To simply display a view (welcome) using the current theme. Otherwise fallback (index).

return Theme::view(['welcome', 'index']);

To set the current theme on runtime.

return Theme::use('mytheme')->view(['welcome']);

To set the current theme and update the default config theme.

Theme::set('mytheme');

Add theme parameter to preview a theme on runtime.

https://localhost/?theme=mytheme

You also can change the theme provider at runtime.

return Theme::driver('file')->view(['welcome']);

To check whether a theme exists or not.

Theme::exists('mytheme');

To check all themes.

Theme::all();

Ps: it will return a json with all the installed themes

Return theme's information as json.

// Return default theme's info
return Theme::info();

// Return provided theme's info
return Theme::info('mytheme');

Pass data to views.

// with() method
return Theme::with(['name' => 'Victoria'])->view(['welcome']);

// Alternative way
return Theme::view(['welcome'], ['name' => 'Victoria']);

##Advanced We allow you extend or add more theme providers using extend function on runtime without a hassle.

	Theme::extend('riak', function($app)
	{
		return 'Riak theme driver';
	});

	// Chnage the theme driver from route
	return Theme::driver('riak');

Configure Middleware

  • Publish the package: php artisan vendor:publish
  • On Http/kernel.php add to protected 'theme' => \App\Http\Middleware\CheckTheme::class,
  • Use middleware on the routes

Route example: Route::get('/', ['uses' => 'TestController@home'])->middleware('theme:ThemeName');

ps. using the theme will allow you to use the deafult Laravel view() with the currect theme :)

License

This package is licensed under the The MIT License (MIT).