2017 © Pedro Peláez
 

library themevel

Theme and asset management for laravel 5

image

shipu/themevel

Theme and asset management for laravel 5

  • Thursday, November 23, 2017
  • by shipu
  • Repository
  • 9 Watchers
  • 160 Stars
  • 1,711 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 34 Forks
  • 0 Open issues
  • 8 Versions
  • 28 % Grown

The README.md

Laravel-Themevel

Latest Stable Version Latest Stable Version Latest Unstable Version License, (*1)

Themevel is a Laravel theme and asset management package. You can easily integrate this package with any Laravel based project., (*2)

Features

  • Custom theme path
  • Override theme
  • Parent theme support
  • Unlimited Parent view finding
  • Asset Finding
  • Theme translator support
  • Multiple theme config extension
  • Multiple theme changelog extension
  • Artisan console commands
  • Theme enable only Specific route via middleware
  • Almost everything customizable
  • Also Laravel 5.5 to Laravel 10 Supported

Installation

Themevel is a Laravel package so you can install it via Composer. Run this command in your terminal from your project directory:, (*3)

composer require shipu/themevel

Wait for a while, Composer will automatically install Themevel in your project., (*4)

Configuration

Below Laravel 5.5 you have to call this package service in config/app.php config file. To do that, add this line in app.php in providers array:, (*5)

Shipu\Themevel\Providers\ThemevelServiceProvider::class,

Below Laravel 5.5 version to use facade you have to add this line in app.php to the aliases array:, (*6)

'Theme' => Shipu\Themevel\Facades\Theme::class,

Now run this command in your terminal to publish this package resources:, (*7)

php artisan vendor:publish --provider="Shipu\Themevel\Providers\ThemevelServiceProvider"

Artisan Command

Run this command in your terminal from your project directory., (*8)

Create a theme directory:, (*9)

php artisan theme:create your_theme_name


 What is theme title?:
 > 

 What is theme description? []:
 > 

 What is theme author name? []:
 >  

 What is theme version? []:
 > 

 Any parent theme? (yes/no) [no]:
 > y

 What is parent theme name?:
 > 

List of all themes:, (*10)

php artisan theme:list

+----------+--------------+---------+----------+
| Name     | Author       | Version | Parent   |
+----------+--------------+---------+----------+
| themeone | Shipu Ahamed | 1.1.0   |          |
| themetwo | Shipu Ahamed | 1.0.0   | themeone |
+----------+--------------+---------+----------+

Example folder structure:

- app/
- ..
- ..
- Themes/
    - themeone/
        - assets
            - css
                - app.css
            - img
            - js
        - lang
            - en
                -content.php
        - views/
            - layouts
                - master.blade.php
            - welcome.blade.php
        - changelog.yml        
        - theme.json
     - themetwo/   

You can change theme.json and changelog.yml name from config/theme.php, (*11)

// ..
'config' => [
    'name' => 'theme.json',
    'changelog' => 'changelog.yml'
],
// ..

json, yml, yaml, php, ini, xml extension supported., (*12)

For example:, (*13)

// ..
'config' => [
    'name' => 'theme.json',
    'changelog' => 'changelog.json'
],
// ..

Then run theme:create command which describe above., (*14)

Now Please see the API List Doc., (*15)

View Finding Flow:

Suppose you want find welcome.blade.php, (*16)

 - At first check your active theme 
 - If `welcome.blade.php not found in active theme then search parent recursively
 - If `welcome.blade.php not found in parents theme then search laravel default view folder resources/views
 ```

## API List
- [set](https://github.com/shipu/themevel#set)
- [get](https://github.com/shipu/themevel#get)
- [current](https://github.com/shipu/themevel#current)
- [all](https://github.com/shipu/themevel#all)
- [has](https://github.com/shipu/themevel#has)
- [getThemeInfo](https://github.com/shipu/themevel#getThemeInfo)
- [assets](https://github.com/shipu/themevel#assets)
- [lang](https://github.com/shipu/themevel#lang)

### set

For switching current theme you can use `set` method.

```php
Theme::set('theme-name');

get

For getting current theme details you can use get method:, (*17)

Theme::get(); // return Array

You can also get particular theme details:, (*18)

Theme::get('theme-name'); // return Array
Theme::get('theme-name', true); // return Collection

current

Retrieve current theme's name:, (*19)

Theme::current(); // return string

all

Retrieve all theme information:, (*20)

Theme::all(); // return Array

has

For getting whether the theme exists or not:, (*21)

Theme::has(); // return bool

getThemeInfo

For info about the specified theme:, (*22)

$themeInfo = Theme::getThemeInfo('theme-name'); // return Collection

$themeName = $themeInfo->get('name');
// or
$themeName = $themeInfo['name'];

Also fallback support:, (*23)

$themeInfo = Theme::getThemeInfo('theme-name'); // return Collection

$themeName = $themeInfo->get('changelog.versions');
// or
$themeName = $themeInfo['changelog.versions'];
// or you can also call like as multi dimension
$themeName = $themeInfo['changelog']['versions'];

assets

For binding theme assets you can use the assets method:, (*24)

Theme::assets('your_asset_path'); // return string

It's generated at BASE_URL/theme_roots/your_active_theme_name/assets/your_asset_path, (*25)

If your_asset_path does not exist then it's find to active theme immediate parent assets folder. Look like BASE_URL/theme_roots/your_active_theme_parent_name/assets/your_asset_path, (*26)

When using helper you can also get assets path:, (*27)

themes('your_asset_path'); // return string

If you want to bind specific theme assets:, (*28)

Theme::assets('your_theme_name:your_asset_path'); // return string
// or 
themes('your_theme_name:your_asset_path'); // return string

Suppose you want to bind app.css in your blade. Then below code can be applicable:, (*29)

<link rel="stylesheet" href="{{ themes('app.css') }}">

Specific theme assets:, (*30)

<link rel="stylesheet" href="{{ themes('your_theme_name:app.css') }}">

lang

The lang method translates the given language line using your current theme localization files:, (*31)

echo Theme::lang('content.title'); // return string
// or
echo lang('content.title'); // return string

also support, (*32)

echo Theme::lang('content.title', [your replace array], 'your desire locale'); // return string
// or
echo lang('content.title', [your replace array], 'your desire locale'); // return string

If you want to bind specific theme assets:, (*33)

echo Theme::lang('your_theme_name::your_asset_path'); // return string
// or 
echo lang('your_theme_name::your_asset_path'); // return string

How to use in Route

Route::get('/', function () {
    Theme::set('your_theme_name');
    return view('welcome');
});

This will firstly check if there is a welcome.blade.php in current theme directory. If none is found then it checks parent theme, and finally falls back to default Laravel views location., (*34)

If you want to specific theme view:, (*35)

Route::get('/', function () {
    Theme::set('your_theme_name');
    return view('your_theme_name::welcome');
});

Set theme using route middleware

A helper middleware is included out of the box if you want to define a theme per route. To use it:, (*36)

First register it in app\Http\Kernel.php:, (*37)

protected $routeMiddleware = [
    // ...
    'theme' => \Shipu\Themevel\Middleware\RouteMiddleware::class,
];

Now you can apply the middleware to a route or route-group. Eg:, (*38)

Route::group(['prefix' => 'admin', 'middleware'=>'theme:Your_theme_name'], function() {
    // ... Add your routes here 
    // The Your_theme_name will be applied.
});

Set theme using web middleware

A helper middleware is included out of the box if you want to define a theme per route. To use it:, (*39)

First register it in app\Http\Kernel.php:, (*40)

protected $middlewareGroups = [
    'web' => [
        // ...
        \Shipu\Themevel\Middleware\WebMiddleware::class,
    ],
    // ...
];

Theme set from config/theme.php ., (*41)

Then in your controller you can call your view as you would normally do:, (*42)


return view('home'); // This will load the home.blade.php from the the folder you set in your `config/theme.php`

Dependency Injection

You can also inject theme instance using ThemeContract, eg:, (*43)

``` php use Shipu\Themevel\Contracts\ThemeContract;, (*44)

private $theme;, (*45)

public function __construct(ThemeContract $theme) { $this->theme = $theme } ```, (*46)

Troubleshooting

Clear config after runing vendor publish (see Config section) to save issues related to config caching by running:, (*47)

php artisan config:cache, (*48)

php artisan config:clear, (*49)

Credits

Support for this project

Hey dude! Help me out for a couple of :beers:!, (*50)

Beerpay Beerpay, (*51)

The Versions

23/11 2017

dev-master

9999999-dev https://github.com/shipu/themevel

Theme and asset management for laravel 5

  Sources   Download

CC(3.0)

The Requires

 

The Development Requires

laravel lumen asset theme management multi themevel child-theme

23/11 2017

v1.6

1.6.0.0 https://github.com/shipu/themevel

Theme and asset management for laravel 5

  Sources   Download

CC(3.0)

The Requires

 

The Development Requires

laravel lumen asset theme management multi themevel child-theme

23/11 2017

v1.5

1.5.0.0 https://github.com/shipu/themevel

Theme and asset management for laravel 5

  Sources   Download

CC(3.0)

The Requires

 

The Development Requires

laravel lumen asset theme management multi themevel child-theme

19/11 2017

v1.4

1.4.0.0 https://github.com/shipu/themevel

Theme and asset management for laravel 5

  Sources   Download

CC(3.0)

The Requires

 

The Development Requires

laravel lumen asset theme management multi themevel child-theme

07/06 2017

v1.3

1.3.0.0 https://github.com/shipu/themevel

Theme and asset management for laravel 5

  Sources   Download

CC(3.0)

The Requires

 

The Development Requires

laravel lumen asset theme management multi themevel child-theme

22/05 2017

v1.2

1.2.0.0 https://github.com/shipu/themevel

Theme and asset management for laravel 5

  Sources   Download

CC(3.0)

The Requires

 

laravel lumen asset theme management multi themevel child-theme

21/05 2017

v1.1

1.1.0.0 https://github.com/shipu/themevel

Theme and asset management for laravel 5

  Sources   Download

CC(3.0)

The Requires

 

laravel lumen asset theme management multi themevel child-theme

20/05 2017

v1.0

1.0.0.0 https://github.com/shipu/themevel

Theme and asset management for laravel 5

  Sources   Download

CC(3.0)

The Requires

 

laravel lumen asset theme management multi themevel child-theme