Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhabalar,

Eskiden forumda açılmış olan bir konu hakkında bir soru
sormak istiyorum.

Bahsettiğim soru (https://laravel.gen.tr/d/1441-dinamik-subdomain)

Yukarıdaki gibi siteye üye olan kişiler için
subdomain oluşturuyorum, fakat üyeye ait olan subdomain temasının admin panelinden
ayarlanabilmesini istiyorum. Üye sitesini istediği tema ile güncelleyebilmesini nasıl sağlayabilirim ?

Sizce nasıl bir yapı oluşturmalıyım, fikir ve görüşleriniz için şimdiden teşekkür ederim.

  • mgsmus bunu yanıtladı.
  • 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()));

    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()));

      Merhaba
      Bu konuda benim kullandığım yapı daha basit.
      Kullanıcı tablosunda veya meta tablonuz varsa kullanıcıya özel bir tema belirliyor veya kendisine sectirip kayıt altına alıyorum. Daha sonra bir template klasörüm var burada da seçilebilecek şekilde 5-10 tasarım yükleyip kullanıcının seçtiği veya benim belirlediğim tema adını eşleştirip kullanıcının görmesini sağlıyorum.

      Yapmak istediğinizi anladım, cevabınız için teşekkür ederim. @mgsmus hocamın dediği şekilde problemimi
      çözüme kavuşturdum. Tekrardan hepinize teşekkür ederim.

      bir yıl sonra

      mgsmus

      Hocam bu konu benim için önemli ama bazı ifadeleri ilk defa görüyorum. Rica etsem şu kodların yorumu ifade edebilir misiniz?

      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));
      }

      Oradaki soru işareti ve iki nokta vs... Bu kod bloğunu komple ne demek olduğunu anlatabilir misiniz rica etsem?

        alaca33

        $theme = Auth::hasUser() 
                ? Auth::user()->theme
                : null;

        demek

        if(Auth::hasUser()) {
            $theme = Auth::user()->theme;
        } else {
            $theme = null;
        }