hakanakbulut Tema ile kastettiğiniz nedir? CSS değişimi mi yoksa komple şablon/layout değişimi mi?
Eğer CSS değişimi ise
https://laravel.com/docs/8.x/views#view-composers
View::composer('*', function ($view) {
$theme = Auth::hasUser()
? Auth::user()->theme
: null;
if(is_null($theme)) {
$theme = 'default';
}
$view->with('__theme', sprintf('themes/%s.css', $theme));
});
/public
/themes
default.css
summer.css
<link rel="stylesheet" type="text/css" href="{{ asset($__theme) }}">
Eğer komple şablon değişimi ise bir tane middleware içerisinde:
https://laravel.com/docs/8.x/middleware
public function handle($request, Closure $next)
{
$theme = Auth::hasUser()
? Auth::user()->theme
: null;
if(is_null($theme)) {
$theme = 'default';
}
View::addNamespace('theme', resource_path('views/themes/'. $theme));
}
Örneğin default (varsayılan) ve summer isimli iki tema varsa:
/resources
/views
/themes
/default
/users
index.blade.php
/summer
/users
index.blade.php
public function index()
{
$users = User::simplePaginate();
return view('theme::users.index', compact('users'));
}
yaptığınızda eğer kullanıcı summer seçmiş ise resources/views/themes/summer/users/index.blade.php şablonu render edilir; yoksa resources/views/themes/default/users/index.blade.php şablonu render edilecek.
Bunlardan birini ya da her ikisini birlikte kullanarak bir tema sistemi oluşturabilirsiniz.
Eğer veritabanında tuttuğunuz bir şeye değil de subdomainden bir şeyler yapmaya ihtiyacınız varsa şu şekilde subdomaini alabilirsiniz:
$subdomain = Arr::first(explode('.', $request->getHost()));